diff --git a/README.md b/README.md index c7365ff6..5ec848c4 100644 --- a/README.md +++ b/README.md @@ -127,13 +127,13 @@ canvas .mount("#chart"); // Specify an element to mount on using a CSS selector ``` -See [muzejs.org/docs](https://muzejs.org/docs) for more documentation! +See [muzejs.org/docs](https://muzejs.org/docs/v1.3.1) for more documentation! You also can checkout our Yeoman Generator [generator-muze](https://github.com/chartshq/generator-muze) to try out the **muze** through a boilerplate app. ## Documentation -You can find detailed tutorials, concepts and API references at [muzejs.org/docs](https://muzejs.org/docs). +You can find detailed tutorials, concepts and API references at [muzejs.org/docs](https://muzejs.org/docs/v1.3.1). ## Support diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index 16ad2401..99a79e68 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -1,5 +1,6 @@ image: node:10.16.3 - +options: + max-time: 30 pipelines: pull-requests: '**': @@ -9,4 +10,4 @@ pipelines: - apt-get install zip - npm install --unsafe-perm - npm run test - - npm run autotest:prod + - npm run autotest:prod \ No newline at end of file diff --git a/dist/muze.css b/dist/muze.css index 48a75f3e..fd4f6648 100644 --- a/dist/muze.css +++ b/dist/muze.css @@ -1 +1 @@ -.muze-simple-axis text{text-align:center;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-ticks{font-style:"normal";fill:#858585}.muze-tick-lines,.muze-ticks{font-size:12px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-tick-lines{stroke:#efefef}.muze-axis-name{font-size:14px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;fill:#5f5f5f}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke-linejoin:round;stroke-width:2px;stroke:#1f77b4}.muze-layer-area{stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#1f77b4}.muze-layer-text text{font-size:12px;fill:#000}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill-opacity:.5}.muze-layer-bar{fill-opacity:1;stroke:none;stroke-width:0}.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke-opacity:.7;stroke:#f44336}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke-opacity:.3!important;stroke:#7f7f7f!important}.muze-layer-tick-selected{stroke:#000!important}.muze-selection-box-group{fill:#d3d3d3;fill-opacity:.3;stroke:#b4b4b4;cursor:all-scroll;pointer-events:all}.muze-tooltip-box{opacity:1;border:1px solid hsla(0,0%,59.2%,.19);background:#fbfbfb;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);font-size:12px;color:#5f5f5f;-webkit-border-radius:1px;border-radius:1px;padding-top:4px;display:inline-block;pointer-events:none;z-index:9999999999;text-align:left}.muze-tooltip-row{padding-bottom:2px;padding-top:2px;overflow:auto}.muze-tooltip-parent-container{pointer-events:none;z-index:9999999999}.muze-tooltip-stacked-row{color:#828282;margin-left:10px;font-size:12px;font-weight:600;line-height:"15px"}.muze-tooltip-stacked-row-key{margin-left:10px}.muze-tooltip-stacked-row-value{margin-left:2px}.muze-tooltip-stacked-percentage{font-size:10px;color:#828282;margin-left:-20px;margin-right:20px;float:right;line-height:17px}.muze-tooltip-selected-row{background-color:#ebebeb}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{color:#5f5f5f;float:right;margin-left:10px}.muze-tooltip-connectors path{stroke-width:2px;stroke:#c7c7be;stroke-linejoin:round;stroke-linecap:round}.muze-tooltip-html-container{margin-left:10px;margin-right:10px}.muze-tooltip-content svg{margin-left:10px;margin-right:5px}.muze-tooltip-value{margin-right:24px;margin-left:24px}.muze-tooltip-first{font-weight:600;font-size:15px;margin-left:15px}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-tooltip-content-parent-container{display:inline-block}.muze-tooltip-content-container-highlightSummary{border-right:1px solid #e9e9e9}.muze-tooltip-content-container-selectionSummary-crosstab{display:inline-block}.muze-tooltip-content-container-selectionSummary-default{border-bottom:1px solid #e9e9e9}.muze-tooltip-content-container-highlightSummary-crosstab{float:left}.muze-tooltip-content-container-selectionSummary .muze-tooltip-content{margin-left:3px;margin-right:3px}.muze-crossband{stroke-opacity:0;fill:grey;fill-opacity:.2}.muze-crossline{stroke:#979797;stroke-dasharray:5,7;fill:#979797;opacity:.65}.muze-anchors-group{pointer-events:none}.muze-anchors-group-lower .muze-layer-point,.muze-anchors-group-upper .muze-layer-point,.muze-anchors-group .muze-layer-point,.muze-brush-anchors-lower .muze-layer-point,.muze-brush-anchors-upper .muze-layer-point,.muze-persistent-anchors-lower .muze-layer-point,.muze-persistent-anchors-upper .muze-layer-point,.muze-persistent-anchors .muze-layer-point{fill-opacity:1}.muze-axis-ticks-highlight{font-weight:700;fill:#595959}.muze-axis-ticks-unhighlight{font-weight:400;fill:#858585}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box,.muze-legend-item-info,.muze-legend-title{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-legend-box{line-height:10px!important;height:100px;display:inline-block}.muze-legend-title{display:table;-webkit-box-align:center;-webkit-align-items:center;align-items:center;float:left;text-align:left;font-size:14px;height:30px;fill:#5f5f5f;font-weight:600}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3}.muze-legend-fadeout path{stroke-width:1px;fill-opacity:0}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{float:left;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;cursor:pointer;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{fill:#d3d3d3;fill-opacity:.3;stroke:#b4b4b4;cursor:all-scroll;pointer-events:all}.muze-legend-marker{stroke:#e2e2e2;stroke-width:1px;fill:#797474}.muze-legend-marker-show{display:block}.muze-legend-marker-hide{display:none}.muze-legend-marker-text-container{position:relative}.muze-legend-marker-text{position:absolute}.muze-legend-marker-text div{text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff;pointer-events:none}.muze-text-cell{font-size:12px;color:#5f5f5f;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:15px;white-space:nowrap;-webkit-transform-origin:0 0;transform-origin:0 0}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{text-align:center;color:#858585;font-weight:800;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1;white-space:nowrap}.muze-subheader-cell{font-size:15px}.muze-scroll-bar{background:#f8f8f8;position:relative;font-size:10px}.muze-scroll-arrow{float:left;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;background:#a2a2a2;color:#fff}.muze-scroll-arrow-left{height:100%;width:20px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-right{height:100%;width:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.muze-scroll-arrow-right,.muze-scroll-arrow-top{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.muze-scroll-arrow-top{width:100%;height:20px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-bottom{width:100%;height:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.muze-scroll-rect{float:left;position:relative}.muze-scroll-mover{position:absolute;-webkit-border-radius:3px;background:#a2a2a2;cursor:-webkit-grab;border-radius:3px}.muze-scroll-mover:active{cursor:-webkit-grabbing}.muze-scroll-arrow-chevron{position:relative;text-align:center;padding:1px;margin-bottom:0}.muze-scroll-arrow-chevron:after,.muze-scroll-arrow-chevron:before{content:"";position:absolute;background:#fff}#muze-scroll-arrow-chevron-bottom,#muze-scroll-arrow-chevron-top{height:1px;width:6px}#muze-scroll-arrow-chevron-left,#muze-scroll-arrow-chevron-right{width:1px;height:6px}#muze-scroll-arrow-chevron-bottom:before{top:0;left:0;height:100%;width:51%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-bottom:after{right:0;width:50%}#muze-scroll-arrow-chevron-bottom:after,#muze-scroll-arrow-chevron-top:before{top:0;height:100%;-webkit-transform:skew(0deg,-35deg);transform:skew(0deg,-35deg)}#muze-scroll-arrow-chevron-top:before{left:0;width:51%}#muze-scroll-arrow-chevron-top:after{top:0;right:0;height:100%;width:50%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-right:before{top:0;left:0;height:51%;width:100%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-right:after{bottom:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}#muze-scroll-arrow-chevron-left:before{bottom:0;left:0;width:100%;height:51%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-left:after{top:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}.muze-grid-normal{border-color:#ebebeb}.muze-grid-normal .muze-axis-name{font-size:12px;line-height:15px}.muze-grid-dark{border-color:#cbcbcb}.muze-grid-dark .muze-axis-name{font-size:12px;line-height:15px}.muze-grid-dark-bottom{border-bottom-color:#cbcbcb}.muze-grid-darker-top{border-top-color:#979797}.muze-grid-dark-top{border-top-color:#cbcbcb}.muze-grid-dark-right{border-right-color:#cbcbcb}.muze-grid-darker-bottom{border-bottom-color:#979797}.muze-grid-dark-left{border-left-color:#cbcbcb}.muze-grid-none-left{border-left-color:transparent}.muze-grid-none-right{border-right-color:transparent}.muze-grid-none-top{border-top-color:transparent}.muze-grid-none-bottom{border-bottom-color:transparent}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container,.muze-subtitle-cell,.muze-title-cell{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-group-container{font-size:12px;line-height:15px;-webkit-tap-highlight-color:rgba(0,0,0,0);line-height:1.42857143;color:#5f5f5f;background-color:transparent;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{margin:5px;width:0;height:0;position:absolute;opacity:.5;z-index:10;cursor:pointer}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{left:100%;border-left:15px solid #4682b4}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{top:-webkit-calc(50% - 25px);top:calc(50% - 25px);border-top:20px solid transparent;border-bottom:20px solid transparent}.muze-group-container .muze-table-arrow-left{right:100%;border-right:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom{top:100%;border-top:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{left:-webkit-calc(50% - 25px);left:calc(50% - 25px);border-left:20px solid transparent;border-right:20px solid transparent}.muze-group-container .muze-table-arrow-top{bottom:100%;border-bottom:15px solid #4682b4}.muze-group-container .table-row-nested{visibility:hidden;border-top:none}.muze-group-container svg{display:block;width:inherit;height:inherit;float:left;vertical-align:top}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-width:100%;max-height:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{text-align:center;float:left}.muze-legend-horizontal-section{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:wrap;flex-wrap:wrap}.muze-legend-components{text-align:center;float:left}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{width:inherit;height:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-grid-top{position:relative;top:100%;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.muze-grid div{float:left}.muze-grid div,.muze-grid table{border-collapse:collapse}.muze-title-cell{font-size:24px;font-weight:700;color:#5f5f5f}.muze-grid-headers{font-size:12px}.muze-subtitle-cell{font-size:16px;font-weight:400;color:#b1b1b1}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.muze-message-container{background-color:#f1f1f1;display:table;border:1px solid #c3c9d0}.muze-message-container-child{display:table-cell;vertical-align:middle}.muze-message-container-child-img{text-align:center}.muze-message-container-child-img svg{display:unset;float:unset}.muze-message-container-child-message{color:#4f708c;text-align:center;font-weight:600}.hidden{display:none} \ No newline at end of file +.muze-simple-axis text{text-align:center;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-ticks{font-style:"normal";fill:#858585}.muze-tick-lines,.muze-ticks{font-size:12px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-tick-lines{stroke:#efefef}.muze-axis-name{font-size:14px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;fill:#5f5f5f}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke-linejoin:round;stroke-width:2px;stroke:#1f77b4}.muze-layer-area{stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#1f77b4}.muze-layer-text text{font-size:12px;fill:#000}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill-opacity:.5}.muze-layer-bar{fill-opacity:1;stroke:none;stroke-width:0}.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke-opacity:.7;stroke:#f44336}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke-opacity:.3!important;stroke:#7f7f7f!important}.muze-layer-tick-selected{stroke:#000!important}.muze-selection-box-group{fill:#d3d3d3;fill-opacity:.3;stroke:#b4b4b4;cursor:all-scroll;pointer-events:all}.muze-tooltip-box{opacity:1;border:1px solid hsla(0,0%,59.2%,.19);background:#fbfbfb;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);font-size:12px;color:#5f5f5f;-webkit-border-radius:1px;border-radius:1px;padding-top:4px;display:inline-block;pointer-events:none;z-index:9999999999;text-align:left}.muze-tooltip-row{padding-bottom:2px;padding-top:2px;overflow:auto}.muze-tooltip-parent-container{pointer-events:none;z-index:9999999999}.muze-tooltip-stacked-row{color:#828282;margin-left:10px;font-size:12px;font-weight:600;line-height:"15px"}.muze-tooltip-stacked-row-key{margin-left:10px}.muze-tooltip-stacked-row-value{margin-left:2px}.muze-tooltip-stacked-percentage{font-size:10px;color:#828282;margin-left:-20px;margin-right:20px;float:right;line-height:17px}.muze-tooltip-selected-row{background-color:#ebebeb}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{color:#5f5f5f;float:right;margin-left:10px}.muze-tooltip-connectors path{stroke-width:2px;stroke:#c7c7be;stroke-linejoin:round;stroke-linecap:round}.muze-tooltip-html-container{margin-left:10px;margin-right:10px}.muze-tooltip-content svg{margin-left:10px;margin-right:5px}.muze-tooltip-value{margin-right:24px;margin-left:24px}.muze-tooltip-first{font-weight:600;font-size:15px;margin-left:15px}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-tooltip-content-parent-container{display:inline-block}.muze-tooltip-content-container-highlightSummary{border-right:1px solid #e9e9e9}.muze-tooltip-content-container-selectionSummary-crosstab{display:inline-block}.muze-tooltip-content-container-selectionSummary-default{border-bottom:1px solid #e9e9e9}.muze-tooltip-content-container-highlightSummary-crosstab{float:left}.muze-tooltip-content-container-selectionSummary .muze-tooltip-content{margin-left:3px;margin-right:3px}.muze-crossband{stroke-opacity:0;fill:grey;fill-opacity:.2}.muze-crossline{stroke:#979797;stroke-dasharray:5,7;fill:#979797;opacity:.65}.muze-anchors-group{pointer-events:none}.muze-anchors-group-lower .muze-layer-point,.muze-anchors-group-upper .muze-layer-point,.muze-anchors-group .muze-layer-point,.muze-brush-anchors-lower .muze-layer-point,.muze-brush-anchors-upper .muze-layer-point,.muze-persistent-anchors-lower .muze-layer-point,.muze-persistent-anchors-upper .muze-layer-point,.muze-persistent-anchors .muze-layer-point{fill-opacity:1}.muze-axis-ticks-highlight{font-weight:700;fill:#595959}.muze-axis-ticks-unhighlight{font-weight:400;fill:#858585}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box,.muze-legend-item-info,.muze-legend-title{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-legend-box{line-height:10px!important;height:100px;display:inline-block}.muze-legend-title{display:table;-webkit-box-align:center;-webkit-align-items:center;align-items:center;float:left;text-align:left;font-size:14px;height:30px;fill:#5f5f5f;font-weight:600}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3}.muze-legend-fadeout path{stroke-width:1px;fill-opacity:0}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{float:left;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;cursor:pointer;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{fill:#d3d3d3;fill-opacity:.3;stroke:#b4b4b4;cursor:all-scroll;pointer-events:all}.muze-legend-marker{stroke:#e2e2e2;stroke-width:1px;fill:#797474}.muze-legend-marker-show{display:block}.muze-legend-marker-hide{display:none}.muze-legend-marker-text-container{position:relative}.muze-legend-marker-text{position:absolute}.muze-legend-marker-text div{text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff;pointer-events:none}.muze-text-cell{font-size:12px;color:#5f5f5f;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:15px;white-space:nowrap;-webkit-transform-origin:0 0;transform-origin:0 0}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{text-align:center;color:#858585;font-weight:800;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1;white-space:nowrap}.muze-subheader-cell{font-size:15px}.muze-scroll-bar{background:#f8f8f8;position:relative;font-size:10px}.muze-scroll-arrow{float:left;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;background:#a2a2a2;color:#fff}.muze-scroll-arrow-left{height:100%;width:20px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-right{height:100%;width:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.muze-scroll-arrow-right,.muze-scroll-arrow-top{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.muze-scroll-arrow-top{width:100%;height:20px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-bottom{width:100%;height:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.muze-scroll-rect{float:left;position:relative}.muze-scroll-mover{position:absolute;-webkit-border-radius:3px;background:#a2a2a2;cursor:-webkit-grab;border-radius:3px}.muze-scroll-mover:active{cursor:-webkit-grabbing}.muze-scroll-arrow-chevron{position:relative;text-align:center;padding:1px;margin-bottom:0}.muze-scroll-arrow-chevron:after,.muze-scroll-arrow-chevron:before{content:"";position:absolute;background:#fff}#muze-scroll-arrow-chevron-bottom,#muze-scroll-arrow-chevron-top{height:1px;width:6px}#muze-scroll-arrow-chevron-left,#muze-scroll-arrow-chevron-right{width:1px;height:6px}#muze-scroll-arrow-chevron-bottom:before{top:0;left:0;height:100%;width:51%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-bottom:after{right:0;width:50%}#muze-scroll-arrow-chevron-bottom:after,#muze-scroll-arrow-chevron-top:before{top:0;height:100%;-webkit-transform:skew(0deg,-35deg);transform:skew(0deg,-35deg)}#muze-scroll-arrow-chevron-top:before{left:0;width:51%}#muze-scroll-arrow-chevron-top:after{top:0;right:0;height:100%;width:50%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-right:before{top:0;left:0;height:51%;width:100%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-right:after{bottom:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}#muze-scroll-arrow-chevron-left:before{bottom:0;left:0;width:100%;height:51%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-left:after{top:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}.muze-grid-normal{border-color:#ebebeb!important}.muze-grid-normal .muze-axis-name{font-size:12px!important;line-height:15px!important}.muze-grid-dark{border-color:#cbcbcb!important}.muze-grid-dark .muze-axis-name{font-size:12px!important;line-height:15px!important}.muze-grid-dark-bottom{border-bottom-color:#cbcbcb!important}.muze-grid-darker-top{border-top-color:#979797!important}.muze-grid-dark-top{border-top-color:#cbcbcb!important}.muze-grid-dark-right{border-right-color:#cbcbcb!important}.muze-grid-darker-bottom{border-bottom-color:#979797!important}.muze-grid-dark-left{border-left-color:#cbcbcb!important}.muze-grid-none-left{border-left-color:transparent!important}.muze-grid-none-right{border-right-color:transparent!important}.muze-grid-none-top{border-top-color:transparent!important}.muze-grid-none-bottom{border-bottom-color:transparent!important}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container,.muze-subtitle-cell,.muze-title-cell{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-group-container{font-size:12px;line-height:15px;-webkit-tap-highlight-color:rgba(0,0,0,0);line-height:1.42857143;color:#5f5f5f;background-color:transparent;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{margin:5px;width:0;height:0;position:absolute;opacity:.5;z-index:10;cursor:pointer}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{left:100%;border-left:15px solid #4682b4}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{top:-webkit-calc(50% - 25px);top:calc(50% - 25px);border-top:20px solid transparent;border-bottom:20px solid transparent}.muze-group-container .muze-table-arrow-left{right:100%;border-right:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom{top:100%;border-top:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{left:-webkit-calc(50% - 25px);left:calc(50% - 25px);border-left:20px solid transparent;border-right:20px solid transparent}.muze-group-container .muze-table-arrow-top{bottom:100%;border-bottom:15px solid #4682b4}.muze-group-container .table-row-nested{visibility:hidden;border-top:none}.muze-group-container svg{display:block;width:inherit;height:inherit;float:left;vertical-align:top}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-width:100%;max-height:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{text-align:center;float:left}.muze-legend-horizontal-section{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:wrap;flex-wrap:wrap}.muze-legend-components{text-align:center;float:left}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{width:inherit;height:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-grid-top{position:relative;top:100%;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.muze-grid div{float:left}.muze-grid div,.muze-grid table{border-collapse:collapse}.muze-title-cell{font-size:24px;font-weight:700;color:#5f5f5f}.muze-grid-headers{font-size:12px}.muze-subtitle-cell{font-size:16px;font-weight:400;color:#b1b1b1}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.muze-message-container{background-color:#f1f1f1;display:table;border:1px solid #c3c9d0}.muze-message-container-child{display:table-cell;vertical-align:middle}.muze-message-container-child-img{text-align:center}.muze-message-container-child-img svg{display:unset;float:unset}.muze-message-container-child-message{color:#4f708c;text-align:center;font-weight:600}.hidden{display:none} \ No newline at end of file diff --git a/dist/muze.js b/dist/muze.js index 7267db07..6665f629 100644 --- a/dist/muze.js +++ b/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=18)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports=JSON.parse('{"name":"datamodel","description":"Relational algebra compliant in-memory tabular data store","homepage":"https://github.com/chartshq/datamodel","version":"2.3.0","license":"MIT","main":"dist/datamodel.js","keywords":["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],"author":"Muzejs.org (https://muzejs.org/)","repository":{"type":"git","url":"https://github.com/chartshq/datamodel.git"},"contributors":[{"name":"Akash Goswami","email":"akashgoswami90s@gmail.com"},{"name":"Subhash Haldar"},{"name":"Rousan Ali","email":"rousanali786@gmail.com","url":"https://rousan.io"},{"name":"Ujjal Kumar Dutta","email":"duttaujjalkumar@live.com"},{"name":"Ranajit Banerjee","email":"ranajit.113124@gmail.com"},{"name":"Adarsh Lilha","email":"adarshlilha@gmail.com"}],"dependencies":{"d3-dsv":"^1.0.8"},"devDependencies":{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","chai":"3.5.0","cross-env":"^5.0.5","eslint":"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0","jsdoc":"3.5.5","json2yaml":"^1.1.0","karma":"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3","marked":"^0.5.0","mocha":"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0","webpack":"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},"scripts":{"test":"npm run lint && npm run ut","ut":"karma start karma.conf.js","utd":"karma start --single-run false --browsers Chrome karma.conf.js ","build":"npm run build:prod","build:dev":"webpack --mode development","build:prod":"webpack --mode production","start":"webpack-dev-server --config webpack.config.dev.js --mode development --open","lint":"eslint ./src","lint-errors":"eslint --quiet ./src","docs":"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}')},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"DataFormat",function(){return o}),n.d(r,"DimensionSubtype",function(){return u}),n.d(r,"MeasureSubtype",function(){return c}),n.d(r,"FieldType",function(){return f}),n.d(r,"FilteringMode",function(){return l}),n.d(r,"GROUP_BY_FUNCTIONS",function(){return s});var i={};n.r(i),n.d(i,"Dimension",function(){return Me}),n.d(i,"Measure",function(){return xe}),n.d(i,"FieldParser",function(){return Le}),n.d(i,"fieldRegistry",function(){return ot}),n.d(i,"columnMajor",function(){return v});var a={};n.r(a),n.d(a,"sum",function(){return kn}),n.d(a,"avg",function(){return Dn}),n.d(a,"min",function(){return Tn}),n.d(a,"max",function(){return Fn}),n.d(a,"first",function(){return Nn}),n.d(a,"last",function(){return Rn}),n.d(a,"count",function(){return Pn}),n.d(a,"sd",function(){return Cn});var o={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},u={CATEGORICAL:"categorical",TEMPORAL:"temporal",BINNED:"binned"},c={CONTINUOUS:"continuous"},f={MEASURE:"measure",DIMENSION:"dimension"},l={NORMAL:"normal",INVERSE:"inverse",ALL:"all"},s={SUM:"sum",AVG:"avg",MIN:"min",MAX:"max",FIRST:"first",LAST:"last",COUNT:"count",STD:"std"};function p(e){return e instanceof Date?e:new Date(e)}function d(e){return e<10?"0"+e:e}function h(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},h.TOKEN_PREFIX="%",h.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},h.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},h.defaultRangeParser=function(e,t){return function(n){var r,i=void 0;if(!n)return t;var a=n.toLowerCase();for(i=0,r=e.length;ii.getFullYear()&&(t=""+(a-1)+r),p(t).getFullYear()},formatter:function formatter(e){var t=p(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return p(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},h.formatAs=function(e,t){var n,r=p(e),i=h.findTokens(t),a=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=i.length;l=0;p--)(f=a[p].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(p=0;p0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var R=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:V.CROSS,a=[],o=[],u=n||J,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,p=c.name+"."+f.name,d=H(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=O({},e.schema());-1===d.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),f.fields.forEach(function(e){var t=O({},e.schema());-1!==d.indexOf(t.name)?r||(t.name=f.name+"."+t.name,a.push(t)):a.push(t)}),N(e._rowDiffset,function(n){var p=!1,h=void 0;N(t._rowDiffset,function(v){var y=[],m={};m[l]={},m[s]={},c.fields.forEach(function(e){y.push(e.partialField.data[n]),m[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}}),f.fields.forEach(function(e){-1!==d.indexOf(e.schema().name)&&r||y.push(e.partialField.data[v]),m[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}});var b=Bt(m[l]),g=Bt(m[s]);if(u(b,g,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var _={};y.forEach(function(e,t){_[a[t].name]=e}),p&&V.CROSS!==i?o[h]=_:(o.push(_),p=!0,h=n)}else if((i===V.LEFTOUTER||i===V.RIGHTOUTER)&&!p){var w={},O=c.fields.length-1;y.forEach(function(e,t){w[a[t].name]=t<=O?e:null}),p=!0,h=n,o.push(w)}})}),new Sn(o,a,{name:p})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function K(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[f],f+=1):f>r?(a[l]=o[c],c+=1):i(o[c],o[f])<=0?(a[l]=o[c],c+=1):(a[l]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}var W=function W(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function X(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=""+e)==(t=""+t)?0:e>t?-1:1}}return n}(e.type,n)}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function $(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function Q(e,t,n){for(var r=void 0,i=void 0,a=void 0,o=n.length-1;o>=0;o--)r=n[o][0],i=n[o][1],(a=sn(t,r))&&("function"==typeof i?K(e,function(e,t){return i(e[a.index],t[a.index])}):E(i)?function(){var n=Z(e,a.index),r=i[i.length-1],o=i.slice(0,i.length-1),u=o.map(function(e){return sn(t,e)});n.forEach(function(e){e.push($(e,o,u))}),K(n,function(e,t){var n=e[2],i=t[2];return r(n,i)}),e.length=0,n.forEach(function(t){e.push.apply(e,X(t[1]))})}():function(){var t=q(a,i);K(e,function(e,n){return t(e[a.index],n[a.index])})}())}var ee,te=function e(t,n,r,i){if(0===t.length)return n;var a=t[0],o=new Map;n.reduce(function(e,t){var n=t[a.index];return e.has(n)?e.get(n).push(t):e.set(n,[t]),e},o);var u=!0,c=!1,f=void 0;try{for(var l,s=o[Symbol.iterator]();!(u=(l=s.next()).done);u=!0){var p=l.value,d=W(p,2),h=d[0],v=d[1],y=e(t.slice(1),v,r,i);o.set(h,y),Array.isArray(y)&&Q(y,r,i)}}catch(e){c=!0,f=e}finally{try{!u&&s.return&&s.return()}finally{if(c)throw f}}return o};function re(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(",").forEach(function(t){for(var n=0;nr&&(r=i))}),[n,r]},Ke=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===ht?f=!0:r===vt&&(f=!0,e.charCodeAt(o)===ht&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+bt(t,6):bt(t,4))+"-"+bt(e.getUTCMonth()+1,2)+"-"+bt(e.getUTCDate(),2)+(a?"T"+bt(n,2)+":"+bt(r,2)+":"+bt(i,2)+"."+bt(a,3)+"Z":i?"T"+bt(n,2)+":"+bt(r,2)+":"+bt(i,2)+"Z":r||n?"T"+bt(n,2)+":"+bt(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,i,a=r(e,function(e,r){if(n)return n(e,r-1);i=e,n=t?function(e,t){var n=yt(e);return function(r,i){return t(n(r),i,e)}}(e,t):yt(e)});return a.columns=i||[],a},parseRows:r,format:function format(t,n){return null==n&&(n=mt(t)),[n.map(o).join(e)].concat(i(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=mt(e)),i(e,t).join("\n")},formatRows:function formatRows(e){return e.map(a).join("\n")},formatRow:a,formatValue:o}},wt=function wt(e,t,n){if(!Array.isArray(t))throw new Error("Schema missing or is in an unsupported format");var r=t.map(function(e){return e.name});n=Object.assign({},{firstRowHeader:!0},n);var i=[],a=v(i),o=r;n.firstRowHeader&&(o=e.splice(0,1)[0]);var u=o.reduce(function(e,t,n){return Object.assign(e,(a=n,(i=t)in(r={})?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a,r));var r,i,a},{});return e.forEach(function(e){var t=[];return r.forEach(function(n){var r=u[n];t.push(e[r])}),a.apply(void 0,t)}),[r,i]},Ot=function Ot(e,t,n){n=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},n);var r=_t(n.fieldSeparator);return wt(r.parseRows(e),t,n)},Et=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(t){return e.store.set(t.type,t)}),this.store}},{key:"register",value:function value(e){return e instanceof lt?(this.store.set(e.type,e),this):null}},{key:"unregister",value:function value(e){return this.store.delete(e.type),this}},{key:"get",value:function value(e){return this.store.has(e)?this.store.get(e):null}}]),e}(),xt=function(){var e=null;return e||new It}(),Ut=function Ut(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function Lt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Vt(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3];t===L.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,Vt(i))):e._derivation.push({op:t,meta:r,criteria:i})})(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function Jt(e,t){var n;(n=t._ancestorDerivation).push.apply(n,Vt(e._ancestorDerivation).concat(Vt(e._derivation)))}(e,t)},zt=(Lt(Ct={},l.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),Lt(Ct,l.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),Lt(Ct,l.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),Ct),Kt=function Kt(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split("-")[0]+"-"+t}else e.push(""+t)},Wt=function Wt(e,t,n){var r=[],i=[],a=Ut(zt[n].calcDiff,2),o=a[0],u=a[1];return N(e,function(e){var n=t(e);n&&o&&Kt(r,e,-1),!n&&u&&Kt(i,e,-1)}),{rowDiffset:r.join(","),rejectRowDiffset:i.join(",")}},qt=function qt(e,t,n,r,i){var a={},o=function o(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e._partialFieldspace._cachedValueObjects;return i(c,function(e){return t(f[e],e,o,a)},u)},Qt=function Qt(e,t,n,r){var i=e[n];return i===U?r:t[i].internalValue},en=function en(e,t){return(t[0]instanceof Array?t:[t]).some(function(t){return e>=t[0]&&e<=t[1]})},tn=(Lt(Mt={},c.CONTINUOUS,en),Lt(Mt,u.TEMPORAL,en),Mt),rn=function rn(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=[],i=n.operation||"and",a=n.filterByDim,o=void 0===a||a,u=n.filterByMeasure,c=void 0!==u&&u,l=n.clone,p=void 0===l||l?function Zt(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t}(e):e,d=p.getFieldsConfig();return r=t.length?t.map(function(e){return function(e){var t=e.criteria,n=void 0===t?{}:t,r=n.identifiers,i=void 0===r?[[],[]]:r,a=n.range,u=Ut(i,2),l=u[0],s=void 0===l?[]:l,p=u[1],h=void 0===p?[]:p,v=s.reduce(function(e,t,n){return e[t]=n,e},{}),y=(s=s.filter(function(e){return e in d&&d[e].def.type===f.DIMENSION||e===U})).length,m={};if(y)for(var b=function b(e,t){var n=i[e],r=""+s.map(function(e){var t=v[e];return n[t]});m[r]=1},g=1,_=i.length;g<_;g++)b(g);var w=Object.keys(a||{}).filter(function(e){return e in d}),O=h.length||w.length;return c||(w=w.filter(function(e){return d[e].def.type!==f.MEASURE})),o||(w=w.filter(function(e){return d[e].def.type!==f.DIMENSION})),O?function(e,t){var n=!0;return o&&(n=!y||m[function $t(e,t,n,r){for(var i=n(e,t,0,r),a=1,o=e.length;a1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}i=(s=[]).concat.apply(s,[].concat(Vt(d.map(c)),[{criteria:e,groupedModel:null!==e&&e.fields.some(function(e){return e.type===f.MEASURE})?dn(n.propagationSource):null}])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(h,Vt(r.excludeModels||[]))})}var y=t.model,m=Object.assign({sourceIdentifiers:e,propagationSourceId:u},r);l.forEach(function(e){var t=e.criteria,n=rn(y,t,{filterByMeasure:!!t.find(function(e){return e.groupedModel===y})}),r=e.path;if(r){var i=function(e,t){for(var n=0,r=t.length;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.excludeModels||[],o=i.criteria;(!a.length||-1===a.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=o.filter(function(e){return e.groupedModel===t}),u=pn(n,t);a.length&&(u=rn(u,a,{filterByDim:!1,filterByMeasure:!0,clone:!1})),e(t,u,r,i)})}(y,n,m,{excludeModels:e.excludeModels,criteria:t})})},gn=function gn(e,t,n){var r=e.reduce(function(e,r){return"RegExp"===r.constructor.name?e.push.apply(e,Vt(t.filter(function(e){return-1!==e.search(r)}))):r in n&&e.push(r),e},[]);return Array.from(new Set(r)).map(function(e){return e.trim()})},_n=function _n(e,t){return e.numberFormat?e.numberFormat()(t):t},wn=function(){function e(e,t){for(var n=0;n1?(i=e.clone(r.saveChild),an(i,u[c[1]],e,n,t),[o,i]):o}(this,e,t,{saveChild:t.saveChild})}},{key:"isEmpty",value:function value(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:"clone",value:function value(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=gn(e,i,r);return a===l.ALL?[on(this,o,{mode:l.NORMAL,saveChild:t.saveChild},i),on(this,o,{mode:l.INVERSE,saveChild:t.saveChild},i)]:on(this,o,t,i)}},{key:"getFieldsConfig",value:function value(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function value(){return this._fieldConfig=this._fieldspace.fields.reduce(function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e},{}),this}},{key:"dispose",value:function value(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(e){e._parent=null}),this._children=[]}},{key:"removeChild",value:function value(e){var t=this._children.findIndex(function(t){return t===e});-1===t||this._children.splice(t,1)}},{key:"setParent",value:function value(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}},{key:"getAncestorDerivations",value:function value(){return this._ancestorDerivation}}]),e}(),En=function En(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},jn=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),a=function Ae(e,t,n,r){var i=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=je(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),i=Ee.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var a=Ee.resolve(t[e]);a?n[e]=a:(n[e]=i,t[e]=ge)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],p=[],d={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=je(e,2),n=t[0],r=t[1];if(-1!==i.indexOf(n)||a[n])switch(p.push(O({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var y=0;N(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===d[t]?(d[t]=y,h.push({}),l.forEach(function(t){h[y][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[y][t]=[u[t].partialField.data[e]]}),y+=1):s.forEach(function(n){h[d[t]][n].push(u[n].partialField.data[e])})});var m={},b=function b(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n],b,m)})}),r?(r.__calculateFieldspace(),v=r):v=new xn(h,p,{name:c}),v}.apply(void 0,[this,e,t]);return Gt(this,a,L.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:Ee.defaultReducer()},t),n.saveChild?a.setParent(this):a.setParent(null),a}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e}),i=[n.schema.map(function(e){return e.name})].concat(n.data),a=new this.constructor(i,n.schema,{dataFormat:"DSVArr"});return Gt(this,a,L.SORT,t,e),t.saveChild?a.setParent(this):a.setParent(null),a}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),i=r[0].length,a=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(a=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach(function(t,n){t[e.name()]=new F(i[n],a[n],e)});return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=cn(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var i=this.getFieldsConfig(),a=t.slice(0,t.length-1),o=t[t.length-1];if(i[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=a.map(function(e){var t=i[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},p=function p(){return r.detachedRoot()},d=[];N(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});d[e]=o.apply(void 0,An(t).concat([e,p,s]))});var h=ut([d],[e],[e.name]),v=En(h,1)[0];return c.addField(v),Gt(this,c,L.CAL_VAR,{config:e,fields:a},o),c}},{key:"propagate",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function hn(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,l={groupByModel:dn(this),model:u};return n&&function bn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),yn(e,l,{propagationNameSpace:c,sourceId:a,propagationSource:this},Object.assign({payload:o},t)),i&&function mn(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i],o=a.config,u=n.config.sourceId,c=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(o,n.config);if(o.sourceId!==u&&c){var f=o.criteria;yn(f,{model:t,groupByModel:dn(a.model)},{propagationNameSpace:e,propagateToSource:!1,sourceId:u,propagationSource:a.model},o)}}}(c,u,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var i=function(e,t,n){var r=n.buckets,i=n.binsCount,a=n.binSize,o=n.start,u=n.end,f=function M(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(e.domain(),2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var p=[],d=0;d=(a=e[i=n+Math.floor((r-n)/2)]).start&&t=a.end?n=i+1:t2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],i=r.saveChild,a=e.getFieldspace().fieldsObj(),o=qt(e.clone(i),n,r,e,function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},i=this.getFieldsConfig(),a=Object.keys(i),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach(function(e,n){o[n]=gn([].concat(An(e),An(t)),a,i)}),function un(e,t,n,r){return t.map(function(t){return on(e,t,n,r)})}(this,o,n,a)}}],[{key:"configureInvalidAwareTypes",value:function value(e){return C.invalidAwareVals(e)}},{key:"Reducers",get:function get(){return Ee}},{key:"Converters",get:function get(){return xt}},{key:"FieldTypes",get:function get(){return ot}}]),t}(),kn=be.sum,Dn=be.avg,Tn=be.min,Fn=be.max,Nn=be.first,Rn=be.last,Pn=be.count,Cn=be.std,Mn={compose:function compose(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,i=void 0,a=[];return t.forEach(function(e){r=e(r),a.push.apply(a,function Y(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var muze_utils_src_namespaceObject={};__webpack_require__.r(muze_utils_src_namespaceObject),__webpack_require__.d(muze_utils_src_namespaceObject,"InvalidAwareTypes",function(){return src_InvalidAwareTypes}),__webpack_require__.d(muze_utils_src_namespaceObject,"DataModel",function(){return datamodel_default.a}),__webpack_require__.d(muze_utils_src_namespaceObject,"ReservedFields",function(){return reserved_fields}),__webpack_require__.d(muze_utils_src_namespaceObject,"CommonProps",function(){return common_props}),__webpack_require__.d(muze_utils_src_namespaceObject,"COORD_TYPES",function(){return COORD_TYPES}),__webpack_require__.d(muze_utils_src_namespaceObject,"STATE_NAMESPACES",function(){return namespace_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"scales",function(){return scales_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"colorSchemes",function(){return color_schemes_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"getNearestValue",function(){return getNearestValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"getValueParser",function(){return getValueParser}),__webpack_require__.d(muze_utils_src_namespaceObject,"transformColor",function(){return common_utils_transformColor}),__webpack_require__.d(muze_utils_src_namespaceObject,"transformColors",function(){return common_utils_transformColors}),__webpack_require__.d(muze_utils_src_namespaceObject,"detectColor",function(){return detectColor}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslToRgb",function(){return hslToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"rgbToHsv",function(){return rgbToHsv}),__webpack_require__.d(muze_utils_src_namespaceObject,"hexToHsv",function(){return hexToHsv}),__webpack_require__.d(muze_utils_src_namespaceObject,"hsvToRgb",function(){return hsvToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslaToRgb",function(){return hslaToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"escapeHTML",function(){return escapeHTML}),__webpack_require__.d(muze_utils_src_namespaceObject,"angleToRadian",function(){return angleToRadian}),__webpack_require__.d(muze_utils_src_namespaceObject,"generateGetterSetters",function(){return generateGetterSetters}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArraySum",function(){return getArraySum}),__webpack_require__.d(muze_utils_src_namespaceObject,"ERROR_MSG",function(){return ERROR_MSG}),__webpack_require__.d(muze_utils_src_namespaceObject,"interpolator",function(){return common_utils_interpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"colorInterpolator",function(){return common_utils_colorInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"numberInterpolator",function(){return common_utils_numberInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"piecewiseInterpolator",function(){return common_utils_piecewiseInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"reqAnimFrame",function(){return reqAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"cancelAnimFrame",function(){return cancelAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"nextAnimFrame",function(){return nextAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMax",function(){return getMax}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMin",function(){return getMin}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDomainFromData",function(){return getDomainFromData}),__webpack_require__.d(muze_utils_src_namespaceObject,"getUniqueId",function(){return getUniqueId}),__webpack_require__.d(muze_utils_src_namespaceObject,"mergeRecursive",function(){return mergeRecursive}),__webpack_require__.d(muze_utils_src_namespaceObject,"unionDomain",function(){return unionDomain}),__webpack_require__.d(muze_utils_src_namespaceObject,"replaceCSSPrefix",function(){return replaceCSSPrefix}),__webpack_require__.d(muze_utils_src_namespaceObject,"symbolFns",function(){return symbolFns}),__webpack_require__.d(muze_utils_src_namespaceObject,"defaultValue",function(){return defaultValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"easeFns",function(){return easeFns}),__webpack_require__.d(muze_utils_src_namespaceObject,"clone",function(){return clone}),__webpack_require__.d(muze_utils_src_namespaceObject,"interpolateArray",function(){return interpolateArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMinPoint",function(){return getMinPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMaxPoint",function(){return getMaxPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"getClosestIndexOf",function(){return common_utils_getClosestIndexOf}),__webpack_require__.d(muze_utils_src_namespaceObject,"registerListeners",function(){return common_utils_registerListeners}),__webpack_require__.d(muze_utils_src_namespaceObject,"Voronoi",function(){return common_utils_Voronoi}),__webpack_require__.d(muze_utils_src_namespaceObject,"checkExistence",function(){return checkExistence}),__webpack_require__.d(muze_utils_src_namespaceObject,"sanitizeIP",function(){return sanitizeIP}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMinDiff",function(){return getMinDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"capitalizeFirst",function(){return capitalizeFirst}),__webpack_require__.d(muze_utils_src_namespaceObject,"getWindow",function(){return getWindow}),__webpack_require__.d(muze_utils_src_namespaceObject,"getQualifiedClassName",function(){return getQualifiedClassName}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDependencyOrder",function(){return getDependencyOrder}),__webpack_require__.d(muze_utils_src_namespaceObject,"objectIterator",function(){return objectIterator}),__webpack_require__.d(muze_utils_src_namespaceObject,"intSanitizer",function(){return intSanitizer}),__webpack_require__.d(muze_utils_src_namespaceObject,"enableChainedTransaction",function(){return enableChainedTransaction}),__webpack_require__.d(muze_utils_src_namespaceObject,"isHTMLElem",function(){return isHTMLElem}),__webpack_require__.d(muze_utils_src_namespaceObject,"isEqual",function(){return common_utils_isEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"isSimpleObject",function(){return isSimpleObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"nextFrame",function(){return nextFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"getObjProp",function(){return getObjProp}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDataModelFromIdentifiers",function(){return common_utils_getDataModelFromIdentifiers}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDataModelFromRange",function(){return getDataModelFromRange}),__webpack_require__.d(muze_utils_src_namespaceObject,"transposeArray",function(){return transposeArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"toArray",function(){return toArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"extendsClass",function(){return extendsClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"concatModels",function(){return common_utils_concatModels}),__webpack_require__.d(muze_utils_src_namespaceObject,"assembleModelFromIdentifiers",function(){return assembleModelFromIdentifiers}),__webpack_require__.d(muze_utils_src_namespaceObject,"isValidValue",function(){return isValidValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"nestCollection",function(){return common_utils_nestCollection}),__webpack_require__.d(muze_utils_src_namespaceObject,"stack",function(){return common_utils_stack}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSymbol",function(){return common_utils_getSymbol}),__webpack_require__.d(muze_utils_src_namespaceObject,"Scales",function(){return Scales}),__webpack_require__.d(muze_utils_src_namespaceObject,"Symbols",function(){return Symbols}),__webpack_require__.d(muze_utils_src_namespaceObject,"pathInterpolators",function(){return pathInterpolators}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslInterpolator",function(){return common_utils_hslInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSmallestDiff",function(){return getSmallestDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"require",function(){return require}),__webpack_require__.d(muze_utils_src_namespaceObject,"formatTemporal",function(){return common_utils_formatTemporal}),__webpack_require__.d(muze_utils_src_namespaceObject,"nearestSortingDetails",function(){return common_utils_nearestSortingDetails}),__webpack_require__.d(muze_utils_src_namespaceObject,"createSelection",function(){return common_utils_createSelection}),__webpack_require__.d(muze_utils_src_namespaceObject,"temporalFields",function(){return common_utils_temporalFields}),__webpack_require__.d(muze_utils_src_namespaceObject,"retrieveNearestGroupByReducers",function(){return common_utils_retrieveNearestGroupByReducers}),__webpack_require__.d(muze_utils_src_namespaceObject,"retrieveFieldDisplayName",function(){return retrieveFieldDisplayName}),__webpack_require__.d(muze_utils_src_namespaceObject,"sanitizeDomainWhenEqual",function(){return sanitizeDomainWhenEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"sortCategoricalField",function(){return sortCategoricalField}),__webpack_require__.d(muze_utils_src_namespaceObject,"intersect",function(){return common_utils_intersect}),__webpack_require__.d(muze_utils_src_namespaceObject,"partition",function(){return partition}),__webpack_require__.d(muze_utils_src_namespaceObject,"mix",function(){return mix}),__webpack_require__.d(muze_utils_src_namespaceObject,"componentRegistry",function(){return common_utils_componentRegistry}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArrayDiff",function(){return getArrayDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"difference",function(){return difference}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArrayIndexMap",function(){return getArrayIndexMap}),__webpack_require__.d(muze_utils_src_namespaceObject,"arraysEqual",function(){return arraysEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"getReadableTicks",function(){return common_utils_getReadableTicks}),__webpack_require__.d(muze_utils_src_namespaceObject,"unique",function(){return unique}),__webpack_require__.d(muze_utils_src_namespaceObject,"dmMultipleSelection",function(){return common_utils_dmMultipleSelection}),__webpack_require__.d(muze_utils_src_namespaceObject,"pointWithinCircle",function(){return pointWithinCircle}),__webpack_require__.d(muze_utils_src_namespaceObject,"selectElement",function(){return renderer_utils_selectElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"makeElement",function(){return makeElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"applyStyle",function(){return renderer_utils_applyStyle}),__webpack_require__.d(muze_utils_src_namespaceObject,"addClass",function(){return renderer_utils_addClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"removeClass",function(){return renderer_utils_removeClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"appendElement",function(){return appendElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"setAttrs",function(){return renderer_utils_setAttrs}),__webpack_require__.d(muze_utils_src_namespaceObject,"setStyles",function(){return renderer_utils_setStyles}),__webpack_require__.d(muze_utils_src_namespaceObject,"createElement",function(){return renderer_utils_createElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"createElements",function(){return renderer_utils_createElements}),__webpack_require__.d(muze_utils_src_namespaceObject,"clipElement",function(){return renderer_utils_clipElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"getElementsByClassName",function(){return renderer_utils_getElementsByClassName}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMousePos",function(){return getMousePos}),__webpack_require__.d(muze_utils_src_namespaceObject,"getEvent",function(){return renderer_utils_getEvent}),__webpack_require__.d(muze_utils_src_namespaceObject,"getD3Drag",function(){return renderer_utils_getD3Drag}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSmartComputedStyle",function(){return renderer_utils_getSmartComputedStyle}),__webpack_require__.d(muze_utils_src_namespaceObject,"getClientPoint",function(){return renderer_utils_getClientPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"hasTouch",function(){return hasTouch}),__webpack_require__.d(muze_utils_src_namespaceObject,"Store",function(){return store_Store}),__webpack_require__.d(muze_utils_src_namespaceObject,"transactor",function(){return store_transactor}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMillisecond",function(){return src_millisecond}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeSecond",function(){return src_second}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMinute",function(){return src_minute}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeHour",function(){return src_hour}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeDay",function(){return src_day}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeWeek",function(){return sunday}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMonth",function(){return src_month}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeYear",function(){return src_year}),__webpack_require__.d(muze_utils_src_namespaceObject,"Smartlabel",function(){return SmartlabelManager_default.a}),__webpack_require__.d(muze_utils_src_namespaceObject,"dataSelect",function(){return dataSelect}),__webpack_require__.d(muze_utils_src_namespaceObject,"LifeCycleManager",function(){return lifecycle_manager}),__webpack_require__.d(muze_utils_src_namespaceObject,"DimensionSubtype",function(){return dist_datamodel.DimensionSubtype}),__webpack_require__.d(muze_utils_src_namespaceObject,"FieldType",function(){return dist_datamodel.FieldType}),__webpack_require__.d(muze_utils_src_namespaceObject,"MeasureSubtype",function(){return dist_datamodel.MeasureSubtype}),__webpack_require__.d(muze_utils_src_namespaceObject,"DateTimeFormatter",function(){return dist_datamodel.DateTimeFormatter}),__webpack_require__.d(muze_utils_src_namespaceObject,"DM_DERIVATIVES",function(){return dist_datamodel.DM_DERIVATIVES}),__webpack_require__.d(muze_utils_src_namespaceObject,"GROUP_BY_FUNCTIONS",function(){return dist_datamodel.GROUP_BY_FUNCTIONS}),__webpack_require__.d(muze_utils_src_namespaceObject,"RTree",function(){return RTree});var enums_constants_namespaceObject={};__webpack_require__.r(enums_constants_namespaceObject),__webpack_require__.d(enums_constants_namespaceObject,"CLASSPREFIX",function(){return CLASSPREFIX}),__webpack_require__.d(enums_constants_namespaceObject,"STACK",function(){return STACK}),__webpack_require__.d(enums_constants_namespaceObject,"GROUP",function(){return GROUP}),__webpack_require__.d(enums_constants_namespaceObject,"IDENTITY",function(){return IDENTITY}),__webpack_require__.d(enums_constants_namespaceObject,"ANGLE",function(){return constants_ANGLE}),__webpack_require__.d(enums_constants_namespaceObject,"RADIUS",function(){return constants_RADIUS}),__webpack_require__.d(enums_constants_namespaceObject,"SIZE",function(){return SIZE}),__webpack_require__.d(enums_constants_namespaceObject,"COLOR",function(){return COLOR}),__webpack_require__.d(enums_constants_namespaceObject,"SHAPE",function(){return SHAPE}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT",function(){return TEXT}),__webpack_require__.d(enums_constants_namespaceObject,"OUTER_RADIUS_VALUE",function(){return OUTER_RADIUS_VALUE}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT_ANCHOR_MIDDLE",function(){return TEXT_ANCHOR_MIDDLE}),__webpack_require__.d(enums_constants_namespaceObject,"ENCODING",function(){return ENCODING}),__webpack_require__.d(enums_constants_namespaceObject,"STROKE_DASHARRAY",function(){return STROKE_DASHARRAY}),__webpack_require__.d(enums_constants_namespaceObject,"ASCENDING",function(){return ASCENDING}),__webpack_require__.d(enums_constants_namespaceObject,"AGG_FN_SUM",function(){return AGG_FN_SUM}),__webpack_require__.d(enums_constants_namespaceObject,"AREA_LAYER",function(){return AREA_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"ARC_LAYER",function(){return ARC_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"LINE_LAYER",function(){return LINE_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT_LAYER",function(){return TEXT_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"POINT_LAYER",function(){return POINT_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"BAR_LAYER",function(){return BAR_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"TICK_LAYER",function(){return TICK_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"SIMPLE_LAYER",function(){return SIMPLE_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"BASE_LAYER",function(){return BASE_LAYER});var props_namespaceObject={};__webpack_require__.r(props_namespaceObject),__webpack_require__.d(props_namespaceObject,"DATA",function(){return DATA}),__webpack_require__.d(props_namespaceObject,"CONFIG",function(){return CONFIG}),__webpack_require__.d(props_namespaceObject,"MEASUREMENT",function(){return MEASUREMENT}),__webpack_require__.d(props_namespaceObject,"DOMAIN",function(){return DOMAIN}),__webpack_require__.d(props_namespaceObject,"MOUNT",function(){return MOUNT});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var visual_group_src_enums_constants_namespaceObject={};__webpack_require__.r(visual_group_src_enums_constants_namespaceObject),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"X",function(){return X}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"Y",function(){return Y}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"WIDTH",function(){return WIDTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HEIGHT",function(){return HEIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASUREMENT",function(){return constants_MEASUREMENT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CONFIG",function(){return constants_CONFIG}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MIN_UNIT_WIDTH",function(){return MIN_UNIT_WIDTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MIN_UNIT_HEIGHT",function(){return MIN_UNIT_HEIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DIMENSIONS",function(){return DIMENSIONS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASURES",function(){return MEASURES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DIMENSION",function(){return DIMENSION}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASURE",function(){return MEASURE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"PIVOT",function(){return PIVOT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FORMAT",function(){return FORMAT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MOUNT",function(){return constants_MOUNT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HAS_DATA_UPDATED",function(){return HAS_DATA_UPDATED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ROWS",function(){return ROWS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLUMNS",function(){return COLUMNS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DATA",function(){return constants_DATA}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COL",function(){return COL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ROW",function(){return ROW}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLUMN",function(){return COLUMN}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLOR",function(){return enums_constants_COLOR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SHAPE",function(){return enums_constants_SHAPE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SIZE",function(){return enums_constants_SIZE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DETAIL",function(){return DETAIL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LAYERS",function(){return LAYERS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TRANSFORM",function(){return TRANSFORM}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ORDINAL",function(){return enums_constants_ORDINAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LINEAR",function(){return enums_constants_LINEAR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LEFT",function(){return constants_LEFT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RIGHT",function(){return constants_RIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TOP",function(){return enums_constants_TOP}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BOTTOM",function(){return enums_constants_BOTTOM}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RETINAL",function(){return RETINAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CELL",function(){return CELL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"X_AXES",function(){return X_AXES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"Y_AXES",function(){return Y_AXES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ENTRY_CELLS",function(){return ENTRY_CELLS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"INITIALIZED",function(){return INITIALIZED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"EXIT_CELLS",function(){return EXIT_CELLS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"AXIS",function(){return AXIS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"UNIT",function(){return UNIT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"UPDATED",function(){return UPDATED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BEFORE_UPDATE",function(){return BEFORE_UPDATE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"VALUE_MATRIX",function(){return VALUE_MATRIX}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FACET_HEADERS",function(){return FACET_HEADERS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RADIUS",function(){return enums_constants_RADIUS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ANGLE",function(){return enums_constants_ANGLE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ANGLE0",function(){return ANGLE0}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ARC",function(){return ARC}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CATEGORICAL",function(){return constants_CATEGORICAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TEMPORAL",function(){return constants_TEMPORAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BAR",function(){return BAR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LINE",function(){return LINE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"POINT",function(){return POINT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"PRIMARY",function(){return PRIMARY}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SECONDARY",function(){return SECONDARY}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BOTH",function(){return BOTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"INTERACTION",function(){return INTERACTION}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"GRID_LINES",function(){return GRID_LINES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"GRID_BANDS",function(){return GRID_BANDS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HEADER",function(){return HEADER}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FACET",function(){return FACET}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DEFAULT",function(){return DEFAULT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ASCENDING",function(){return constants_ASCENDING}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DESCENDING",function(){return DESCENDING}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DARK",function(){return DARK}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"NONE",function(){return NONE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"NORMAL",function(){return NORMAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DARKER",function(){return DARKER});var helpers_namespaceObject={};__webpack_require__.r(helpers_namespaceObject),__webpack_require__.d(helpers_namespaceObject,"transformColor",function(){return helpers_transformColor}),__webpack_require__.d(helpers_namespaceObject,"applyInteractionStyle",function(){return helpers_applyInteractionStyle}),__webpack_require__.d(helpers_namespaceObject,"retrieveEncodingInf",function(){return helpers_retrieveEncodingInf}),__webpack_require__.d(helpers_namespaceObject,"encodingFieldInfRetriever",function(){return encodingFieldInfRetriever}),__webpack_require__.d(helpers_namespaceObject,"setNullsInStack",function(){return setNullsInStack}),__webpack_require__.d(helpers_namespaceObject,"setNulls",function(){return helpers_setNulls}),__webpack_require__.d(helpers_namespaceObject,"transformData",function(){return helpers_transformData}),__webpack_require__.d(helpers_namespaceObject,"getIndividualClassName",function(){return getIndividualClassName}),__webpack_require__.d(helpers_namespaceObject,"dataNormalizers",function(){return dataNormalizers}),__webpack_require__.d(helpers_namespaceObject,"getNormalizedData",function(){return helpers_getNormalizedData}),__webpack_require__.d(helpers_namespaceObject,"domainCalculator",function(){return domainCalculator}),__webpack_require__.d(helpers_namespaceObject,"attachDataToVoronoi",function(){return helpers_attachDataToVoronoi}),__webpack_require__.d(helpers_namespaceObject,"updateStyle",function(){return helpers_updateStyle}),__webpack_require__.d(helpers_namespaceObject,"animateGroup",function(){return helpers_animateGroup}),__webpack_require__.d(helpers_namespaceObject,"positionPoints",function(){return positionPoints}),__webpack_require__.d(helpers_namespaceObject,"getGroupSpan",function(){return getGroupSpan}),__webpack_require__.d(helpers_namespaceObject,"getPlotMeasurement",function(){return helpers_getPlotMeasurement}),__webpack_require__.d(helpers_namespaceObject,"renderLayer",function(){return helpers_renderLayer}),__webpack_require__.d(helpers_namespaceObject,"resolveInvalidTransformType",function(){return helpers_resolveInvalidTransformType}),__webpack_require__.d(helpers_namespaceObject,"getValidTransform",function(){return getValidTransform}),__webpack_require__.d(helpers_namespaceObject,"getValidTransformForAggFn",function(){return helpers_getValidTransformForAggFn}),__webpack_require__.d(helpers_namespaceObject,"getMarkId",function(){return helpers_getMarkId}),__webpack_require__.d(helpers_namespaceObject,"resolveEncodingValues",function(){return helpers_resolveEncodingValues}),__webpack_require__.d(helpers_namespaceObject,"getColorMetaInf",function(){return getColorMetaInf}),__webpack_require__.d(helpers_namespaceObject,"toCartesianCoordinates",function(){return toCartesianCoordinates}),__webpack_require__.d(helpers_namespaceObject,"sortData",function(){return sortData}),__webpack_require__.d(helpers_namespaceObject,"getBoundBoxes",function(){return helpers_getBoundBoxes}),__webpack_require__.d(helpers_namespaceObject,"getDataFromEvent",function(){return helpers_getDataFromEvent});var point_helper_namespaceObject={};__webpack_require__.r(point_helper_namespaceObject),__webpack_require__.d(point_helper_namespaceObject,"prepareDrawingInf",function(){return helper_prepareDrawingInf}),__webpack_require__.d(point_helper_namespaceObject,"pointTranslators",function(){return helper_pointTranslators}),__webpack_require__.d(point_helper_namespaceObject,"getStrokeWidthByPosition",function(){return getStrokeWidthByPosition});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var src_enums_namespaceObject={};__webpack_require__.r(src_enums_namespaceObject),__webpack_require__.d(src_enums_namespaceObject,"PROPS",function(){return props_namespaceObject}),__webpack_require__.d(src_enums_namespaceObject,"LAYER_TYPES",function(){return layer_types_namespaceObject}),__webpack_require__.d(src_enums_namespaceObject,"CONSTANTS",function(){return enums_constants_namespaceObject});var visual_unit_src_helper_namespaceObject={};__webpack_require__.r(visual_unit_src_helper_namespaceObject),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getDimensionMeasureMap",function(){return helper_getDimensionMeasureMap}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"transformDataModels",function(){return transformDataModels}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayerFromDef",function(){return helper_getLayerFromDef}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"resolveEncodingTransform",function(){return resolveEncodingTransform}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"sanitizeLayerDef",function(){return helper_sanitizeLayerDef}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"attachDataToLayers",function(){return attachDataToLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"attachAxisToLayers",function(){return helper_attachAxisToLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayerAxisIndex",function(){return helper_getLayerAxisIndex}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"unionDomainFromLayers",function(){return helper_unionDomainFromLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"renderLayers",function(){return helper_renderLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getNearestDimensionalValue",function(){return helper_getNearestDimensionalValue}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayersBy",function(){return getLayersBy}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"removeLayersBy",function(){return removeLayersBy}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createSideEffectGroup",function(){return helper_createSideEffectGroup}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createRenderPromise",function(){return createRenderPromise}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getRadiusRange",function(){return getRadiusRange}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"setAxisRange",function(){return helper_setAxisRange}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"isXandYMeasures",function(){return helper_isXandYMeasures}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getValuesMap",function(){return getValuesMap}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getSelectionRejectionModel",function(){return getSelectionRejectionModel}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createRTree",function(){return helper_createRTree});var reactive_props_namespaceObject={};__webpack_require__.r(reactive_props_namespaceObject),__webpack_require__.d(reactive_props_namespaceObject,"CONFIG",function(){return reactive_props_CONFIG}),__webpack_require__.d(reactive_props_namespaceObject,"DATA",function(){return reactive_props_DATA}),__webpack_require__.d(reactive_props_namespaceObject,"AXES",function(){return AXES}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERDEFS",function(){return LAYERDEFS}),__webpack_require__.d(reactive_props_namespaceObject,"WIDTH",function(){return reactive_props_WIDTH}),__webpack_require__.d(reactive_props_namespaceObject,"HEIGHT",function(){return reactive_props_HEIGHT}),__webpack_require__.d(reactive_props_namespaceObject,"MOUNT",function(){return reactive_props_MOUNT}),__webpack_require__.d(reactive_props_namespaceObject,"TRANSFORM",function(){return reactive_props_TRANSFORM}),__webpack_require__.d(reactive_props_namespaceObject,"TRANSFORMEDDATA",function(){return TRANSFORMEDDATA}),__webpack_require__.d(reactive_props_namespaceObject,"DATADOMAIN",function(){return DATADOMAIN}),__webpack_require__.d(reactive_props_namespaceObject,"FIELDS",function(){return FIELDS}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERAXISINDEX",function(){return LAYERAXISINDEX}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERS",function(){return reactive_props_LAYERS}),__webpack_require__.d(reactive_props_namespaceObject,"DOMAIN",function(){return reactive_props_DOMAIN});var visual_unit_src_enums_constants_namespaceObject={};__webpack_require__.r(visual_unit_src_enums_constants_namespaceObject),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CLASSPREFIX",function(){return enums_constants_CLASSPREFIX}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"IDFIELD",function(){return IDFIELD}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_LINE_PARENT_GROUP_CLASS",function(){return GRID_LINE_PARENT_GROUP_CLASS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_BAND_PARENT_GROUP_CLASS",function(){return GRID_BAND_PARENT_GROUP_CLASS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_PARENT_GROUP",function(){return GRID_PARENT_GROUP}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"BAND",function(){return enums_constants_BAND}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"TICK",function(){return TICK}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_BAND",function(){return GRID_BAND}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_LINE",function(){return GRID_LINE}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CONSOLIDATED",function(){return CONSOLIDATED}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"FRAGMENTED",function(){return FRAGMENTED}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"FACET_BY_FIELDS",function(){return FACET_BY_FIELDS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"RETINAL_FIELDS",function(){return RETINAL_FIELDS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"PARENT_ALIAS",function(){return PARENT_ALIAS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"LAYERS",function(){return constants_LAYERS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CACHED_DATA",function(){return CACHED_DATA}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"STORE",function(){return STORE});var visual_unit_src_enums_namespaceObject={};__webpack_require__.r(visual_unit_src_enums_namespaceObject),__webpack_require__.d(visual_unit_src_enums_namespaceObject,"REACTIVE_PROPS",function(){return reactive_props_namespaceObject}),__webpack_require__.d(visual_unit_src_enums_namespaceObject,"CONSTANTS",function(){return visual_unit_src_enums_constants_namespaceObject});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return behaviours_TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"ANCHORS",function(){return side_effects_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"BRUSH_ANCHORS",function(){return side_effects_BRUSH_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"PERSISTENT_ANCHORS",function(){return side_effects_PERSISTENT_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"FILTER",function(){return side_effects_FILTER}),__webpack_require__.d(side_effects_namespaceObject,"HIGHLIGHTER",function(){return side_effects_HIGHLIGHTER}),__webpack_require__.d(side_effects_namespaceObject,"CROSSLINE",function(){return CROSSLINE}),__webpack_require__.d(side_effects_namespaceObject,"TOOLTIP",function(){return side_effects_TOOLTIP}),__webpack_require__.d(side_effects_namespaceObject,"FRAGMENTED_TOOLTIP",function(){return FRAGMENTED_TOOLTIP}),__webpack_require__.d(side_effects_namespaceObject,"AXIS_LABEL_HIGHLIGHTER",function(){return AXIS_LABEL_HIGHLIGHTER});var src_side_effects_namespaceObject={};__webpack_require__.r(src_side_effects_namespaceObject),__webpack_require__.d(src_side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(src_side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"FragmentedTooltip",function(){return fragmented_tooltip_FragmentedTooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(src_side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(src_side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"AxisLabelHighLighter",function(){return axis_labels_highlighter_AxisLabelHighLighter});var group_utils_namespaceObject={};__webpack_require__.r(group_utils_namespaceObject),__webpack_require__.d(group_utils_namespaceObject,"initStore",function(){return group_utils_initStore}),__webpack_require__.d(group_utils_namespaceObject,"isDistributionEqual",function(){return group_utils_isDistributionEqual}),__webpack_require__.d(group_utils_namespaceObject,"initializeCacheMaps",function(){return initializeCacheMaps}),__webpack_require__.d(group_utils_namespaceObject,"getAxisKey",function(){return getAxisKey}),__webpack_require__.d(group_utils_namespaceObject,"getCellKey",function(){return getCellKey}),__webpack_require__.d(group_utils_namespaceObject,"extractUnitConfig",function(){return group_utils_extractUnitConfig}),__webpack_require__.d(group_utils_namespaceObject,"hasOneField",function(){return hasOneField}),__webpack_require__.d(group_utils_namespaceObject,"getHeaderText",function(){return getHeaderText}),__webpack_require__.d(group_utils_namespaceObject,"headerCreator",function(){return group_utils_headerCreator}),__webpack_require__.d(group_utils_namespaceObject,"findInGroup",function(){return group_utils_findInGroup}),__webpack_require__.d(group_utils_namespaceObject,"getAxisType",function(){return group_utils_getAxisType}),__webpack_require__.d(group_utils_namespaceObject,"retriveDomainFromData",function(){return retriveDomainFromData}),__webpack_require__.d(group_utils_namespaceObject,"mutateAxesFromMap",function(){return mutateAxesFromMap}),__webpack_require__.d(group_utils_namespaceObject,"getEncoder",function(){return group_utils_getEncoder}),__webpack_require__.d(group_utils_namespaceObject,"getHeaderAxisFrom",function(){return group_utils_getHeaderAxisFrom}),__webpack_require__.d(group_utils_namespaceObject,"setFacetsAndProjections",function(){return setFacetsAndProjections}),__webpack_require__.d(group_utils_namespaceObject,"getBorders",function(){return getBorders}),__webpack_require__.d(group_utils_namespaceObject,"getFieldsFromSuppliedLayers",function(){return getFieldsFromSuppliedLayers}),__webpack_require__.d(group_utils_namespaceObject,"extractFields",function(){return group_utils_extractFields}),__webpack_require__.d(group_utils_namespaceObject,"sortFacetFields",function(){return group_utils_sortFacetFields}),__webpack_require__.d(group_utils_namespaceObject,"removeExitCells",function(){return group_utils_removeExitCells});var encoder_helper_namespaceObject={};__webpack_require__.r(encoder_helper_namespaceObject),__webpack_require__.d(encoder_helper_namespaceObject,"getAdjustedDomain",function(){return getAdjustedDomain}),__webpack_require__.d(encoder_helper_namespaceObject,"generateAxisFromMap",function(){return encoder_helper_generateAxisFromMap}),__webpack_require__.d(encoder_helper_namespaceObject,"sanitizeIndividualLayerConfig",function(){return encoder_helper_sanitizeIndividualLayerConfig}),__webpack_require__.d(encoder_helper_namespaceObject,"mutateAxesFromMap",function(){return encoder_helper_mutateAxesFromMap}),__webpack_require__.d(encoder_helper_namespaceObject,"getDefaultMark",function(){return encoder_helper_getDefaultMark}),__webpack_require__.d(encoder_helper_namespaceObject,"createRetinalAxis",function(){return encoder_helper_createRetinalAxis}),__webpack_require__.d(encoder_helper_namespaceObject,"getIndex",function(){return getIndex}),__webpack_require__.d(encoder_helper_namespaceObject,"getLayerConfFromFields",function(){return getLayerConfFromFields}),__webpack_require__.d(encoder_helper_namespaceObject,"resolveAxisConfig",function(){return encoder_helper_resolveAxisConfig}),__webpack_require__.d(encoder_helper_namespaceObject,"getSortingConfig",function(){return getSortingConfig});var encoder_namespaceObject={};__webpack_require__.r(encoder_namespaceObject),__webpack_require__.d(encoder_namespaceObject,"VisualEncoder",function(){return visual_encoder_VisualEncoder}),__webpack_require__.d(encoder_namespaceObject,"CartesianEncoder",function(){return cartesian_encoder_CartesianEncoder}),__webpack_require__.d(encoder_namespaceObject,"PolarEncoder",function(){return polar_encoder_PolarEncoder}),__webpack_require__.d(encoder_namespaceObject,"RetinalEncoder",function(){return retinal_encoder_RetinalEncoder});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendMarker",function(){return legend_marker_LegendMarker});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var src_number=function(a,b){return a=+a,b=+b,function(t){return a*(1-t)+b*t}},define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex=/^#([0-9a-f]{3,8})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_formatHex(){return this.rgb().formatHex()}function color_formatRgb(){return this.rgb().formatRgb()}function color_color(format){var m,l;return format=(format+"").trim().toLowerCase(),(m=reHex.exec(format))?(l=m[1].length,m=parseInt(m[1],16),6===l?rgbn(m):3===l?new Rgb(m>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):8===l?new Rgb(m>>24&255,m>>16&255,m>>8&255,(255&m)/255):4===l?new Rgb(m>>12&15|m>>8&240,m>>8&15|m>>4&240,m>>4&15|240&m,((15&m)<<4|15&m)/255):null):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function rgb_formatHex(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)}function rgb_formatRgb(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===a?")":", "+a+")")}function hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}function hsl(h,s,l,opacity){return 1===arguments.length?hslConvert(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Color,color_color,{copy:function copy(channels){return Object.assign(new this.constructor,this,channels)},displayable:function displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHsl:function color_formatHsl(){return hslConvert(this).formatHsl()},formatRgb:color_formatRgb,toString:color_formatRgb}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rgb_formatHex,formatHex:rgb_formatHex,formatRgb:rgb_formatRgb,toString:rgb_formatRgb})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function formatHsl(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===a?")":", "+a+")")}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;return new FormatSpecifier({fill:match[1],align:match[2],sign:match[3],symbol:match[4],zero:match[5],width:match[6],comma:match[7],precision:match[8]&&match[8].slice(1),trim:match[9],type:match[10]})}function FormatSpecifier(specifier){this.fill=void 0===specifier.fill?" ":specifier.fill+"",this.align=void 0===specifier.align?">":specifier.align+"",this.sign=void 0===specifier.sign?"-":specifier.sign+"",this.symbol=void 0===specifier.symbol?"":specifier.symbol+"",this.zero=!!specifier.zero,this.width=void 0===specifier.width?void 0:+specifier.width,this.comma=!!specifier.comma,this.precision=void 0===specifier.precision?void 0:+specifier.precision,this.trim=!!specifier.trim,this.type=void 0===specifier.type?"":specifier.type+""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},locale_map=Array.prototype.map,prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=void 0===locale.grouping||void 0===locale.thousands?src_identity:function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale_map.call(locale.grouping,Number),locale.thousands+""),currencyPrefix=void 0===locale.currency?"":locale.currency[0]+"",currencySuffix=void 0===locale.currency?"":locale.currency[1]+"",decimal=void 0===locale.decimal?".":locale.decimal+"",numerals=void 0===locale.numerals?src_identity:function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale_map.call(locale.numerals,String)),percent=void 0===locale.percent?"%":locale.percent+"",minus=void 0===locale.minus?"-":locale.minus+"",nan=void 0===locale.nan?"NaN":locale.nan+"";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(void 0===precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currencyPrefix:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currencySuffix:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=isNaN(value)?nan:formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:minus:"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=void 0===precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=0===arguments.length?new Date:new Date(+date)),date}return interval.floor=function(date){return floori(date=new Date(+date)),date},interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var year_year=newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()});year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,month_month=(year_year.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,durationMinute=(month_month.range,6e4),durationWeek=6048e5;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),day_day=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day,hour_hour=(day_day.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,minute_minute=(hour_hour.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,second_second=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()})),src_second=second_second,millisecond_millisecond=(second_second.range,newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start}));millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond;millisecond_millisecond.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcDay=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay,utcYear=(utcDay.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newDate(y,m,d){return{y:y,m:m,d:d,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseQuarter(d,string,i){var n=numberRe.exec(string.slice(i,i+1));return n?(d.q=3*n[0]-3,i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.s=+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d)-1,d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d)-1,d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d)-1,d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d)-1,d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.getHours()>=12)]},q:function formatQuarter(d){return 1+~~(d.getMonth()/3)},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.getUTCHours()>=12)]},q:function formatUTCQuarter(d){return 1+~~(d.getUTCMonth()/3)},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},q:parseQuarter,Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newDate(d.y,0,1))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=localDate(newDate(d.y,0,1))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newDate(d.y,0,1)).getUTCDay():localDate(newDate(d.y,0,1)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):localDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",!1);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier+="",!0);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,src_defaultLocale_locale.utcFormat,src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""},sequential_multi_cubehelix=cubehelixLong(cubehelix_cubehelix(300,.5,0),cubehelix_cubehelix(-240,.5,1)),BuGn=src_ramp(new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(d3_scale_chromatic_src_colors)),BuPu=src_ramp(new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(d3_scale_chromatic_src_colors)),GnBu=src_ramp(new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(d3_scale_chromatic_src_colors)),OrRd=src_ramp(new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(d3_scale_chromatic_src_colors)),PuBuGn=src_ramp(new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(d3_scale_chromatic_src_colors)),PuBu=src_ramp(new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(d3_scale_chromatic_src_colors)),PuRd=src_ramp(new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(d3_scale_chromatic_src_colors)),RdPu=src_ramp(new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(d3_scale_chromatic_src_colors)),YlGnBu=src_ramp(new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(d3_scale_chromatic_src_colors)),YlGn=src_ramp(new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(d3_scale_chromatic_src_colors)),YlOrBr=src_ramp(new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(d3_scale_chromatic_src_colors)),YlOrRd=src_ramp(new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(d3_scale_chromatic_src_colors)),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",swap=function swap(arr,i,j){var tmp=arr[i];arr[i]=arr[j],arr[j]=tmp},defaultCompare=function defaultCompare(a,b){return a>b?-1:a>b?1:0},quick_select=function quickselect(arr,k,left,right,compare){!function quickselectStep(arr,k,left,right,compare){for(;right>left;){if(right-left>600){var n=right-left+1,m=k-left+1,z=Math.log(n),s=.5*Math.exp(2*z/3),sd=.5*Math.sqrt(z*s*(n-s)/n)*(m-n/2<0?-1:1);quickselectStep(arr,k,Math.max(left,Math.floor(k-m*s/n+sd)),Math.min(right,Math.floor(k+(n-m)*s/n+sd)),compare)}var t=arr[k],i=left,j=right;for(swap(arr,left,k),compare(arr[right],t)>0&&swap(arr,left,right);i0;)j--}0===compare(arr[left],t)?swap(arr,left,j):swap(arr,++j,right),j<=k&&(left=j+1),k<=j&&(right=j-1)}}(arr,k,left||0,right||arr.length-1,compare||defaultCompare)};function _defineProperties(target,props){for(var i=0;i=a.minX&&b.maxY>=a.minY},findItem=function findItem(item,items,equalsFn){if(!equalsFn)return items.indexOf(item);for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:9;!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RTree),this._maxEntries=Math.max(4,maxEntries),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}return function _createClass(Constructor,protoProps,staticProps){return protoProps&&_defineProperties(Constructor.prototype,protoProps),staticProps&&_defineProperties(Constructor,staticProps),Constructor}(RTree,[{key:"all",value:function all(){return _all(this.data,[])}},{key:"search",value:function search(bbox){var node=this.data,result=[];if(!intersects(bbox,node))return result;for(var toBBox=this.toBBox,nodesToSearch=[];node;){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=node.children[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var child=_step.value,childBBox=node.leaf?toBBox(child):child;intersects(bbox,childBBox)&&(node.leaf?result.push(child):contains(bbox,childBBox)?_all(child,result):nodesToSearch.push(child))}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}node=nodesToSearch.pop()}return result}},{key:"load",value:function load(data){if(!data||!data.length)return this;if(data.length=0&&insertPath[level].children.length>this._maxEntries;)this.split(insertPath,level),level--;this.adjustParentBoxes(bbox,insertPath,level)}},{key:"split",value:function split(insertPath,level){var node=insertPath[level],M=node.children.length,m=this._minEntries;this.chooseSplitAxis(node,m,M);var splitIndex=this.chooseSplitIndex(node,m,M),newNode=createNode(node.children.splice(splitIndex,node.children.length-splitIndex));newNode.height=node.height,newNode.leaf=node.leaf,calcBBox(node,this.toBBox),calcBBox(newNode,this.toBBox),level?insertPath[level-1].children.push(newNode):this.splitRoot(node,newNode)}},{key:"splitRoot",value:function splitRoot(node,newNode){this.data=createNode([node,newNode]),this.data.height=node.height+1,this.data.leaf=!1,calcBBox(this.data,this.toBBox)}},{key:"chooseSplitIndex",value:function chooseSplitIndex(node,m,M){for(var index,minOverlap=1/0,minArea=1/0,i=m;i<=M-m;i++){var bbox1=distBBox(node,0,i,this.toBBox),bbox2=distBBox(node,i,M,this.toBBox),overlap=intersectionArea(bbox1,bbox2),area=bboxArea(bbox1)+bboxArea(bbox2);overlap=m;_i--){var _child=node.children[_i];r_tree_extend(rightBBox,node.leaf?toBBox(_child):_child),margin+=bboxMargin(rightBBox)}return margin}},{key:"adjustParentBoxes",value:function adjustParentBoxes(bbox,path,level){for(var i=level;i>=0;i--)r_tree_extend(path[i],bbox)}},{key:"condense",value:function condense(path){for(var siblings,i=path.length-1;i>=0;i--)0===path[i].children.length?i>0?(siblings=path[i-1].children).splice(siblings.indexOf(path[i]),1):this.clear():calcBBox(path[i],this.toBBox)}}]),RTree}(),reserved_fields={ROW_ID:"__id__",MEASURE_NAMES:"__measure_names__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES={POLAR:"polar",CARTESIAN:"cartesian"},DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,pi=Math.PI,halfPi=pi/2,tau=2*pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/pi);context.moveTo(r,0),context.arc(0,0,r,0,tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},kr=Math.sin(pi/10)/Math.sin(7*pi/10),kx=Math.sin(tau/10)*kr,ky=-Math.cos(tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},path_pi=Math.PI,path_tau=2*path_pi,tauEpsilon=path_tau-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((path_pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y,ccw=!!ccw;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%path_tau+path_tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=path_pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},none=function(series){for(var n=series.length,o=new Array(n);--n>=0;)o[n]=n;return o},order_ascending=function(series){var sums=series.map(ascending_sum);return none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}function _point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:!function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(ia?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function hsl_hsl(hue){return function(start,end){var h=hue((start=hsl(start)).h,(end=hsl(end)).h),s=nogamma(start.s,end.s),l=nogamma(start.l,end.l),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.h=h(t),start.s=s(t),start.l=l(t),start.opacity=opacity(t),start+""}}}hsl_hsl(color_hue);var hslLong=hsl_hsl(nogamma);function piecewise_piecewise(interpolate,values){for(var i=0,n=values.length-1,v=values[0],I=new Array(n<0?0:n);i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},getExtremePoint=function getExtremePoint(points,compareValue,minOrMax){for(var extremePoint,point,val,len=points.length,minOrMaxVal="max"===minOrMax?-1/0:1/0,i=0;iminOrMaxVal)&&(minOrMaxVal=val,extremePoint=point);return extremePoint},getMinPoint=function getMinPoint(points,compareValue){return getExtremePoint(points,compareValue,"min")},getMaxPoint=function getMaxPoint(points,compareValue){return getExtremePoint(points,compareValue,"max")},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},reqAnimFrame=requestAnimationFrame,cancelAnimFrame=cancelAnimationFrame,capitalizeFirst=function capitalizeFirst(text){return(text=text.toLowerCase()).replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1)})},unique=function unique(arr){var fn=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(d){return d},vals=arr.reduce(function(acc,v){return acc[fn(v)]=v,acc},{});return Object.values(vals)},getMinDiff=function getMinDiff(arr,index){var diff,uniqueVals;if((uniqueVals=unique(void 0!==index?arr.map(function(d){return d[index]}):arr)).length>1){diff=Math.abs(uniqueVals[1]-uniqueVals[0]);for(var i=2,len=uniqueVals.length;i0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0},common_utils_isEqual=function isEqual(type){return function(oldVal,newVal){return"Array"===type?!!oldVal&&arraysEqual(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},enableChainedTransaction=function enableChainedTransaction(transactionModel,transactionEndpoint,transactionItems){return transactionItems.forEach(function(item){return transactionModel.registerImmediateListener(item,function(_ref3){var newVal=_slicedToArray(_ref3,2)[1];return transactionEndpoint[item](newVal)})})},isHTMLElem=function isHTMLElem(elem){return elem instanceof common_utils_HTMLElement},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||dataSelect(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},interpolateArray=function interpolateArray(data,fitCount){var linearInterpolate=function linearInterpolate(before,after,atPoint){return before+(after-before)*atPoint},newData=[],springFactor=(data.length-1)/(fitCount-1);newData[0]=data[0];for(var i=1;i1&&(t-=1),t<1/6?p+6*(q-p)*t:t<.5?q:t<2/3?p+(q-p)*(2/3-t)*6:p}var hslToRgb=function hslToRgb(h,s,l){var r,g,b,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;if(0===s)r=g=b=l;else{var q=l<.5?l*(1+s):l+s-l*s,p=2*l-q;r=hue2rgb(p,q,h+1/3),g=hue2rgb(p,q,h),b=hue2rgb(p,q,h-1/3)}return[255*r,255*g,255*b,a]},rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g3&&void 0!==arguments[3]?arguments[3]:1,i=Math.floor(6*h),f=6*h-i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s);switch(i%6){case 0:r=v,g=t,b=p;break;case 1:r=q,g=v,b=p;break;case 2:r=p,g=v,b=t;break;case 3:r=p,g=q,b=v;break;case 4:r=t,g=p,b=v;break;case 5:r=v,g=p,b=q}return[255*r,255*g,255*b,a]},hexToHsv=function hexToHsv(hex){hex=hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(m,r,g,b){return r+r+g+g+b+b});var result=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return result?rgbToHsv(parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)):""},hslaToRgb=function hslaToRgb(h,s,l,a){var _hslToRgb2=_slicedToArray(hslToRgb(h,s,l,a),4);return function RGBAtoRGB(r,g,b,a){var r2=arguments.length>4&&void 0!==arguments[4]?arguments[4]:255,g2=arguments.length>5&&void 0!==arguments[5]?arguments[5]:255,b2=arguments.length>6&&void 0!==arguments[6]?arguments[6]:255,r3=Math.round((1-a)*r2+a*r),g3=Math.round((1-a)*g2+a*g),b3=Math.round((1-a)*b2+a*b);return"rgb(".concat(r3,",").concat(g3,",").concat(b3,")")}(_hslToRgb2[0],_hslToRgb2[1],_hslToRgb2[2],_hslToRgb2[3])},detectColor=function detectColor(col){return/rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/.test(col)||/rgba?\(((25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,\s*?){2}(25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,?\s*([01]\.?\d*?)?\)/.test(col)?"rgb":/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(col)||/^hsla\(([\d.]+),\s*([\d.]+)%,\s*([\d.]+)%,\s*(\d*(?:\.\d+)?)\)$/.test(col)?"hsl":/^#([0-9a-f]{3}){1,2}$/i.test(col)?"hex":col};var assembleModelFromIdentifiers=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=range[0]&&fieldValue<=range[1]})},{saveChild:!1,mode:mode})},getArrayIndexMap=function getArrayIndexMap(arr){return arr.reduce(function(acc,value,i){return acc[value]=i,acc},{})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode,hasBarLayer){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig||d===reserved_fields.ROW_ID});filteredDataModel=dataModel.select(function(fields,rowId){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=propField===reserved_fields.ROW_ID?rowId:fields[propField].internalValue,index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode,hasBarLayer);return filteredDataModel},common_utils_registerListeners=function registerListeners(context,listenerMap){for(var _len2=arguments.length,params=new Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)params[_key2-2]=arguments[_key2];var propListenerMap=listenerMap.apply(void 0,[context].concat(params));for(var key in propListenerMap)if({}.hasOwnProperty.call(propListenerMap,key)){var namespace=params[1].namespace,ns=null;namespace&&(ns=namespace);var mapObj=propListenerMap[key],propType=mapObj.type,props=mapObj.props,listenerFn=mapObj.listener;context.store()[propType](props,listenerFn,!1,{namespace:ns})}},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},escapeHTML=function escapeHTML(str){var htmlEscapes={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})},transposeArray=function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},extendsClass=function extendsClass(cls,extendsFrom,found){if(!cls)return!1;var prototype=cls.prototype;return found=prototype instanceof extendsFrom||extendsClass(prototype,extendsFrom,found)},common_utils_concatModels=function concatModels(dm1,dm2){for(var dataObj1=dm1.getData(),dataObj2=dm2.getData(),data1=dataObj1.data,data2=dataObj2.data,schema1=dataObj1.schema,schema2=dataObj2.schema,commonTuples={},i=0;i0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):(d[0]=0,d[1]=dy)}),_defineProperty(_stackOffsets,"none",offset_none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},pie:function(){var value=d3_shape_src_identity,sortValues=src_descending,sort=null,startAngle=d3_shape_src_constant(0),endAngle=d3_shape_src_constant(tau),padAngle=d3_shape_src_constant(0);function pie(data){var i,j,k,a1,v,n=data.length,sum=0,index=new Array(n),arcs=new Array(n),a0=+startAngle.apply(this,arguments),da=Math.min(tau,Math.max(-tau,endAngle.apply(this,arguments)-a0)),p=Math.min(Math.abs(da)/n,padAngle.apply(this,arguments)),pa=p*(da<0?-1:1);for(i=0;i0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},common_utils_nearestSortingDetails=function nearestSortingDetails(dataModel){var nearestSortDerivation=[].concat(common_utils_toConsumableArray(dataModel.getAncestorDerivations()),common_utils_toConsumableArray(dataModel.getDerivations())).reverse().find(function(derivation){return derivation.op===dist_datamodel.DM_DERIVATIVES.SORT});return nearestSortDerivation?nearestSortDerivation.criteria:null},common_utils_sortingOrder=function sortingOrder(a,b){return a instanceof InvalidAwareTypes||a instanceof InvalidAwareTypes?1:a.localeCompare(b)},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return common_utils_sortingOrder(firstVal,secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return common_utils_sortingOrder(secondVal,firstVal)}),_sortOrderMap),sortCategoricalField=function sortCategoricalField(sortOrder,firstVal,secondVal){var sortOrderType=common_utils_typeof(sortOrder);return sortOrderType===FUNCTION?sortOrder(firstVal,secondVal):sortOrderType===STRING&&sortOrderMap[sortOrder]?sortOrderMap[sortOrder](firstVal,secondVal):null},common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},difference=function difference(arr1,arr2){var _accessors2=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors2[0],fn2=_accessors2[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return!set.has(fn1(value))})},partition=function partition(array,filterFn){return array.reduce(function(acc,v,i){return filterFn(v,i,array)?acc[0].push(v):acc[1].push(v),acc},[[],[]])},mix=function mix(superclass){return{with:function _with(){for(var _len4=arguments.length,mixins=new Array(_len4),_key4=0;_key4<_len4;_key4++)mixins[_key4]=arguments[_key4];return mixins.reduce(function(cls,mixin){return mixin(cls)},superclass)}}},common_utils_componentRegistry=function componentRegistry(comps){var reg=Object.assign({},comps),regObj={register:function register(def,customKey){var key=customKey||def.formalName();return reg[key]=def,regObj},get:function get(){return reg}};return regObj},common_utils_getReadableTicks=function getReadableTicks(domain,steps){var orderedDomain=[Math.min.apply(Math,common_utils_toConsumableArray(domain)),Math.max.apply(Math,common_utils_toConsumableArray(domain))];if(steps<3)return orderedDomain;var tempScale=quantize().domain(orderedDomain).nice(),legendTicks=null;return legendTicks=Symbols.axisBottom().scale(tempScale).scale().ticks(steps),Math.max.apply(Math,common_utils_toConsumableArray(legendTicks))orderedDomain[0]&&legendTicks.unshift(orderedDomain[0]),legendTicks},common_utils_transformColor=function transformColor(rgbaValues,_ref7,datum,apply){var _ref7$h=_ref7.h,h=void 0===_ref7$h?0:_ref7$h,_ref7$s=_ref7.s,s=void 0===_ref7$s?0:_ref7$s,_ref7$l=_ref7.l,l=void 0===_ref7$l?0:_ref7$l,a=_ref7.a,_RGBAToHSLA$code=_slicedToArray(function RGBAToHSLA(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r/=255,g/=255,b/=255;var cmin=Math.min(r,g,b),cmax=Math.max(r,g,b),delta=cmax-cmin,h=0,s=0,l=0;return h=0===delta?0:cmax===r?(g-b)/delta%6:cmax===g?(b-r)/delta+2:(r-g)/delta+4,(h=Math.round(60*h))<0&&(h+=360),l=(cmax+cmin)/2,s=+(100*(s=0===delta?0:delta/(1-Math.abs(2*l-1)))).toFixed(1),l=+(100*l).toFixed(1),{color:"hsla(".concat(h,",").concat(s,"%,").concat(l,"%,").concat(a,")"),code:[h,s,l,a]}}.apply(void 0,common_utils_toConsumableArray(rgbaValues)).code,4),origH=_RGBAToHSLA$code[0],origS=_RGBAToHSLA$code[1],origL=_RGBAToHSLA$code[2],origA=_RGBAToHSLA$code[3],sanitizedA=parseFloat(a||origA,10),newH=origH+h,newS=origS+s,newL=origL+l,newA=sanitizedA+1;return apply||(newA=sanitizedA-1),{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH,newS,newL,newA]}},pointWithinCircle=function pointWithinCircle(c,point){var cx=c.x,cy=c.y,r=c.r,x=point.x,y=point.y;return Math.sqrt(Math.pow(cx-x,2)+Math.pow(cy-y,2))<=r},common_utils_dmMultipleSelection=function dmMultipleSelection(targetData,dm){var targetFields=targetData[0],payloadMap=targetData.slice(1,targetData.length).reduce(function(acc,v){return acc[v]=v,acc},{}),measures=Object.keys(dm.getFieldspace().getMeasure());return function filterFn(fields,i){return"".concat(targetFields.map(function(field){var val;if(field===reserved_fields.MEASURE_NAMES)val=measures;else if(field===reserved_fields.ROW_ID)val=i;else{var currentField=fields[field];val=currentField instanceof InvalidAwareTypes?currentField.value():(currentField||{}).internalValue}return val}))in payloadMap}};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function constantNull(){return null}function remove_remove(){var parent=this.parentNode;parent&&parent.removeChild(this)}function selection_cloneShallow(){var clone=this.cloneNode(!1),parent=this.parentNode;return parent?parent.insertBefore(clone,this.nextSibling):clone}function selection_cloneDeep(){var clone=this.cloneNode(!0),parent=this.parentNode;return parent?parent.insertBefore(clone,this.nextSibling):clone}var filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}var cssNode,cssRoot,cssView,svgNode,degrees=180/Math.PI,decompose_identity={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},decompose=function(a,b,c,d,e,f){var scaleX,scaleY,skewX;return(scaleX=Math.sqrt(a*a+b*b))&&(a/=scaleX,b/=scaleX),(skewX=a*c+b*d)&&(c-=a*skewX,d-=b*skewX),(scaleY=Math.sqrt(c*c+d*d))&&(c/=scaleY,d/=scaleY,skewX/=scaleY),a*d180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i.call(this,t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i.call(this,t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i.call(this,t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},textTween:function(value){var key="text";if(arguments.length<1)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function textTween(value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function textInterpolate(i){return function(t){this.textContent=i.call(this,t)}}(i)),t0}return tween._value=value,tween}(value))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},renderer_utils_applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},appendElement=function appendElement(element1,element2){element1.appendChild(element2)},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_addClass=function addClass(element,className,selector,filterFn){src_select(element).selectAll(selector).each(function(data){var elem=src_select(this);filterFn?filterFn(data)&&elem.classed(className,!0):elem.classed(className,!0)})},renderer_utils_removeClass=function removeClass(element,className,selector,filterFn){src_select(element).selectAll(selector).each(function(data){var elem=src_select(this);filterFn?filterFn(data)&&elem.classed(className,!1):elem.classed(className,!1)})},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i}));var sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(data);sel.enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_clipElement=function clipElement(container,measurement,id){var clipPathElement=makeElement(src_select(container),"clipPath",[1],"#".concat(id));makeElement(clipPathElement,"rect",[1]).attr("x",measurement.x).attr("y",measurement.x).attr("width",measurement.width).attr("height",measurement.height),clipPathElement.attr("clip-path","url(#".concat(id,")"))},renderer_utils_getElementsByClassName=function getElementsByClassName(node,className){return src_select(node).selectAll(className).nodes()},getMousePos=function getMousePos(element,event){var boundingClientRect=element.getBoundingClientRect();return{x:event.x-boundingClientRect.x,y:event.y-boundingClientRect.y}},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_createElement=function createElement(tag,mount){return src_select(mount).append(tag).node()},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(11),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var _len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];if(params.length){var _ref$takesMultiplePar=(meta||{}).takesMultipleParams,takesMultipleParams=void 0!==_ref$takesMultiplePar&&_ref$takesMultiplePar,val=takesMultipleParams?params:params[0];if(meta){var values,prevVal=context.get(nsProp,subNamespace),sanitization=meta.sanitization,typeCheck=meta.typeCheck,typeExpected=meta.typeExpected;if("function"==typeof sanitization&&(val=sanitization(val,prevVal,holder)),"function"==typeof typeCheck)typeCheck(val)&&(values=val);else"string"==typeof typeCheck&&"constructor"===typeCheck?val&&val.constructor.name===typeExpected&&(values=val):values=val;var preset=meta.preset,oldValues=toArray(context.get(nsProp,subNamespace));preset&&preset(values,holder),takesMultipleParams&&oldValues.forEach(function(value,i){void 0===values[i]&&(values[i]=value)}),values&&context.commit(nsProp,values,subNamespace)}else context.commit(nsProp,val,subNamespace);return holder}return context.get(nsProp,subNamespace)}}(store,conf.meta,nameSpaceProp,Array.isArray(conf.value))}if(subNamespace)for(var key in stateProps)store.commit(key,stateProps[key][subNamespace],subNamespace);else void 0===namespace?store.append(stateProps):store.append(namespace,stateProps);return[holder,store]},SmartlabelManager=__webpack_require__(8),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,CLASSPREFIX="muze",STACK="stack",GROUP="group",IDENTITY="identity",constants_ANGLE="angle",constants_RADIUS="radius",SIZE="size",COLOR="color",SHAPE="shape",TEXT="text",OUTER_RADIUS_VALUE="outerRadiusValue",TEXT_ANCHOR_MIDDLE="middle",ENCODING={X:"x",Y:"y",X0:"x0",Y0:"y0",RADIUS:"radius",RADIUS0:"radius0",ANGLE:"angle",ANGLE0:"angle0",COLOR:"color",SHAPE:"shape",SIZE:"size",TEXT:"text"},STROKE_DASHARRAY="stroke-dasharray",ASCENDING="asc",AGG_FN_SUM="sum",AREA_LAYER="area",ARC_LAYER="arc",LINE_LAYER="line",TEXT_LAYER="text",POINT_LAYER="point",BAR_LAYER="bar",TICK_LAYER="tick",SIMPLE_LAYER="simple",BASE_LAYER="base";function simple_layer_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")")))})}(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=Math.min(minTickSpace.width,tickDimWidth),minTickHeight=Math.min(minTickSpace.height,tickDimHeight);return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain))),Math.max.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain))),Math.max.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+(tickValues?axisNamePadding:0)}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?{allTickDimensions:allTickDimensions,tickSize:0,tickDimensions:{height:0,width:0},axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks}:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var renderConfig=axisInstance.renderConfig(),config=axisInstance.config(),show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName,mount=axisInstance.mount(),orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix;if(show){var availableSpace,labelProps,tickSize,selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});if(selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axisInstance.domain().length>0){var labelManager=axisInstance.dependencies().labelManager,range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter;tickSize=axisInstance.getTickSize(),labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks)),availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions,axis_renderer_setFixedBaseline(axisInstance),labels.rotation||!1!==labels.smartTicks?(selectContainer.call(axis),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize)):selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0)}var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"_getRawTickValue",value:function _getRawTickValue(data){return data}},{key:"getTicksBasedOnData",value:function getTicksBasedOnData(tickData){var _this=this,allTicks=renderer_utils_selectElement(this.mount()).selectAll(".tick"),elementToBeModified=null,elementNotToBeModified=null;return tickData&&(elementToBeModified=allTicks.filter(function(tickValue){return tickData===_this._getRawTickValue(tickValue)}),elementNotToBeModified=allTicks.filter(function(tickValue){return!(tickData===_this._getRawTickValue(tickValue))})),{selectionSet:elementToBeModified,rejectionSet:elementNotToBeModified||allTicks}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops?config.stops:config.range&&config.range.length>2?config.range.length:DEFAULT_CONFIG.stops),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}},sanitiseConfigIntervals=function sanitiseConfigIntervals(intervals){return intervals||5};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(common_utils_hslInterpolator(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=Math.min(defaultValue(color[3],0),1),newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=Math.min(a+transformationArr[3]||0,1);return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:51,range:[51,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().stops);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",WIDTH="width",HEIGHT="height",constants_MEASUREMENT="measurement",constants_CONFIG="config",MIN_UNIT_WIDTH="minUnitWidth",MIN_UNIT_HEIGHT="minUnitHeight",DIMENSIONS="dimensions",MEASURES="measures",DIMENSION="dimension",MEASURE="measure",PIVOT="pivot",FORMAT="format",constants_MOUNT="mount",HAS_DATA_UPDATED="hasDataUpdated",ROWS="rows",COLUMNS="columns",constants_DATA="data",COL="col",ROW="row",COLUMN="column",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",DETAIL="detail",LAYERS="layers",TRANSFORM="transform",enums_constants_ORDINAL="ordinal",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",enums_constants_TOP="top",enums_constants_BOTTOM="bottom",RETINAL="retinal",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",INITIALIZED="initialized",EXIT_CELLS="exitCell",AXIS="axis",UNIT="unit",UPDATED="updated",BEFORE_UPDATE="beforeupdate",VALUE_MATRIX="valueMatrix",FACET_HEADERS="facet-headers",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",ARC="arc",constants_CATEGORICAL="categorical",constants_TEMPORAL="temporal",BAR="bar",LINE="line",POINT="point",PRIMARY="Primary",SECONDARY="Secondary",BOTH="both",INTERACTION="interaction",GRID_LINES="gridLines",GRID_BANDS="gridBands",HEADER="header",FACET="facet",DEFAULT="default",constants_ASCENDING="asc",DESCENDING="desc",DARK="dark",NONE="none",NORMAL="normal",DARKER="darker";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(row[valueFieldIndex]instanceof src_InvalidAwareTypes&&(row[valueFieldIndex]=null),obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));var source=pointObj.source;return pointObj.dataObj=fieldsArr.reduce(function(acc,name){return acc[name]=source[fieldsConfig[name].index],acc},{}),pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),helpers_getNormalizedData=function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr=transformType===IDENTITY?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)},domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return sort===ASCENDING?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||transformType===STACK?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||transformType===STACK?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),defFn=function defFn(d){var _d$update=d.update;return{x:_d$update.x,y:_d$update.y}},helpers_attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref,accessor=arguments.length>2&&void 0!==arguments[2]?arguments[2]:defFn;voronoi.data((_ref=[]).concat.apply(_ref,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var _accessor=accessor(d);return{x:_accessor.x,y:_accessor.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},helpers_animateGroup=function animateGroup(mount,context){var groupTransition,update,transition=context.transition,groupAnimateStyle=context.groupAnimateStyle,duration=transition.duration,effect=transition.effect,disabled=transition.disabled;groupAnimateStyle&&(renderer_utils_setStyles(mount.node(),groupAnimateStyle.enter),update=groupAnimateStyle.update,groupTransition=disabled?mount:mount.transition().ease(easeFns[effect]).duration(duration).on("end",function(){helpers_updateStyle(renderer_utils_selectElement(this),update,!0)}),helpers_updateStyle(groupTransition,update))},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},getGroupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=getGroupSpan(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_renderLayer=function renderLayer(context){var mount=context.mount();mount&&(context.render(mount),context.dependencies().throwback.commit(common_props.ON_LAYER_DRAW,!0,context.metaInf().parentNamespace))},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){return function transformResolverPredicates(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig(),xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return[!xField,!yField,!groupByField,getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE,xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION,dimensionField&&encodingFieldInf[dimensionField]===groupByField]}(context.encodingFieldsInf(),context,context.config().transform.groupBy).some(function(value){return value})?IDENTITY:null},getValidTransform=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType=common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]===AGG_FN_SUM?STACK:GROUP}return transformType},helpers_getMarkId=function getMarkId(source,schema){return source.filter(function(val,i){return schema[i]&&schema[i].type===dist_datamodel.FieldType.DIMENSION}).join()},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(initialStyle){var conf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{originalStyle:Object.assign({},{styles:initialStyle},conf),currentState:new Map}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i0&&(interactionType=function getLastItemInMap(map){return Array.from(map)[map.size-1]}(currentState)[0],stylesForCurrentLevel=currentState.get(interactionType)||{}),stylesForCurrentLevel},strokeProps={"stroke-width":1,stroke:1,"stroke-opacity":1},parseStyle=function parseStyle(value,_ref,apply){var datum=_ref.datum,datumStyle=_ref.datumStyle;if("function"==typeof value){if(isNaN(datumStyle))value=value(datumStyle.replace(/[^\d,.]/g,"").split(",").map(function(s){return Number(s)}),datum,apply);else value=value(parseFloat(datumStyle,10),datum,apply);return value}return value},helper_applyStylesOnInteraction=function applyStylesOnInteraction(context,elem,interactionType,conf,options){var datum,mountPoint=options.mountPoint,apply=options.apply,reset=options.reset,d=elem.data()[0],_datum$meta=(datum=Array.isArray(d)?d[0]:Array.isArray(d.data)?d.data[0]:d).meta,currentState=_datum$meta.currentState,originalStyle=_datum$meta.originalStyle,applicableStyles={},styles=conf.style,strokePosition=conf.strokePosition,applicableStrokePos=strokePosition;reset&¤tState.clear();var applyStyle=!0;if(apply){var sanitizedStyles={styles:{},strokePosition:strokePosition};for(var type in styles){var parsedStyleVal=parseStyle(styles[type],{datum:datum,datumStyle:elem.style(type)},apply);sanitizedStyles.styles[type]=parsedStyleVal}currentState.set(interactionType,sanitizedStyles),applicableStyles=sanitizedStyles.styles}else if(currentState.has(interactionType)||reset){currentState.delete(interactionType);var currentStyle=getPreviousStyle(datum.meta,interactionType);applicableStyles=Object.assign({},originalStyle.styles,currentStyle.styles),applicableStrokePos=currentStyle.strokePosition||originalStyle.strokePosition}else applyStyle=!1;var styleKeys=Object.keys(applicableStyles),_partition2=helper_slicedToArray(partition(styleKeys,function(v){return v in strokeProps}),2),strokeStyles=_partition2[0],otherStyles=_partition2[1];applyStyle&&context.applyStyles({strokeStyles:strokeStyles,otherStyles:otherStyles,styleObj:applicableStyles,elem:elem,datum:datum,applicableStrokePos:applicableStrokePos,mountPoint:mountPoint})};function base_mixin_typeof(obj){return(base_mixin_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _construct(Parent,args,Class){return(_construct=function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&base_mixin_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function base_mixin_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function base_mixin_slicedToArray(arr,i){return function base_mixin_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function base_mixin_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function base_mixin_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function base_mixin_toConsumableArray(arr){return function base_mixin_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref2=[]).concat.apply(_ref2,base_mixin_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,idx=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI=this.encodingFieldsInf(),yField=_this$encodingFieldsI.yField,xField=_this$encodingFieldsI.xField,yFieldType=_this$encodingFieldsI.yFieldType;if(_this$encodingFieldsI.xFieldType===dist_datamodel.FieldType.MEASURE)measureIndex=fieldsConfig[xField].index,enc="x";else if(yFieldType===dist_datamodel.FieldType.MEASURE){var layerName=this.constructor.formalName();measureIndex=fieldsConfig[yField].index,enc="y",layerName===AREA_LAYER&&(enc=idx%2==0?"y":"y0")}var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc]||0,row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i1&&renderer_getElementsForLine({mount:mount,data:d,strokeStyle:strokeStyle,className:".".concat(className,"-").concat(nullDataLineClass),layer:layer,linepath:linepath,transition:transition,updateFns:updateFns}),null}),elementWithNullData},line_default_config_defaultConfig={classPrefix:CLASSPREFIX,defClassName:"layer-line",className:"",interpolate:"linear",transform:{type:"group"},interaction:{fade:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},focus:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},brushStroke:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}}},crossline:!0,nearestPointThreshold:20,encoding:{color:{},x:{},y:{},strokeOpacity:{value:1},fillOpacity:{value:0},strokeWidth:{value:"2px"}},transition:{effect:"cubic",duration:1e3},connectNullData:!1,nullDataLineStyle:{},nullDataLineClass:"null"};__webpack_require__(21);function line_mixin_typeof(obj){return(line_mixin_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function line_mixin_toConsumableArray(arr){return function line_mixin_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return this.getDataFromEvent(config.event)}},{key:"getDataFromEvent",value:function getDataFromEvent(event){var dataPoint=renderer_utils_selectElement(event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf({fill:color}),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_mixin_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),_class}()};function arc_typeof(obj){return(arc_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function arc_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":TEXT_ANCHOR_MIDDLE}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}},{key:"getNearestPoint",value:function getNearestPoint(x,y,_ref){var event=_ref.event;return this.data()?this.getDataFromEvent(event):null}},{key:"getDataFromEvent",value:function getDataFromEvent(event){return helpers_getDataFromEvent(this,event)}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),_class}()};function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update);var pathEl=makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr);renderer_utils_setStyles(pathEl,style)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:CLASSPREFIX,defColorStyle:"stroke",interaction:{highlight:{className:"highlight-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"center"},focusStroke:{className:"focus-stroke-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"outside"},commonDoubleStroke:{style:{stroke:"black","stroke-width":"2px"},strokePosition:"outside"},brushStroke:{className:"brush-stroke-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"outside"},doubleStroke:{style:{stroke:"black","stroke-width":"2px"},strokePosition:"outside"},fade:{style:{fill:function fill(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},focus:{style:{fill:function fill(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}}},innerPadding:.1,nearestPointThreshold:5,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},stroke:{value:"#000"},"stroke-width":{value:0},fill:{},shape:{value:"circle"},x:{},y:{},"stroke-opacity":{value:1},"fill-opacity":{value:.5},strokePosition:{value:"center"},interaction:{anchors:"highlight","persistent-anchors":"focusStroke","brush-anchors":"brushStroke"}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]};__webpack_require__(25);function point_helper_slicedToArray(arr,i){return function point_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function point_helper_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function point_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var helper_prepareDrawingInf=function prepareDrawingInf(_ref){var data=_ref.data,datum=_ref.datum,i=_ref.i,layerInst=_ref.layerInst,xPx=_ref.xPx,yPx=_ref.yPx,axes=layerInst.axes(),shapeAxis=axes.shape,colorAxis=axes.color,sizeAxis=axes.size,shape=shapeAxis.getShape(datum.shape),size=sizeAxis.getSize(datum.size),color=colorAxis.getColor(datum.color),layerEncoding=layerInst.config().encoding,stroke=layerEncoding.stroke.value,strokeWidth=layerEncoding["stroke-width"].value,resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,stroke:stroke,"stroke-width":strokeWidth,size:size,shape:shape,data:datum},data:datum},i,data,layerInst),rowId=datum.rowId,source=datum.source;shape=resolvedEncodings.shape,size=resolvedEncodings.size;var style={fill:color=resolvedEncodings.color,stroke:resolvedEncodings.stroke,"stroke-width":resolvedEncodings["stroke-width"]},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};return{enter:pos,update:pos,shape:shape,source:source,rowId:rowId,style:style,data:datum.dataObj,meta:Object.assign({layerId:layerInst.id()},getColorMetaInf(style,{strokePosition:layerEncoding.strokePosition.value})),size:size}},helper_pointTranslators=function helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},COORD_TYPES.CARTESIAN,function(data,config,layerInst){for(var points=[],encoding=layerInst.config().encoding,axes=layerInst.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,fieldsConfig=layerInst.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],_map2=point_helper_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];if(xPx+=offsetX,yPx+=offsetY,!isNaN(xPx)&&!isNaN(yPx)){var point=helper_prepareDrawingInf({data:data,datum:d,i:i,layerInst:layerInst,xPx:xPx,yPx:yPx});point.className=getIndividualClassName(d,i,data,layerInst),points.push(point),layerInst.cachePoint(d[key],point)}},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{};return helper_pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var seriesClassName,_this2=this,maxSize=0,config=this.config(),keys=this._transformedData.map(function(d){return d.key}),transition=config.transition,className=config.className,defClassName=config.defClassName,classPrefix=config.classPrefix,normalizedData=this._normalizedData,containerSelection=renderer_utils_selectElement(container),qualifiedClassName=getQualifiedClassName(defClassName,this.id(),classPrefix);this._points=[],this._pointMap={},containerSelection.classed(qualifiedClassName.join(" "),!0).classed(className,!0),this._points=this.generateDataPoints(normalizedData,keys),this._graphicElems={};var schema=this.data().getSchema();return makeElement(container,"g",this._points,null,{update:function update(group,points){maxSize=Math.max.apply(Math,[maxSize].concat(point_mixin_toConsumableArray(points.map(function(d){return d.size||0})))),seriesClassName="".concat(qualifiedClassName[0]),_this2.constructor.drawFn()({layer:_this2,container:group.node(),points:points,interpolate:config.interpolate,className:seriesClassName,transition:transition,keyFn:function keyFn(v){return helpers_getMarkId(v.source,schema)}})}},function(data){return data[0].rowId}),this._maxSize=2*Math.sqrt(maxSize/Math.PI),this.attachDataToVoronoi(this._points),this}},{key:"attachDataToVoronoi",value:function attachDataToVoronoi(points){helpers_attachDataToVoronoi(this._voronoi,points)}},{key:"generateDataPoints",value:function generateDataPoints(normalizedData,keys){var _this3=this,_getPlotMeasurement2=point_mixin_slicedToArray(helpers_getPlotMeasurement(this,keys),2),widthMetrics=_getPlotMeasurement2[0],heightMetrics=_getPlotMeasurement2[1],offsetXValues=widthMetrics.offsetValues||[],offsetYValues=heightMetrics.offsetValues||[];return normalizedData.map(function(dataArr,i){var measurementConf=_this3.getMeasurementConfig(offsetXValues[i],offsetYValues[i],widthMetrics.span,heightMetrics.span);return _this3.translatePoints(dataArr,measurementConf)}).filter(function(d){return d.length})}},{key:"getMeasurementConfig",value:function getMeasurementConfig(offsetX,offsetY,widthSpan,heightSpan){return{offset:{x:(offsetX||0)+widthSpan/2,y:(offsetY||0)+heightSpan/2},span:{x:widthSpan,y:heightSpan}}}},{key:"getNearestPoint",value:function getNearestPoint(x,y){var nearestPointThreshold=this.config().nearestPointThreshold,distanceLimit=Math.max(this._maxSize,nearestPointThreshold);if(!this.data())return null;var point=this._voronoi.find(x,y,distanceLimit),dimensions=point&&point.data.data.update,radius=point?Math.sqrt(point.data.data.size/Math.PI):0;if(point&&pointWithinCircle({x:dimensions.x,y:dimensions.y,r:radius+nearestPointThreshold},{x:x,y:y})){var _point$data$data=point.data.data,source=_point$data$data.source,rowId=_point$data$data.rowId;return{id:this.getIdentifiersFromData(source,rowId),dimensions:[{x:dimensions.x,y:dimensions.y,width:radius,height:radius}],layerId:this.id()}}return null}},{key:"addOverlayPath",value:function addOverlayPath(refElement,data,style,strokePosition){var pathElement,container=refElement.parentElement;if(this._overlayPath[data.rowId]?pathElement=this._overlayPath[data.rowId]:((pathElement=makeElement(container,"path",[data.update],null,{},function(d){return"".concat(d.x," ").concat(data.rowId)})).style("fill","none"),pathElement.style("fill-opacity",0),pathElement.attr("id",data.rowId),this._overlayPath[data.rowId]=pathElement),"stroke-width"===style.type){var position=strokePosition,radius=Math.sqrt(data.size/Math.PI);radius=getStrokeWidthByPosition(position,radius);var size=data.size+radius;if("string"==typeof data.shape){var path=common_utils_getSymbol(data.shape).size(size);pathElement.attr("d",path)}}var styleVal=style.value;"function"==typeof styleVal&&(styleVal=styleVal(pathElement.style(style.type)));pathElement.style(style.type,styleVal),appendElement(refElement,pathElement.node())}},{key:"removeOverlayPath",value:function removeOverlayPath(data,style){var currentPath=this._overlayPath[data.rowId];currentPath&&(currentPath.node().removeAttribute("style"),Object.keys(style).forEach(function(s){return currentPath.style(s,style[s])}),currentPath.style("fill-opacity",0))}},{key:"getBoundBoxes",value:function getBoundBoxes(){return helpers_getBoundBoxes(this._points.flat())}},{key:"applyElementStyles",value:function applyElementStyles(elem,styles,styleObj){styles.forEach(function(type){elem.select("path").style(type,styleObj[type])})}}],[{key:"defaultConfig",value:function defaultConfig(){return point_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=point_mixin_get(point_mixin_getPrototypeOf(_class),"defaultPolicy",this).call(this,conf,userConf),encoding=config.encoding,transform=config.transform,colorField=encoding.color&&encoding.color.field;return colorField&&(transform.groupBy=colorField),config}},{key:"drawFn",value:function drawFn(){return point_renderer}}]),_class}()};function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],xAxis=axes.x,yAxis=axes.y,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),layer_registry=function(){var layers=arguments.length>0&&void 0!==arguments[0]?arguments[0]:DEFAULT_LAYERS,reg=Object.assign({},layers),regObj={register:function register(def){var key=def.formalName();return reg[key]=def,regObj},get:function get(){return reg}};return regObj},helpers=Object.assign(helpers_namespaceObject,{pointLayerHelpers:point_helper_namespaceObject}),layerMixins={BarLayerMixin:bar_mixin_BarLayerMixin,BaseLayerMixin:base_mixin_BaseLayerMixin,LineLayerMixin:line_mixin_LineLayerMixin,AreaLayerMixin:area_mixin_AreaLayerMixin,PointLayerMixin:point_mixin_PointLayerMixin,TextLayerMixin:text_mixin_TextLayerMixin,TickLayerMixin:tick_mixin_TickLayerMixin,ArcLayerMixin:arc_mixin_ArcLayerMixin};function src_helper_slicedToArray(arr,i){return function src_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function src_helper_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function src_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function src_helper_toConsumableArray(arr){return function src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})},helper_X=ENCODING.X,helper_Y=ENCODING.Y,helper_RADIUS=ENCODING.RADIUS,helper_ANGLE=ENCODING.ANGLE,helper_ANGLE0=ENCODING.ANGLE0,RADIUS0=ENCODING.RADIUS0,helper_getLayerAxisIndex=function getLayerAxisIndex(layers,fields){var layerAxisIndex={};return layers.forEach(function(layer){var _layer$config=layer.config(),axis=_layer$config.axis,encoding=_layer$config.encoding,id=layer.id();[helper_X,helper_Y,helper_ANGLE,helper_ANGLE0,helper_RADIUS].forEach(function(type){var index,specificField=getObjProp(encoding,type,"field"),encodingField=type===helper_RADIUS?defaultValue(specificField,getObjProp(encoding,RADIUS0,"field")):getObjProp(encoding,type,"field"),field=defaultValue(getObjProp(axis,type),encodingField);index=fields[type]&&fields[type].length?fields[type].findIndex(function(fieldInst){return-1!==fieldInst.getMembers().indexOf(field)}):0,!layerAxisIndex[id]&&(layerAxisIndex[id]={}),layerAxisIndex[id][type]=index})}),layerAxisIndex},helper_unionDomainFromLayers=function unionDomainFromLayers(layers,axisFields,layerAxisIndex,fieldsConfig){var domains={};return(layers=layers.filter(function(layer){return null!==layer.getDataDomain()})).forEach(function(layer){var domainValues={},config=layer.config(),layerDomain=layer.getDataDomain(),layerId=layer.id();null!==layerDomain&&!1!==config.calculateDomain&&(domainValues=Object.entries(layerDomain),domains=domainValues.reduce(function(fieldDomain,domain){var encodingType=domain[0],axisIndex=layerAxisIndex[layerId][encodingType],field=getObjProp(axisFields,encodingType,axisIndex);!fieldDomain[encodingType]&&(fieldDomain[encodingType]={});var encodingDomain=fieldDomain[encodingType];if(field){var fieldStr="".concat(field);encodingDomain[fieldStr]=encodingDomain[fieldStr]||[],encodingDomain[fieldStr]=function getValidDomain(domain,domain1,encodingType,fieldType){return encodingType===helper_ANGLE||encodingType===helper_ANGLE0?domain.concat(domain1.filter(function(d){return-1===domain.indexOf(d)})):unionDomain([domain,domain1],fieldType)}(encodingDomain[fieldStr],domain[1],encodingType,fieldsConfig[field.getMembers()[0]].def.subtype)}return fieldDomain},domains))}),domains},helper_renderLayers=function renderLayers(context,container,layers,measurement){context._lifeCycleManager.notify({client:layers,action:"beforedraw",formalName:"layer"});var classPrefix=context.config().classPrefix,orderedLayers=layers.sort(function(a,b){return a.config().order-b.config().order}),layerParentGroup=makeElement(container,"g",[1],"".concat(classPrefix,"-layer-group")),layerDepOrder=getDependencyOrder(context._layerDepOrder),groups={};makeElement(layerParentGroup,"g",orderedLayers,null,{update:function update(group,layer){groups[layer.alias()]={group:group,layer:layer}}}),layerDepOrder.map(function(name){return groups[name]}).filter(function(d){return void 0!==d}).forEach(function(o){var layer=o.layer,group=o.group;layer.measurement(measurement),layer.dataProps({timeDiffs:context._timeDiffs}),!1!==layer.config().render&&layer.mount(group.node())})},helper_getNearestDimensionalValue=function getNearestDimensionalValue(context,position){var fields=context.fields();if(!fields.x.length||!fields.y.length)return null;var data=context.data(),axes=context.axes(),fieldsConfig=data.getFieldsConfig(),xField=getObjProp(fields,"x",0).getMembers()[0],yField=getObjProp(fields,"y",0).getMembers()[0],xFieldType=fieldsConfig[xField].def.subtype,yFieldType=fieldsConfig[yField].def.subtype,entryVal=[["x",xFieldType,xField],["y",yFieldType,yField]].find(function(entry){return entry[1]===dist_datamodel.DimensionSubtype.CATEGORICAL||entry[1]===dist_datamodel.DimensionSubtype.TEMPORAL});if(!entryVal||xFieldType!==dist_datamodel.MeasureSubtype.CONTINUOUS&&yFieldType!==dist_datamodel.MeasureSubtype.CONTINUOUS)return null;var field=entryVal[2],index=fieldsConfig[field].index,key=axes[entryVal[0]][0].invert(position[entryVal[0]]);if(entryVal[1]===dist_datamodel.DimensionSubtype.TEMPORAL){var filterData=src_helper_toConsumableArray(new Set(data.getData().data.map(function(d){return d[index]})));key=getNearestValue(filterData,key)}return void 0!==key?[[field],[key]]:null},getLayersBy=function getLayersBy(layers,searchBy,value){return layers.filter(function(layer){return("type"===searchBy?layer.constructor.formalName():layer.alias())===value})},removeLayersBy=function removeLayersBy(layers,searchBy,value){layers.filter(function(inst){return("type"===searchBy?inst.config().mark:inst.alias())!==value||(inst.remove(),!1)})},helper_createSideEffectGroup=function createSideEffectGroup(container,className){return makeElement(container,"g",[1],className).node()},createRenderPromise=function createRenderPromise(unit){unit._renderedPromise.then(function(){unit._renderedPromise=new Promise(function(resolve){unit._renderedResolve=resolve}),createRenderPromise(unit)})},getRadiusRange=function getRadiusRange(width,height){var config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]},helper_setAxisRange=function setAxisRange(context){var radiusAxes=context.axes().radius;radiusAxes&&radiusAxes.forEach(function(axis){axis.range(getRadiusRange(context.width(),context.height()))})},helper_isXandYMeasures=function isXandYMeasures(context){var _context$fields=context.fields(),_map2=src_helper_slicedToArray([_context$fields.x,_context$fields.y].map(function(fields){return fields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE})}),2),xMeasures=_map2[0],yMeasures=_map2[1];return xMeasures&&yMeasures},getKey=function getKey(arr,row){for(var key=row[arr[0]],i=1,len=arr.length;i0&&void 0!==arguments[0]?arguments[0]:{},set=this._set,uidMap=this._uidMap,retObj={entrySet:[[],[]],exitSet:[[],[]],mergedEnter:[],mergedExit:[],completeSet:[]},measureNames=this._measureNames,dimVals=this._dimVals,_config$keepDims=config.keepDims,keepDims=void 0!==_config$keepDims&&_config$keepDims,_config$dimensions=config.dimensions,dimensions=void 0===_config$dimensions?this._fields:_config$dimensions,fieldIndices=this._fieldIndices,_loop=function _loop(key){var val=void 0,measureNamesArr=measureNames[key]||[],dims=dimVals[key];keepDims?measureNamesArr.length?(dims=dimensions.map(function(d){return dims[fieldIndices[d]]}),val=dims.length?[].concat(selection_set_toConsumableArray(dims),["".concat(measureNamesArr)]):[uidMap[key],"".concat(measureNamesArr)]):val=dims.length?selection_set_toConsumableArray(dims):[uidMap[key]]:val=measureNamesArr.length?[uidMap[key],measureNames[key],dims]:[uidMap[key]],set[key]>0?([SELECTION_OLD_ENTRY,SELECTION_NEW_ENTRY].forEach(function(v,i){set[key]===v&&retObj.entrySet[i].push(val)}),set[key]!==SELECTION_OLD_ENTRY&&set[key]!==SELECTION_NEW_ENTRY||retObj.mergedEnter.push(val)):set[key]<0&&([SELECTION_OLD_EXIT,SELECTION_NEW_EXIT].forEach(function(v,i){set[key]===v&&retObj.exitSet[i].push(val)}),set[key]!==SELECTION_OLD_EXIT&&set[key]!==SELECTION_NEW_EXIT||retObj.mergedExit.push(val)),retObj.completeSet.push(val)};for(var key in set)_loop(key);return retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){i in set&&(set[i]=SELECTION_NULL)});else for(var key in set)set[key]=SELECTION_NULL;return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}},{key:"getMergedEntrySet",value:function getMergedEntrySet(raw){var set=this._set,mergedEnter=[],uidMap=this._uidMap,measureNames=this._measureNames,dimVals=this._dimVals;for(var key in set){var val=raw?[].concat(selection_set_toConsumableArray(dimVals[key]),["".concat(measureNames[key])]):[uidMap[key],measureNames[key]];set[key]!==SELECTION_NEW_ENTRY&&set[key]!==SELECTION_OLD_ENTRY||mergedEnter.push(val)}return mergedEnter}},{key:"getMergedExitSet",value:function getMergedExitSet(raw){var set=this._set,mergedExit=[],uidMap=this._uidMap,measureNames=this._measureNames,dimVals=this._dimVals;for(var key in set){var val=raw?[].concat(selection_set_toConsumableArray(dimVals[key]),["".concat(measureNames[key])]):[uidMap[key],measureNames[key]];set[key]!==SELECTION_NEW_EXIT&&set[key]!==SELECTION_OLD_EXIT||mergedExit.push(val)}return mergedExit}}]),SelectionSet}();function muze_firebolt_src_helper_toConsumableArray(arr){return function muze_firebolt_src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffect=this.sideEffects()[name],setTransform=options.setTransform;selectionSet=setTransform?setTransform(selectionSet,payload,sideEffect):selectionSet,sideEffect.apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};payload=this.sanitizePayload(payload);var propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],behaviourEffectMap=this._behaviourEffectMap,sideEffects=getSideEffects(behaviour,behaviourEffectMap);if(this._propagationInf=propagationInfo,this._payloads[behaviour]=payload,action){action.dispatch(payload),this._entryExitSet[behaviour]=action.entryExitSet();var shouldApplySideEffects=this.shouldApplySideEffects(propagationInfo);if(propagate&&this.propagate(behaviour,payload,action.propagationIdentifiers(),{sideEffects:sideEffects}),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,this.getEntryExitSet(behaviour),payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._behaviourPolicies[behaviour]||(this._behaviourPolicies[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sideEffectPolicies[sideEffect]||(this._sideEffectPolicies[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sideEffectPolicies[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._behaviourPolicies[behaviour][key],this}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){var handler=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.onDataModelPropagation();return dataModel.unsubscribe("propagation"),dataModel.on("propagation",handler),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),target=SideEffect.target();if(target===context.target()||"all"===target){var sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"target",value:function target(){return"all"}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this.registerPhysicalActionHandlers(),this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{model:propagationInf.data?propagationInf.data:null,uids:criteria?firebolt_getKeysFromCriteria(criteria,this):null}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}},{key:"mergeSelectionSets",value:function mergeSelectionSets(behaviours){return helper_unionSets(this,behaviours)}},{key:"data",value:function data(){return this.context.data()}},{key:"triggerPhysicalAction",value:function triggerPhysicalAction(event,payload){var handlers=this._handlers[event]||[],genericHandlers=this._handlers["*"];return[].concat(firebolt_toConsumableArray(Object.values(handlers)),firebolt_toConsumableArray(Object.values(genericHandlers))).forEach(function(fn){fn(event,payload)}),this}},{key:"onPhysicalAction",value:function onPhysicalAction(event,fn,namespace){return!this._handlers[event]&&(this._handlers[event]={}),this._handlers[event][namespace]=fn,this}},{key:"registerPhysicalActionHandlers",value:function registerPhysicalActionHandlers(){var _this4=this;this.onPhysicalAction("*",function(event,payload){_this4._actionBehaviourMap[event].behaviours.forEach(function(beh){return _this4.dispatchBehaviour(beh,payload)})})}},{key:"id",value:function id(){return this.context.id()}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(){var _this$context;return(_this$context=this.context).getRangeFromIdentifiers.apply(_this$context,arguments)}},{key:"sanitizePayload",value:function sanitizePayload(payload){return payload}},{key:"payloadGenerators",value:function payloadGenerators(){return arguments.length&&Object.assign(this._payloadGenerators,arguments.length<=0?void 0:arguments[0]),this._payloadGenerators}},{key:"getPayloadGeneratorFor",value:function getPayloadGeneratorFor(action){var defaultFn=this._payloadGenerators.__default,fn=this._payloadGenerators[action];return defaultValue(fn,defaultFn)}},{key:"getPayload",value:function getPayload(action){return this._payloads[action]}},{key:"actions",value:function actions(){return this._actions}}]),Firebolt}();function generic_toConsumableArray(arr){return function generic_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.fields.map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria)},this}return this._entryExitSet}},{key:"getSetInfo",value:function getSetInfo(type,set,filteredDataModel,setFields){var model=null,data=this.firebolt.data();if("mergedEnter"===type)model=filteredDataModel||null;else if("mergedExit"===type){if(filteredDataModel){var setKeys=new Set(set.map(function(d){return d[0]}));model=data.select(function(fields,i){return setKeys.has(setFields.map(function(field){return field===reserved_fields.ROW_ID?i:fields[field].value}))},{saveChild:!1})}model=filteredDataModel||null}var aggFns=common_utils_retrieveNearestGroupByReducers(model);return{uids:set,length:set.length,model:model,fields:setFields,aggFns:aggFns}}},{key:"propagationIdentifiers",value:function propagationIdentifiers(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(params.length){var propData=null,selectionSet=params[0],payload=params[1],fieldsConfig=this.firebolt.data().getFieldsConfig(),criteria=payload.criteria,propagationFields=this._propagationFields;if(selectionSet.resetted()||null===criteria)propData=null;else if(isSimpleObject(criteria)){var fields=Object.keys(criteria),otherFields=generic_slicedToArray(partition(fields,function(d){return fieldsConfig[d]?fieldsConfig[d].def.subtype===dist_datamodel.DimensionSubtype.CATEGORICAL:d===reserved_fields.MEASURE_NAMES}),2)[1],allFields=selectionSet._fields.filter(function(d){return d===reserved_fields.ROW_ID||fieldsConfig[d].def.subtype===dist_datamodel.DimensionSubtype.CATEGORICAL}),mergedEnter=selectionSet.getSets({keepDims:!0,dimensions:allFields}).mergedEnter;propData={fields:fields.map(function(d){return fieldsConfig[d]?fieldsConfig[d].def:{name:d}}),range:this.firebolt.getRangeFromIdentifiers({criteria:criteria,entrySet:mergedEnter,fields:otherFields}),identifiers:[[].concat(generic_toConsumableArray(allFields),[reserved_fields.MEASURE_NAMES])].concat(generic_toConsumableArray(mergedEnter))}}else{var _mergedEnter=selectionSet.getSets({keepDims:!0,dimensions:propagationFields}).mergedEnter,_fields=propagationFields?[].concat(generic_toConsumableArray(propagationFields),[reserved_fields.MEASURE_NAMES]):criteria[0];propData={fields:_fields.map(function(d){return fieldsConfig[d]?fieldsConfig[d].def:{name:d}}),identifiers:[_fields].concat(generic_toConsumableArray(_mergedEnter))}}return this._propagationIdentifiers=propData,this}return this._propagationIdentifiers}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}},{key:"propagateWith",value:function propagateWith(){return this._propagationFields=arguments.length<=0?void 0:arguments[0],this}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iendPos.x&&(newStartPos.x=endPos.x,newEndPos.x=startPos.x),startPos.y>endPos.y){var y=startPos.y;newStartPos.y=endPos.y,newEndPos.y=y}var payload=drag_action_config(firebolt,{startPos:newStartPos,endPos:newEndPos});payload.dragging=!0,payload.dragDiff=Math.abs(startPos.x-endPos.x)+Math.abs(startPos.y-endPos.y),firebolt.triggerPhysicalAction(action,payload)}}).on("end",function(){var event=renderer_utils_getEvent();endPos={x:event.x,y:event.y};var duration=(new Date).getTime()-touchStart;if(!(touch&&duration>100&&Math.abs(startPos.x-endPos.x)<=5)){if(endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height)),startPos.x>endPos.x){var x=startPos.x;startPos.x=endPos.x,endPos.x=x}if(startPos.y>endPos.y){var y=startPos.y;startPos.y=endPos.y,endPos.y=y}var payload=drag_action_config(firebolt,{startPos:startPos,endPos:endPos});payload.dragEnd=!0,firebolt.triggerPhysicalAction(action,payload)}}))},physical_hover=function hover(firebolt){return function(targetEl){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:!0,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,getAllPoints:!1,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};firebolt.triggerPhysicalAction(HOVER,payload),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){firebolt.triggerPhysicalAction(HOVER,{criteria:null})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);firebolt.triggerPhysicalAction(CLICK,payload),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl){drag_event_attachDragEvent(targetEl,DRAG,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?firebolt.triggerPhysicalAction(LONGTOUCH,{criteria:null}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);firebolt.triggerPhysicalAction(LONGTOUCH,payload),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),side_effects_ANCHORS="anchors",side_effects_TOOLTIP="tooltip",side_effects_BRUSH_ANCHORS="brush-anchors",side_effects_PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",side_effects_HIGHLIGHTER="highlighter",CROSSLINE="crossline",FRAGMENTED_TOOLTIP="fragmented-tooltip",AXIS_LABEL_HIGHLIGHTER="axis-label-highlighter",generic_props_PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},layers=arguments.length>2?arguments[2]:void 0,interactionType=config.interactionType,apply=config.apply,_config$reset=config.reset,reset=void 0!==_config$reset&&_config$reset;return(layers||this.firebolt.context.layers()).forEach(function(layer){if(!1!==layer.config().interactive){var layerFields=layer.data().getFieldsConfig(),filteredUids=set.uids.filter(function(_ref){var _ref2$=surrogate_slicedToArray(_ref,2)[1];return(void 0===_ref2$?[]:_ref2$).every(function(m){return m in layerFields})}).map(function(d){return d[0]}),options={apply:apply,reset:reset,styles:null};layer.applyInteractionStyle(interactionType,filteredUids,options)}}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(firebolt,{startPos:{x:x,y:y},endPos:{x:x2,y:y2}});onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(firebolt,{startPos:{x:x,y:y},endPos:{x:x2,y:y2}});payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200},persistent:!1}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),src_default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",parentClassName:"tooltip-parent-container",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},spacing:5,content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"4px 0 4px 0",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}};__webpack_require__(28);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model,classPrefix=config.classPrefix;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function){makeElement(mount,"div",[1],"".concat(classPrefix,"-tooltip-html-container")).html(data())}else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"",{update:function update(elem,elemData){return elem.attr("class",elemData.className)}}),_cells=makeElement(_rows,"span",function(d){return d.data},"".concat(classPrefix,"-tooltip-content"));_cells.attr("class","".concat(classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block"}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=src_default_config_defaultConfig.content;return config.classPrefix=src_default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className="".concat(classPrefix,"-").concat(contentClass,"-").concat(name),specificClass="".concat(classPrefix,"-").concat(contentConfig.className),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className," ").concat(specificClass)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target;if(target){var node=this._tooltipContainer.node(),tooltipPos=this._orientation;if("left"===tooltipPos||"right"===tooltipPos?y+node.offsetHeighttarget.y+target.height:x+node.offsetWidthtarget.x+target.width){var path;this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===tooltipPos?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===tooltipPos?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===tooltipPos&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else this._tooltipConnectorContainer.style("display","none")}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,contentContainer=this._contentContainer.node();this._tooltipContainer.style("top","0px").style("left","0px").style("width","2000px").style("height","2000px");var offsetWidth=contentContainer.offsetWidth+4,offsetHeight=contentContainer.offsetHeight+4,config=this._config,offset=this._offset,spacing=config.spacing,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,bottomSpace=extent.height-(dim.y+dim.height+offset.y),arrowSize=spacing,tooltipHeight=offsetHeight+arrowSize,tooltipWidth=offsetWidth+arrowSize,spaces=[{position:"top",value:topSpace-tooltipHeight},{position:"right",value:rightSpace-tooltipWidth},{position:"left",value:leftSpace-tooltipWidth},{position:"bottom",value:bottomSpace-tooltipHeight}],positionHorizontal=function positionHorizontal(positionVal){var position,x=dim.x+dim.width,y=dim.y;return"right"===positionVal?(position="left",x+=arrowSize):"left"===positionVal&&(x=dim.x-offsetWidth,position="right",x-=arrowSize),dim.height0?positionHorizontal(hMax.position):positionVertical(vMax.position);return this._position={x:obj.x,y:obj.y},this._tooltipContainer.style("height","".concat(offsetHeight,"px")).style("width","".concat(offsetWidth,"px")),this._orientation=obj.position,draw&&this.position(obj.x,obj.y),this}},{key:"hide",value:function hide(){return this._tooltipContainer.style("display","none"),this._tooltipConnectorContainer.style("display","none"),this}},{key:"show",value:function show(){return this._tooltipContainer.style("display","block"),this}},{key:"extent",value:function extent(_extent){return this._extent=_extent,this}},{key:"offset",value:function offset(_offset){return this._offset=_offset,this}},{key:"remove",value:function remove(){return this._tooltipContainer.remove(),this._tooltipConnectorContainer.remove(),this}}],[{key:"defaultConfig",value:function defaultConfig(){return src_default_config_defaultConfig}}]),Tooltip}(),HIGHLIGHT_SUMMARY="highlightSummary";function strategies_construct(Parent,args,Class){return(strategies_construct=function strategies_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&strategies_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function strategies_setPrototypeOf(o,p){return(strategies_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function strategies_toConsumableArray(arr){return function strategies_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1;hasMultipleMeasures&&content.push({data:[icon,formattedRetinalValue]});var isSelected=(target&&target[1][target[0].indexOf(retField)])===retinalFieldValue;measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,formatterFn=_fieldInf$measure.fn,currentMeasureValue=valueArr[measureIndex],value=formatterFn(currentMeasureValue),keyValue=strategies_getKeyValue({field:hasMultipleMeasures?"".concat(dName).concat(separator):formattedRetinalValue,value:value,classPrefix:classPrefix,margin:hasMultipleMeasures?margin:void 0,isSelected:isSelected,stackedSum:stackedSum,stackedValue:currentMeasureValue instanceof strategies_InvalidAwareTypes?currentMeasureValue.value():currentMeasureValue.toFixed(2),isStackedBar:isStackedBar});hasMultipleMeasures||(keyValue.data=[icon].concat(strategies_toConsumableArray(keyValue.data))),content.push(keyValue)})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$retinalField=context.retinalFields,color=_context$retinalField.color,shape=_context$retinalField.shape,size=_context$retinalField.size,detailFields=context.detailFields||[],_ref2$showStackSum=(context.config||{}).showStackSum,showStackSum=void 0===_ref2$showStackSum||_ref2$showStackSum,_context$payload$sele=context.payload.selectedMeasures,selectedMeasures=void 0===_context$payload$sele?[]:_context$payload$sele,dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(strategies_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),isStacked=function isStackedChart(layers){return layers.some(function(d){return"stack"===d.transformType()})}(context.layers),isStackedBar=function isStackedBarChart(layers){return layers.some(function(d){return"stack"===d.transformType()&&d.config().mark===BAR})}(context.layers),filteredMeasures=isSingleValue(dataLen,isStacked)?measures:measures.filter(function(d){return-1===allMeasures.indexOf(d.name)});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataModel=selectionSet&&selectionSet.mergedEnter.model;if(null===payload.criteria||dataModel&&dataModel.isEmpty()||null===selectionSet)return this.hide(options,null),this;var strategy=defaultValue(options.strategy,this._strategy);return this.createTooltip(dataModel,Object.assign({},{payload:payload,selectionSet:selectionSet,strategy:strategy,options:options}),null,0),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips,orientation=this.config().orientation;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var tooltip=tooltips[key],strategy=options.strategy||this._strategy;tooltip.content(strategy,null),Object.keys(tooltip._contents).length?tooltip.positionRelativeTo(tooltip._target,{orientation:orientation}):tooltip.hide()}}},{key:"getPlotPointsFromIdentifiers",value:function getPlotPointsFromIdentifiers(payload){var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;i1&&void 0!==arguments[1]?arguments[1]:{},plotDim=arguments.length>2?arguments[2]:void 0,key=arguments.length>3?arguments[3]:void 0,drawingInf=this.drawingContext(),sourceInf=this.sourceInfo(),config=this.config(),strategy=props.strategy,payload=props.payload,selectionSet=props.selectionSet;plotDim=(plotDim=defaultValue(plotDim,this.getPlotPointsFromIdentifiers(payload)))&&plotDim[0];var pad=config.padding,showInPosition=payload.showInPosition,tooltipPos=payload.position,_config$strategy=config[strategy],projectFields=_config$strategy.fields,dataTransform=_config$strategy.dataTransform,strategyFn=this._strategies[strategy],dt=dataTransform(dataModel,projectFields,this),layoutContainer=drawingInf.parentContainer,parentContainerDimensions=drawingInf.parentContainerDimensions,layoutBoundBox=layoutContainer.getBoundingClientRect(),unitBoundBox=drawingInf.htmlContainer.getBoundingClientRect(),offsetLeft=unitBoundBox.left-layoutBoundBox.left,offsetTop=unitBoundBox.top-layoutBoundBox.top,tooltipInst=this._tooltips[key]=this._tooltips[key]||new tooltip_Tooltip(layoutContainer,drawingInf.svgContainer);Object.assign(sourceInf,{payload:payload,firebolt:this.firebolt,detailFields:[],timeDiffs:sourceInf.timeDiffs,valueParser:this.valueParser(),selectionSet:selectionSet,config:config[strategy]}),tooltipInst.context(sourceInf),tooltipInst.content(strategy,dt,{formatter:strategyFn,order:config[strategy].order,className:config[strategy].className}).config(this.config()).extent({x:0,y:0,width:parentContainerDimensions.width,height:parentContainerDimensions.height}).offset({x:offsetLeft+(config.offset.x||0),y:offsetTop+(config.offset.y||0)}),showInPosition?tooltipInst.position(tooltipPos.x+pad,tooltipPos.y+pad):plotDim?tooltipInst.positionRelativeTo({x:plotDim.x,y:plotDim.y,width:plotDim.width||0,height:plotDim.height||0},{orientation:config.orientation}):tooltipInst.hide()}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{order:1,dataTransform:function dataTransform(dm,fields){return fields?dm.project(fields,{saveChild:!1}):dm}},selectionSummary:{order:0,dataTransform:function dataTransform(dm){return dm}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}},{key:"target",value:function target(){return"all"}}]),Tooltip}();function fragmented_tooltip_typeof(obj){return(fragmented_tooltip_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function fragmented_tooltip_toConsumableArray(arr){return function fragmented_tooltip_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);idrawingInf.height:totalWidth>drawingInf.width)break;position&&boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(strategy,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return boxes.length&&function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})}),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"formalName",value:function formalName(){return FRAGMENTED_TOOLTIP}}]),FragmentedTooltip}();__webpack_require__(30);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]&&arguments[2]?common_utils_intersect:difference)(set.uids,selectedPointsId,[function(d){return d[0]},function(d){return d[0]}]);return function helper_objectSpread(target){for(var i=1;i0&&void 0!==arguments[0]?arguments[0]:[];return excludeSet instanceof Function?excludeSet(this.firebolt.getEntryExitSet):excludeSet.reduce(function(acc,behaviour){var selectedPointsIds=((_this2.firebolt.getEntryExitSet(behaviour)||{}).mergedEnter||{}).uids;return selectedPointsIds&&acc.push.apply(acc,plot_highlighter_toConsumableArray(selectedPointsIds)),acc},[])}},{key:"apply",value:function apply(selectionSet,payload){var options=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},currentStrategy=this._strategies[options.strategy||this._strategy],excludeSetIds=this.getExcludeSetIds(options.excludeSet);return currentStrategy({selectionSet:selectionSet,formattedSet:function plot_highlighter_objectSpread(target){for(var i=1;i3&&void 0!==arguments[3]?arguments[3]:[],propPayload=propConfig.payload,sourceIdentifiers=propConfig.sourceIdentifiers,excludeSelectedMeasures=propConfig.excludeSelectedMeasures,dataObj=selectionDataModel.getData({withUid:!0}),payload=Object.assign({},propPayload),data=dataObj.data,fieldsConfig=Object.assign({},selectionDataModel.getFieldsConfig(),function payload_generator_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},reserved_fields.ROW_ID,{index:Object.keys(selectionDataModel.getFieldsConfig()).length,def:{type:dist_datamodel.FieldType.DIMENSION}})),selectionSetFields=instance._selectionSet[propConfig.action]._fields;return sourceIdentifiers?function(){for(var _facetByFields=payload_generator_slicedToArray(facetByFields,2),_facetByFields$=_facetByFields[0],facetFields=void 0===_facetByFields$?[]:_facetByFields$,_facetByFields$2=_facetByFields[1],facetValues=void 0===_facetByFields$2?[]:_facetByFields$2,facetIndices=facetFields.reduce(function(acc,v,i){return acc[v]=i,acc},{}),identifierIdxMap=sourceIdentifiers.fields.reduce(function(acc,v,i){return acc[v.name]=i,acc},{}),identifiers=sourceIdentifiers.identifiers.slice(1,sourceIdentifiers.identifiers.length),sourceIdentifierFields=sourceIdentifiers.fields.filter(function(d){return d.name in fieldsConfig||d.name in facetIndices||d.name===reserved_fields.ROW_ID}),identifierMap=identifiers.reduce(function(acc,v){var key=sourceIdentifierFields.map(function(d){return v[identifierIdxMap[d.name]]}),measureNamesIdx=identifierIdxMap[reserved_fields.MEASURE_NAMES];return measureNamesIdx&&(!acc[key]&&(acc[key]=[]),acc[key].push([v[measureNamesIdx]])),acc},{}),dataArr=[],_loop=function _loop(i,len){var row=data[i],dims=[];selectionSetFields.forEach(function(field){if(fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION){var idx=fieldsConfig[field].index;dims.push(row[idx])}});var vals="".concat(sourceIdentifierFields.map(function(d){return d.name in fieldsConfig?row[fieldsConfig[d.name].index]:d.name in facetIndices?facetValues[facetIndices[d.name]]:null}).filter(function(d){return null!==d}));if(vals in identifierMap){var measures=identifierMap[vals],allMeasures=instance._metaData.dimensionsMap[dims];if(excludeSelectedMeasures){var fn=function fn(v){return"".concat(v)};difference(allMeasures,measures,[fn,fn]).forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))})}else measures.forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))})}else{var _measures=instance._metaData.dimensionsMap[dims];(_measures=_measures&&_measures.length?_measures:[[]]).forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))})}},i=0,len=data.length;i3&&void 0!==arguments[3]?arguments[3]:[];return payloadGenerator.__default(instance,selectionDataModel,Object.assign({},{excludeSelectedMeasures:!0},propConfig),facetByFields)}};function firebolt_helper_toConsumableArray(arr){return function firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},obj=function getUniqueKeys(data,dimensions,_ref2){var layers=_ref2.layers,uids=_ref2.uids,_ref2$keys=_ref2.keys,keys=void 0===_ref2$keys?{}:_ref2$keys,_ref2$dimensionsMap=_ref2.dimensionsMap,dimensionsMap=void 0===_ref2$dimensionsMap?{}:_ref2$dimensionsMap;return data.forEach(function(row,i){var key=dimensions.length?dimensions.map(function(d){return row[d.index]}):[uids[i]];layers.forEach(function(layer){var measureNames=Object.keys(layer.data().getFieldspace().getMeasure()),mKey="".concat([key].concat(firebolt_helper_toConsumableArray(measureNames)));keys[mKey]=defaultValue(keys[mKey],{}),keys[mKey]={dims:key,measureNames:measureNames,uid:uids[i]},dimensionsMap[key]=defaultValue(dimensionsMap[key],[]),dimensionsMap[key].push(measureNames)})}),{keys:keys,dimensionsMap:dimensionsMap}}(data,dimensions,{layers:layers,uids:uids,keys:maps.keys,dimensionsMap:maps.dimensionsMap});return{keys:obj.keys,dimensionsMap:obj.dimensionsMap}},helper_sanitizePayloadCriteria=function sanitizePayloadCriteria(data,propFields,_ref4){var dm=_ref4.dm,dimensionsMap=_ref4.dimensionsMap,dimsMapGetter=_ref4.dimsMapGetter,fieldsConfig=Object.assign({},dm.getFieldsConfig(),function firebolt_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},reserved_fields.ROW_ID,{index:Object.keys(dm.getFieldsConfig()).length,def:{name:reserved_fields.ROW_ID,type:dist_datamodel.FieldType.DIMENSION}}));if(null===data)return null;if(isSimpleObject(data))return Object.keys(data).reduce(function(acc,v){return(v in fieldsConfig||v===reserved_fields.MEASURE_NAMES)&&(acc[v]=data[v]),acc},{});for(var criteriaFields=data[0],fields=criteriaFields.length?criteriaFields.map(function(d,i){return{name:d,index:i}}):[],fieldIndexMap=fields.reduce(function(acc,v,i){return acc[v.name]=i,acc},{}),dataWithFacets=[propFields=propFields||fields.map(function(d){return d.name})],measureNameField=criteriaFields.find(function(field){return field===reserved_fields.MEASURE_NAMES}),propDims=fields.filter(function(d){return d.name in fieldsConfig}).map(function(d){return d.name}),dimsMap=dimsMapGetter(propDims,fieldsConfig),_loop=function _loop(i,len){var row=data[i],dimKey=propDims.map(function(field){return row[fieldIndexMap[field]]}),origRow=dimsMap[dimKey];origRow&&origRow.forEach(function(rowVal){var newRowVal=[];(propFields.forEach(function(field){if(field in fieldIndexMap){var idx=fieldIndexMap[field];newRowVal.push(row[idx])}else{var _idx=getObjProp(fieldsConfig[field],"index");void 0!==_idx&&newRowVal.push(rowVal[_idx])}}),measureNameField)?dataWithFacets.push(newRowVal):(dimensionsMap[newRowVal].length?dimensionsMap[newRowVal]:[[]]).forEach(function(measures){dataWithFacets.push([].concat(newRowVal,firebolt_helper_toConsumableArray(measures)))})})},i=1,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(transposeArray(Object.values(identifiers)))));for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}},BORDER_WIDTH={default:2,facet:1},cell_border_applier_handleBlankCell=function handleBlankCell(data){data.config().externalClassname.push("".concat(NONE,"-").concat(constants_LEFT)),data.config().externalClassname.push("".concat(NONE,"-").concat(constants_RIGHT))},cell_border_applier_sanitiseHeaderMatrix=function sanitiseHeaderMatrix(matrices,header){if(header)for(var i=0;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},getCellKey=function getCellKey(rowId,columnId){return"cell-".concat(rowId,"-").concat(columnId)},group_utils_extractUnitConfig=function extractUnitConfig(config){var unitConfig={};return[INTERACTION,GRID_LINES,GRID_BANDS].forEach(function(attr){void 0!==config[attr]&&(unitConfig[attr]=config[attr])}),unitConfig},hasOneField=function hasOneField(fields){return Object.keys(fields).some(function(d){return fields[d].length>0})},getHeaderText=function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i0?fields[0].map(function(cell,i){return new TextCell({type:HEADER,className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(getHeaderText(fieldHeaders,i,fields[0].length)).config({show:cell.config().show})}):[];return cell_border_applier_sanitiseHeaderMatrix(headers,!0),headers},group_utils_findInGroup=function findInGroup(variable,allFields){var channel=null;return[enums_constants_COLOR,enums_constants_SIZE,enums_constants_SHAPE].forEach(function(e){group_utils_this.store.get(e)&&variable===group_utils_this.store.get(e)[0]&&(channel=e)}),channel?{channel:channel}:([ROW,COL].forEach(function(facetType){allFields["".concat(facetType,"Facets")].forEach(function(e){e.toString()===variable&&(channel={channel:FACET,type:facetType===COL?COLUMN:ROW})})}),channel||([ROW,COL].forEach(function(projType){allFields["".concat(projType,"Projections")].forEach(function(e){e.forEach(function(m){m.toString()===variable&&(channel=projType===COL?X:Y)})})}),channel?{channel:channel}:null))},group_utils_getAxisType=function getAxisType(fieldsConfig,field){var fieldType=enums_constants_ORDINAL;return field&&fieldsConfig[field].def.type!==DIMENSION&&(fieldType=enums_constants_LINEAR),fieldType},retriveDomainFromData=function retriveDomainFromData(datamodel,fieldName){return datamodel.getFieldspace().fields.find(function(d){return d.name()===fieldName.toString()}).domain()},mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}},group_utils_getEncoder=function getEncoder(layers){var encoder=new cartesian_encoder_CartesianEncoder;return layers.length&&(encoder=layers.some(function(layerConf){return function hasPolarEncodings(layerConf){return layerConf.mark===ARC||[enums_constants_RADIUS,enums_constants_ANGLE].some(function(field){return getObjProp(layerConf.encoding,field)})}(layerConf)})?new polar_encoder_PolarEncoder:encoder),encoder},group_utils_getHeaderAxisFrom=function getHeaderAxisFrom(type,fields,userAxisFromConfig){var axisFrom=userAxisFromConfig[type],headerFrom="",options=type===ROW?[constants_LEFT,constants_RIGHT]:[enums_constants_BOTTOM,enums_constants_TOP],_fields=group_utils_slicedToArray(fields,2),firstField=_fields[0],secondField=_fields[1],firstFieldType=function firstFieldType(i){return firstField.length?firstField[i].type():null},secondFieldType=function secondFieldType(i){return secondField.length?secondField[i].type():null};return firstFieldType(firstField.length-1)===DIMENSION&&secondFieldType(0)===DIMENSION?(headerFrom=axisFrom?options[1-options.indexOf(axisFrom)]:options[1],axisFrom=type===COLUMN&&firstField[firstField.length-1].toString()===secondField[0].toString()?enums_constants_TOP:axisFrom||options[0]):secondFieldType(secondField.length-1)===DIMENSION?(headerFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM,axisFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM):(headerFrom=type===ROW?constants_LEFT:enums_constants_TOP,axisFrom=type===ROW?constants_LEFT:enums_constants_TOP),firstFieldType(firstField.length-1)===MEASURE&&secondFieldType(0)===MEASURE?axisFrom=type===ROW?constants_LEFT:enums_constants_TOP:secondFieldType(0)===MEASURE?axisFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM:firstFieldType(firstField.length-1)===MEASURE&&(axisFrom=type===ROW?constants_LEFT:enums_constants_TOP),[headerFrom,axisFrom]},setFacetsAndProjections=function setFacetsAndProjections(context,fieldInfo,encoder){var fields=fieldInfo.fields,type=fieldInfo.type,_encoder$simpleEncode=encoder.simpleEncoder.getFacetsAndProjections(fields,type),facets=_encoder$simpleEncode.facets,projections=_encoder$simpleEncode.projections;return context.facets(group_utils_defineProperty({},"".concat(type,"Facets"),facets)),context.projections(group_utils_defineProperty({},"".concat(type,"Projections"),projections)),{facets:facets,projections:projections,fields:fields}},getBorders=function getBorders(matrices,encoder){var showRowBorders={top:!1,bottom:!1},showColBorders={left:!1,right:!1},showValueBorders={top:!1,bottom:!1,left:!1,right:!1},rows=matrices.rows,columns=matrices.columns,valueMatrix=matrices.values,_rows=group_utils_slicedToArray(rows,2),leftRows=_rows[0],rightRows=_rows[1],_columns=group_utils_slicedToArray(columns,2),topColumns=_columns[0],bottomColumns=_columns[1],_encoder$fieldInfo=encoder.fieldInfo(),rowDimensions=_encoder$fieldInfo.rowDimensions,columnDimensions=_encoder$fieldInfo.columnDimensions,rowTemporalFields=_encoder$fieldInfo.rowTemporalFields,columnTemporalFields=_encoder$fieldInfo.columnTemporalFields,columnMeasures=_encoder$fieldInfo.columnMeasures,rowMeasures=_encoder$fieldInfo.rowMeasures,allDimensionLength=rowDimensions.length+columnDimensions.length,allMeasuresLength=rowMeasures.length+columnMeasures.length,allTemporalFieldsLength=rowTemporalFields.length+columnTemporalFields.length;if(encoder.constructor.type()===group_utils_POLAR){if(!allDimensionLength)return{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}}else if(!allMeasuresLength&&!allTemporalFieldsLength&&allDimensionLength<=2)return{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders};return showRowBorders=function getRowBorders(left,right){var borders={top:!1,bottom:!1};return(left.length>1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=[enums_constants_TOP,enums_constants_BOTTOM];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},getFieldsFromSuppliedLayers=function getFieldsFromSuppliedLayers(suppliedLayerConfig){var _ref3,encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}}),fields=(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return"object"===group_utils_typeof(d)?d.field:d})})));return group_utils_toConsumableArray(new Set(fields.filter(function(d){return d})))},group_utils_extractFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],facetNames=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet);facetNames.push(name);var facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([facetNames].concat(group_utils_toConsumableArray(keys)),schema).getData({sort:sortInfo}).data},group_utils_removeExitCells=function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)},encoder_props_PROPS={layers:{},data:{},globalConfig:{}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(COLUMN,fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}},{key:"getProjectionFields",value:function getProjectionFields(layers){return getFieldsFromSuppliedLayers(layers)}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){return hasOneField(fields)}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis};function matrix_model_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function matrix_model_objectSpread(target){for(var i=1;i1){var facetsUserConfig=config.facetsUserConfig,border=config.border,isBorderPresent=facetsUserConfig.isBorderPresent,isGridLinePresent=facetsUserConfig.isGridLinePresent,gridLinesShowLength=Object.keys(isGridLinePresent).length,borderWidth=border.width,gridLines={};isBorderPresent||(borderWidth=BORDER_WIDTH[FACET]),gridLinesShowLength<=0&&(gridLines={x:{show:!1}}),conf={border:{width:borderWidth},gridLines:gridLines}}return conf}(facetInfo,projectionInfo,globalConfig);globalConfig=mergeRecursive(globalConfig,defaultConfig);var generalContext={matrix:matrix,geomCellCreator:geomCellCreator,projectionInfo:projectionInfo,splitModelsHashMap:splitModelsHashMap,colKeys:colKeys};if(rowKeys.length)rowKeys.forEach(function(rowKeyObj){var rowIndex=function createRowDataModels(rowContext,fieldInfo,sourceDM){var currentColumnIndex=0,rowIndexForCurrentKey=0,colKeys=rowContext.colKeys,rowKeyObj=rowContext.rowKeyObj,currentRowIndex=rowContext.currentRowIndex,newRowIndex=currentRowIndex,colContext=matrix_model_objectSpread({},rowContext,{rowKeyArr:rowKeyObj.keyArr,rowKey:rowKeyObj.joinedKey,newRowIndex:newRowIndex});if(rowIndexForCurrentKey=currentRowIndex,colKeys.length)colKeys.forEach(function(colKeyObj){colContext.colKeyObj=colKeyObj,colContext.currentColumnIndex=currentColumnIndex;var _createColumnDataMode=matrix_model_createColumnDataModels(colContext,fieldInfo,sourceDM),columnIndex=_createColumnDataMode.columnIndex,rowIndex=_createColumnDataMode.rowIndex;currentColumnIndex=columnIndex,rowIndexForCurrentKey=rowIndex});else{colContext.colKeyObj={keyArr:[],joinedKey:""},colContext.currentColumnIndex=currentColumnIndex;var _createColumnDataMode2=matrix_model_createColumnDataModels(colContext,fieldInfo,sourceDM),columnIndex=_createColumnDataMode2.columnIndex,rowIndex=_createColumnDataMode2.rowIndex;currentColumnIndex=columnIndex,rowIndexForCurrentKey=rowIndex}return{rowIndex:++rowIndexForCurrentKey}}(matrix_model_objectSpread({},generalContext,{rowKeyObj:rowKeyObj,currentRowIndex:currentRowIndex}),fieldInfo,dataModel).rowIndex;currentRowIndex=rowIndex});else if(colKeys.length){var currentColumnIndex=0,newRowIndex=currentRowIndex;colKeys.forEach(function(colKeyObj){var colContext=matrix_model_objectSpread({},generalContext,{rowKeyArr:[],rowKey:"",colKeyObj:colKeyObj,newRowIndex:newRowIndex,currentColumnIndex:currentColumnIndex}),_createColumnDataMode3=matrix_model_createColumnDataModels(colContext,fieldInfo,dataModel),columnIndex=_createColumnDataMode3.columnIndex,rowIndex=_createColumnDataMode3.rowIndex;currentRowIndex=rowIndex,currentColumnIndex=columnIndex})}else{var _currentColumnIndex=0,colContext=matrix_model_objectSpread({},generalContext,{rowKeyArr:[],rowKey:"",colKeyObj:{keyArr:[],joinedKey:""},newRowIndex:currentRowIndex,currentColumnIndex:_currentColumnIndex}),_createColumnDataMode4=matrix_model_createColumnDataModels(colContext,fieldInfo,dataModel),columnIndex=_createColumnDataMode4.columnIndex,rowIndex=_createColumnDataMode4.rowIndex;currentRowIndex=rowIndex,_currentColumnIndex=columnIndex}var formattedColKeys=formatKeys(colKeys.map(function(e){return e.keyArr}),colFacets.map(function(facetField){return facetField.rawFormat()}));return{matrix:matrix,rowKeys:formatKeys(rowKeys.map(function(e){return e.keyArr}),rowFacets.map(function(facetField){return facetField.rawFormat()})),columnKeys:formattedColKeys.length>0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;resolvedData instanceof datamodel_default.a&&resolvedData.dispose();var fields=getFieldsFromSuppliedLayers(suppliedLayers).filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),allFields=group_utils_extractFields(facetsAndProjections,fields);if(groupedModel=dataModel.project(allFields),resolver.data(groupedModel),!groupBy.disabled){var newFieldsConfig=groupedModel.getFieldsConfig(),dimensions=allFields.filter(function(field){return getObjProp(newFieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return fieldConfig[field].def.subtype===constants_TEMPORAL?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel),resolver.transformedData(groupedModel),groupedModel},cell_creator_computeMatrices=function computeMatrices(resolverConfig){var datamodel=resolverConfig.datamodel,encoders=resolverConfig.encoders,resolver=resolverConfig.resolver,globalConfig=resolverConfig.globalConfig,selection=resolverConfig.selection,transform=resolverConfig.transform,componentRegistry=resolverConfig.componentRegistry,groupBy=resolverConfig.groupBy,labelManager=resolverConfig.labelManager,fieldMap=resolverConfig.fieldMap,layerConfig=resolverConfig.layerConfig,registry=resolverConfig.registry,normalizedRows=resolverConfig.normalizedRows,normalizedColumns=resolverConfig.normalizedColumns,otherEncodings=resolverConfig.otherEncodings,facetsAndProjections=resolverConfig.facetsAndProjections,simpleEncoder=resolverConfig.simpleEncoder,config=resolverConfig.config,rowFacets=facetsAndProjections.rowFacets,colFacets=facetsAndProjections.colFacets,colProjections=facetsAndProjections.colProjections,isProjection=facetsAndProjections.rowProjections.length>0||colProjections.length>0,isFacet=rowFacets.length>0||colFacets.length>0;isFacet&&(globalConfig.isFacet=!0);var matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.cells.GeomCell),AxisCell:resolver.getCellDef(registry.cells.AxisCell),BlankCell:resolver.getCellDef(registry.cells.BlankCell),TextCell:resolver.getCellDef(registry.cells.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver);simpleEncoder.data(groupedModel);var cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=matrix_model_getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);group_utils_removeExitCells(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=mutateAxesFromMap(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;if(resolver.rowMatrix(rows),resolver.columnMatrix(columns),isFacet||isProjection){var arr=function sanitiseBorderMatrix(matrices,blankCell){var leftMatrix=matrices.leftMatrix,rightMatrix=matrices.rightMatrix,topMatrix=matrices.topMatrix,bottomMatrix=matrices.bottomMatrix,bottomBorderObj={};return rightMatrix.length&&(bottomBorderObj=cell_border_applier_sanitiseFacetValues(rightMatrix,"".concat(constants_RIGHT),blankCell)),leftMatrix.length&&(bottomBorderObj=cell_border_applier_sanitiseFacetValues(leftMatrix,"".concat(constants_LEFT),blankCell)),topMatrix.length&&cell_border_applier_sanitiseHeaderMatrix(topMatrix),bottomMatrix.length&&cell_border_applier_sanitiseHeaderMatrix(bottomMatrix),bottomBorderObj}({leftMatrix:rows[0],rightMatrix:rows[1],topMatrix:columns[0],bottomMatrix:columns[1]},registry.cells.BlankCell);valueMatrixInfo.matrix=function sanitiseGeomMatrix(matrices){for(var arr=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=0;i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:INITIALIZED,formalName:FACET_HEADERS}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"updateVisualUnit",value:function updateVisualUnit(retinalConfig){var retinalAxes=this.getRetinalAxes(),lifeCycleManager=this.dependencies().lifeCycleManager;lifeCycleManager.notify({client:this.axes(),action:INITIALIZED,formalName:AXIS}),lifeCycleManager.notify({client:this.units(),action:BEFORE_UPDATE,formalName:UNIT});var units=[],matrixLayers=this.matrixLayers(),props=["".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"),"".concat(namespace_namespaceObject.UNIT_GLOBAL_NAMESPACE,".domain")],store=this.store();return store.lockCommits(props),store.lockModel(),this.forEach(VALUE_MATRIX,function(i,j,el){el.axes(Object.assign(el.axes(),retinalAxes)),el.source()&&el.source().retinalFields(retinalConfig),el.layerDef(matrixLayers[i][j]),el.updateModel(),units.push(el.source())}),store.unlockModel().unlockCommits([props[0]]).unlockCommits([props[1]]),lifeCycleManager.notify({client:units,action:UPDATED,formalName:UNIT}),this}},{key:"getMatrices",value:function getMatrices(resolverConfig){return this._placeholderInfo=cell_creator_computeMatrices(resolverConfig),this._placeholderInfo}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}],[{key:"getterSetters",value:function getterSetters(){return RESOLVER_PROPS}}]),MatrixResolver}();function src_data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_data_type_scale_map_dataTypeScaleMap=(src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap={},dist_datamodel.FieldType.DIMENSION,scale_type_namespaceObject.BAND),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.CATEGORICAL,scale_type_namespaceObject.BAND),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.TEMPORAL,scale_type_namespaceObject.TIME),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.FieldType.MEASURE,scale_type_namespaceObject.LINEAR),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.MeasureSubtype.CONTINUOUS,scale_type_namespaceObject.LINEAR),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.BINNED,scale_type_namespaceObject.BAND),data_type_scale_map_dataTypeScaleMap);function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratio1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis},getIndex=function getIndex(arr,val){for(var i=0,arrIndex=-1;-1===arrIndex&&i1?axesCreators.position=BOTH:axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.dataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=getAdjustedDomain(max,min);else if(typeOfAxis===scale_type_namespaceObject.BAND){key=axisType?"".concat(idx,"00"):"0".concat(idx,"0");var currentFieldName=fieldsObj[axisType][key].oneVar(),sortingOrder=getSortingConfig(context,currentFieldName,axes[0].config);sortingOrder&&domains[axisType][key]instanceof Array&&domains[axisType][key].sort(function(a,b){return sortCategoricalField(sortingOrder,a,b)})}axes.forEach(function(axis,index){key=axisType?"".concat(idx,"0").concat(index):"0".concat(idx).concat(index),(domain=adjustedDomain[index]||domains[axisType][key])&&axis.domain(domain);var type=axisType?"y":"x";store.commit("".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.").concat(type),domain,"".concat(idx).concat(index))})})}),store.unlockModel()}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(fields,type){for(var facets=[],projections=[],counter=0,primaryFacets=[],secondaryFacets=[],primaryFields=fields[0],secondaryFields=fields[1],primaryLen=primaryFields.length,secondaryLen=secondaryFields.length,axisFrom=this.axisFrom(),i=0;icounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),colFieldType=colField.subtype(),mark=encoder_helper_getDefaultMark(colFieldType,rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=getLayerConfFromFields(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){var colProjections=fields.colProjections,rowProjections=fields.rowProjections,colFields=cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"hasMandatoryFields",this).call(this,{colProjections:colProjections}),rowFields=cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"hasMandatoryFields",this).call(this,{rowProjections:rowProjections});return colFields&&rowFields}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){var optionalProjections=fields.optionalProjections;return polar_encoder_get(polar_encoder_getPrototypeOf(PolarEncoder.prototype),"hasMandatoryFields",this).call(this,{optionalProjections:optionalProjections})}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}();__webpack_require__(35);function legend_marker_typeof(obj){return(legend_marker_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_marker_defineProperties(target,props){for(var i=0;i0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{onset:function onset(context,value){return context.firebolt().attachPropagationListener(value)}},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}};var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+iconSpaces[i].width+2*effPadding):(labelSpaces[i].width=iconSpaces[i].width,itemSpaces[i].width=iconSpaces[i].width,labelSpaces[i].width=iconSpaces[i].width),totalWidth+=itemSpaces[i].width;else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelWidth+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,maxWidth=_this$measurement2.maxWidth,width=legend_helper_calculateTitleWidth(this.measurement(),this._labelManager.getOriSize(this._title.text).width,this.config()),_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var orientation=config.item.text.orientation,textAlign="left",alignment=measurement.alignment,maxWidth=measurement.maxWidth,width=measurement.width,height=measurement.height,border=measurement.border,padding=measurement.padding;"top"!==orientation&&"bottom"!==orientation&&alignment!==HORIZONTAL||(textAlign="center");var titleWidth=Math.min(maxWidth,width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(height,"px")).style("border-bottom","".concat(border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(maxWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(padding,"px")).text(title.text).style("text-align",textAlign).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor,alignment:POSITION_ALIGNMENT_MAP[this.config().position]},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),border=_this$measurement3.border,marginHorizontal=_this$measurement3.marginHorizontal,maxHeight=_this$measurement3.maxHeight,height=_this$measurement3.height,width=_this$measurement3.width,maxWidth=_this$measurement3.maxWidth,margin=this.measurement().margin,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom"),margin=marginHorizontal;break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top"),margin=marginHorizontal;break;default:marginPosition="margin-".concat("left")}legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left");var widthBox=legend_helper_calculateTitleWidth(this.measurement(),this._labelManager.getOriSize(this._title.text).width,this.config()),titleWidth=Math.min(maxWidth,widthBox);return width1&&void 0!==arguments[1]?arguments[1]:[],data=this.data();return fields.length?(id=Number(id),[data.find(function(d){return id===d.id}).rawVal]):[]}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(_ref2){var fields=_ref2.fields,entrySet=_ref2.entrySet,idRangeMap=this.data().reduce(function(acc,v){return acc[v.id]=v,acc},{});return fields.reduce(function(acc,v){return acc[v]=entrySet.reduce(function(ranges,id){return id in idRangeMap&&ranges.push(idRangeMap[id].range),ranges},[]),acc},{})}},{key:"setParentInfo",value:function setParentInfo(info){this._canvasMount=info.canvasRoot}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},HORIZONTAL,{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var itemSpaces=measurement.itemSpaces,width=measurement.width,buffer=config.buffer;return{row:{width:"".concat(width+itemSpaces.length*buffer.horizontal||1,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width+buffer.horizontal,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.style("width","".concat(gradWidth,"px")),legendBody.style("height","".concat(gradHeight,"px")),legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),icon).attr("transform","translate(".concat(transalate," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color).attr("stroke",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](ele)),gradient_legend_defineProperty(_ref,"value",+value.toFixed(1)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data,context._id),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," ").concat(LEGEND_MARKER_PROPS_size+4,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),renderer_utils_applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(".concat(LEGEND_MARKER_PROPS_size+4," ").concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),renderer_utils_applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),renderer_utils_applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height+LEGEND_MARKER_PROPS_size+4,"px"),width:"".concat(gradientDimensions.width+LEGEND_MARKER_PROPS_size+4,"px")}),renderer_utils_applyStyle(legendRect,{fill:"url(#linear-gradient-".concat(context._id,")")}),legendGradSvg.attr("height",gradientDimensions.height+LEGEND_MARKER_PROPS_size+4),legendGradSvg.attr("width",gradientDimensions.width+LEGEND_MARKER_PROPS_size+4),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.mapSideEffects(gradient_legend_defineProperty({},"highlight",["marker"])),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(_ref2){var fields=_ref2.fields,criteria=_ref2.criteria;return fields.reduce(function(range,v){return range[v]=criteria[v],range},{})}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainLeg.push(domain[1]),domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,range,value=null;if(i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}},sideEffects:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container"),baseFontLimit:16,upperFontLimit:24,baseSizeLimit:100,upperSizeLimit:300,fractionImage:.8,fractionChild:.7};function local_options_typeof(obj){return(local_options_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function local_options_slicedToArray(arr,i){return function local_options_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function local_options_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function local_options_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var canvas_local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref){var _ref2=local_options_slicedToArray(_ref,2),arg1=_ref2[0],arg2=_ref2[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref3){var _ref4=local_options_slicedToArray(_ref3,2),title=_ref4[0],titleConfig=_ref4[1],t=title;"string"!=typeof title&&title||(t=function t(){return title});var defConfig=mergeRecursive({},TITLE_CONFIG);return[t,mergeRecursive(defConfig,titleConfig)]}}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref5){var _ref6=local_options_slicedToArray(_ref5,2),arg1=_ref6[0],arg2=_ref6[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref7){var _ref8=local_options_slicedToArray(_ref7,2),subtitle=_ref8[0],subtitleConfig=_ref8[1],sub=subtitle;"string"!=typeof subtitle&&subtitle||(sub=function sub(){return subtitle});var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return[sub,mergeRecursive(defConfig,subtitleConfig)]}}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,border_helper_specificBorderApplier=function specificBorderApplier(params){var borderTypes=params.borderTypes,showBorders=params.showBorders,cells=params.cells,borderInfo=params.borderInfo,name=params.name,isFacet=params.isFacet,color=borderInfo.color,style=borderInfo.style,width=borderInfo.width;borderTypes.forEach(function(borderType){!function applySpecificBorder(params){var type=params.type,borderWidth=params.borderWidth,borderStyle=params.borderStyle,cells=params.cells,isFacet=params.isFacet,color=params.color;isFacet?(cells.style("border-".concat(type,"-width"),"".concat(borderWidth,"px")),cells.style("border-".concat(type,"-style"),"".concat(borderStyle))):cells.style("border-".concat(type),"".concat(borderWidth,"px ").concat(borderStyle," ").concat(color))}({cells:cells,color:showBorders[borderType]?color:"rgba(0,0,0,0)",type:borderType,borderWidth:width,borderStyle:style,name:name,isFacet:isFacet})})},border_helper_applyBorders=function applyBorders(params){var cells=params.cells,border=params.border,row=params.row,column=params.column,isFacet=params.isFacet,showHeaders=params.showHeaders,name="".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column]),borderApplierFn=function borderApplier(cells,borderInfo,name,isFacet){var _ref2,showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return border_helper_defineProperty(_ref2={},"row",function(){return border_helper_specificBorderApplier({borderTypes:["top","bottom"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"column",function(){return border_helper_specificBorderApplier({borderTypes:["left","right"],showBorders:showColBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"center",function(){return border_helper_specificBorderApplier({borderTypes:["left","right","top","bottom"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"left",function(){return border_helper_specificBorderApplier({borderTypes:["left"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"right",function(){return border_helper_specificBorderApplier({borderTypes:["right"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"".concat("center").concat("left"),function _(){return border_helper_specificBorderApplier({borderTypes:["left","top","bottom"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"".concat("center").concat("right"),function _(){return border_helper_specificBorderApplier({borderTypes:["right","top","bottom"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),_ref2}(cells,border,name,isFacet),borderMapVal=function borderMap(isFacet,showHeaders){var _ref;return border_helper_defineProperty(_ref={},"".concat("top","-").concat("left"),isFacet&&showHeaders?"left":null),border_helper_defineProperty(_ref,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_ref,"".concat("top","-").concat("right"),isFacet&&showHeaders?"right":null),border_helper_defineProperty(_ref,"".concat("center","-").concat("left"),isFacet?"".concat("center").concat("left"):"row"),border_helper_defineProperty(_ref,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_ref,"".concat("center","-").concat("right"),isFacet?"".concat("center").concat("right"):"row"),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("right"),null),_ref}(isFacet,showHeaders)[name];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"formalName",value:function formalName(){return"SimpleCell"}},{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"padding",(enums_defaults_defineProperty(_CONSTANTS$PADDING={},visual_cell_src_enums_constants_LEFT,8),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_RIGHT,8),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_TOP,10),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$PADDING)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"headerPadding",(enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD={},visual_cell_src_enums_constants_LEFT,8),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_RIGHT,5),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_TOP,2),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_BOTTOM,5),_CONSTANTS$HEADER_PAD)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"titlePadding",(enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$TITLE_PADD)),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidthcurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")}).each(function(d){d.legend.mount(this)})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}},{key:"setComponentInfo",value:function setComponentInfo(params){var rootNode=params.rootNode;this.components.forEach(function(legendInfo){legendInfo.legend.setParentInfo({canvasRoot:rootNode})})}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(37),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();__webpack_require__(38);function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)MESSAGE_CONFIG.baseSizeLimit?MESSAGE_CONFIG.fractionChild*height:0,message=config.message;renderer_utils_applyStyle(node,{width:"".concat(width,"px"),height:"".concat(height,"px")});var childNode=makeElement(node,"div",[1],"".concat(className,"-child")),imageNode=makeElement(childNode,"div",[1],"".concat(className,"-child-img")),messageNode=makeElement(childNode,"div",[1],"".concat(className,"-child-message"));renderer_utils_applyStyle(childNode,{width:width,height:"".concat(childHeight,"px")}),renderer_utils_applyStyle(imageNode,{width:width,height:"".concat(childHeight*MESSAGE_CONFIG.fractionImage,"px")}),imageNode.html('\n\x3c!-- Generator: Sketch 60.1 (88133) - https://sketch.com --\x3e\n\nGroup 23\n Created with Sketch.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ');var textElement=makeElement(messageNode,"text",[1]);renderer_utils_applyStyle(messageNode,{"font-size":"".concat(function formatFontSize(width,height){var baseFontLimit=MESSAGE_CONFIG.baseFontLimit,upperFontLimit=MESSAGE_CONFIG.upperFontLimit,baseSizeLimit=MESSAGE_CONFIG.baseSizeLimit,upperSizeLimit=MESSAGE_CONFIG.upperSizeLimit,fontSize=upperFontLimit,dim=widthbaseSizeLimit&&dim0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function canvas_firebolt_helper_toConsumableArray(arr){return function canvas_firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1||rowProj.length>1))},helper_dispatchBehaviours=function dispatchBehaviours(firebolt,_ref){var payload=_ref.payload,unit=_ref.unit,behaviours=_ref.behaviours,_firebolt$context$con2=firebolt.context.config().interaction.behaviours,behaviourConfs=void 0===_firebolt$context$con2?{}:_firebolt$context$con2,unitFirebolt=unit.firebolt();behaviours.forEach(function(action){var mode=behaviourConfs[action],targetFirebolt=unitFirebolt;"common"===mode&&(targetFirebolt=firebolt);var actions=targetFirebolt._actions.behavioural;payload.criteria=helper_addFacetDataAndMeasureNames(payload.criteria,unit.facetFieldsMap(),unit.layers().map(function(layer){return Object.keys(layer.data().getFieldspace().getMeasure())})),targetFirebolt.dispatchBehaviour(action,payload,{propagate:!1,applySideEffect:!1});var identifiers=actions[action].propagationIdentifiers();firebolt.propagate(action,payload,identifiers,{sideEffects:getSideEffects(action,targetFirebolt._behaviourEffectMap),sourceUnitId:unit.id(),sourceId:targetFirebolt.id(),propagationDataSource:targetFirebolt.getPropagationSource()})})};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{};!function propagateValues(instance,action){var config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,identifiers=config.identifiers,sourceUnitId=config.sourceUnitId,sourceCanvasId=config.sourceCanvasId,dataModel=config.propagationDataSource,sideEfffects=instance._sideEffectDefinitions,behaviourEffectMap=instance._behaviourEffectMap,propagationBehaviour=instance._propagationBehaviourMap[action]||action;payload.sourceUnit=sourceUnitId,payload.action=action,payload.sourceCanvas=sourceCanvasId;var groupId=sourceCanvasId,sourceBehaviour=instance._actions.behavioural[action],isMutableAction=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:identifiers,isMutableAction:isMutableAction,groupId:groupId,sourceId:config.sourceId,filterFn:function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||!!effects&&effects.some(function(d){return sideEfffects[d.name||d].mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.sourceCanvas()}};if(dataModel.propagate(identifiers,propConfig,!0),action!==propagationBehaviour){var behaviourInstance=instance._actions.behavioural[propagationBehaviour];isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),dataModel.propagate(identifiers,Object.assign({},propConfig,{isMutableAction:isMutableAction,applyOnSource:!1,action:propagationBehaviour,sourceId:isMutableAction?groupId:sourceUnitId,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.sourceCanvas()}}),!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}})}}(this,behaviour,Object.assign({payload:payload,identifiers:identifiers,propagationFields:this._propagationFields,sourceId:this.id(),sourceCanvasId:this.id(),propagationDataSource:this.data()},auxConfig))}},{key:"getPropagationSource",value:function getPropagationSource(){return this.data()}},{key:"sourceCanvas",value:function sourceCanvas(){return this.context.alias()}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects,payload,propagationInf){var _this5=this;if(payload.sideEffects)return[{effects:payload.sideEffects,behaviours:[payload.action]}];var mode=this.context.config().interaction.tooltip.mode;return propagationInf.propPayload=propagationInf.propPayload||payload,sideEffects.forEach(function(d){var mappedEffects=d.effects;mappedEffects=mappedEffects.filter(function(se){return(se.name!==side_effects_TOOLTIP||"fragmented"!==mode)&&isSideEffectEnabled(_this5,{se:se,propagationInf:propagationInf})}),d.effects=mappedEffects}),sideEffects}}],[{key:"defaultInteractionPolicy",value:function defaultInteractionPolicy(){return function(){}}},{key:"defaultCrossInteractionPolicy",value:function defaultCrossInteractionPolicy(){return _defaultCrossInteractionPolicy}}]),GroupFireBolt}(),APP_INITIAL_STATE={app:{group:{},units:{},layers:{},canvas:{}},local:{canvas:{},group:{},units:{},layers:{}}};function canvas_typeof(obj){return(canvas_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function canvas_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function canvas_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:COMPONENTS,reg=Object.assign({},components);return{register:function register(cls){var key=cls.formalName();return reg[key]=cls,componentRegistry},get:function get(){return reg}}}(COMPONENTS),cells:cell_registry(),layers:layer_registry(),interactions:registry_registry};__webpack_require__(39);function muze_slicedToArray(arr,i){return function muze_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function muze_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function muze_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var muze_transactor=store_transactor,Smartlabel=SmartlabelManager_default.a,muze_enableChainedTransaction=enableChainedTransaction,muze_LifeCycleManager=lifecycle_manager,DataModel=datamodel_default.a,muze_Store=store_Store,globalCache={},defaultRegistry=default_registry_registry.components,overrideRegistryDefinitions=function overrideRegistryDefinitions(overrideRegistry,registry){overrideRegistry.forEach(function(def){registry.register(def)})},muze_muze=function muze(){var _transactor2=muze_slicedToArray(muze_transactor({},src_options),2),env=_transactor2[0],globalStore=_transactor2[1],components=Object.assign({},default_registry_registry.components.get()),componentSubRegistryDef=Object.assign({},SUBREGISTRIES),componentSubRegistry={};for(var prop in componentSubRegistryDef)componentSubRegistry[prop]=componentSubRegistryDef[prop](default_registry_registry[prop].get());return env.canvas=function(){var settings=globalStore.serialize(),canvas=canvas_Canvas.withSettings(settings,{components:components,componentSubRegistry:componentSubRegistry,interactions:default_registry_registry.interactions},env.globalDependencies());return muze_enableChainedTransaction(globalStore,canvas,Object.keys(settings)),canvas},env.globalDependencies=function(){return globalCache.smartlabel||(globalCache.smartlabel=new Smartlabel(1,"body")),{smartlabel:globalCache.smartlabel,lifeCycleManager:new muze_LifeCycleManager}},env.settings=function(){return globalStore.serialize()},env.registry=function(){for(var _len=arguments.length,overrideRegistry=new Array(_len),_key=0;_key<_len;_key++)overrideRegistry[_key]=arguments[_key];return overrideRegistry.length?(overrideRegistry.forEach(function(def){var prop=def.formalName();prop in defaultRegistry&&(components[prop]=def)}),env):components},env.cellRegistry=function(){for(var cellRegistry=componentSubRegistry.cellRegistry,_len2=arguments.length,overrideRegistry=new Array(_len2),_key2=0;_key2<_len2;_key2++)overrideRegistry[_key2]=arguments[_key2];return overrideRegistry.length?(overrideRegistryDefinitions(overrideRegistry,cellRegistry),env):cellRegistry.get()},env.layerRegistry=function(){for(var layerRegistry=componentSubRegistry.layerRegistry,_len3=arguments.length,overrideRegistry=new Array(_len3),_key3=0;_key3<_len3;_key3++)overrideRegistry[_key3]=arguments[_key3];return overrideRegistry.length?(overrideRegistryDefinitions(overrideRegistry,layerRegistry),env):layerRegistry.get()},env};muze_muze.registry=default_registry_registry,muze_muze.Components={VisualLayer:{layers:{BaseLayer:base_layer_BaseLayer,LineLayer:line_LineLayer,TextLayer:TextLayer,TickLayer:TickLayer,PointLayer:point_PointLayer,SimpleLayer:simple_layer_SimpleLayer,AreaLayer:area_AreaLayer,ArcLayer:ArcLayer},helpers:helpers,enums:src_enums_namespaceObject,layerMixins:layerMixins},VisualUnit:{constructor:visual_unit_VisualUnit,helpers:visual_unit_src_helper_namespaceObject,enums:visual_unit_src_enums_namespaceObject,UnitFireBolt:firebolt_UnitFireBolt},VisualGroup:{constructor:visual_group,Encoders:encoder_namespaceObject,encoderHelpers:encoder_helper_namespaceObject,groupUtils:group_utils_namespaceObject,enums:visual_group_src_enums_constants_namespaceObject},Canvas:{constructor:canvas_Canvas},Firebolt:{constructor:firebolt_Firebolt}};var SideEffects={sideEffects:src_side_effects_namespaceObject,standards:{SurrogateSideEffect:SurrogateSideEffect,SpawnableSideEffect:spawnable_SpawnableSideEffect,GenericSideEffect:generic}},Behaviours={behaviouralActions:behavioural_namespaceObject,standards:{GenericBehaviour:generic_GenericBehaviour,PersistentBehaviour:persistent_PersistentBehaviour,VolatileBehaviour:volatile_VolatileBehaviour}};muze_muze.DataModel=DataModel,muze_muze.version=muze_package.version,muze_muze.SideEffects=SideEffects,muze_muze.ActionModel=actionModel,muze_muze.layerFactory=src_layer_factory,muze_muze.Operators=operators_namespaceObject,muze_muze.Behaviours=Behaviours,muze_muze.utils=muze_utils_src_namespaceObject,muze_muze.Model=(new muze_Store).model.constructor;__webpack_exports__.default=muze_muze}])}); +!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=18)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){"@babel/helpers - typeof";return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports=JSON.parse('{"name":"datamodel","description":"Relational algebra compliant in-memory tabular data store","homepage":"https://github.com/chartshq/datamodel","version":"2.3.1","license":"MIT","main":"dist/datamodel.js","keywords":["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],"author":"Muzejs.org (https://muzejs.org/)","repository":{"type":"git","url":"https://github.com/chartshq/datamodel.git"},"contributors":[{"name":"Akash Goswami","email":"akashgoswami90s@gmail.com"},{"name":"Subhash Haldar"},{"name":"Rousan Ali","email":"rousanali786@gmail.com","url":"https://rousan.io"},{"name":"Ujjal Kumar Dutta","email":"duttaujjalkumar@live.com"},{"name":"Ranajit Banerjee","email":"ranajit.113124@gmail.com"},{"name":"Adarsh Lilha","email":"adarshlilha@gmail.com"},{"name":"Swati Mukherjee","email":"swati020494@gmail.com"}],"dependencies":{"d3-dsv":"^1.0.8"},"devDependencies":{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","chai":"3.5.0","cross-env":"^5.0.5","eslint":"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0","jsdoc":"3.5.5","json2yaml":"^1.1.0","karma":"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3","marked":"^0.5.0","mocha":"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0","webpack":"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},"scripts":{"test":"npm run lint && npm run ut","ut":"karma start karma.conf.js","utd":"karma start --single-run false --browsers Chrome karma.conf.js ","build":"npm run build:prod","build:dev":"webpack --mode development","build:prod":"webpack --mode production","start":"webpack-dev-server --config webpack.config.dev.js --mode development --open","lint":"eslint ./src","lint-errors":"eslint --quiet ./src","docs":"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}')},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"DataFormat",function(){return o}),n.d(r,"DimensionSubtype",function(){return u}),n.d(r,"MeasureSubtype",function(){return c}),n.d(r,"FieldType",function(){return f}),n.d(r,"FilteringMode",function(){return l}),n.d(r,"GROUP_BY_FUNCTIONS",function(){return s});var i={};n.r(i),n.d(i,"Dimension",function(){return Me}),n.d(i,"Measure",function(){return Le}),n.d(i,"FieldParser",function(){return Be}),n.d(i,"fieldRegistry",function(){return Nt}),n.d(i,"columnMajor",function(){return v});var a={};n.r(a),n.d(a,"sum",function(){return Zn}),n.d(a,"avg",function(){return $n}),n.d(a,"min",function(){return Qn}),n.d(a,"max",function(){return er}),n.d(a,"first",function(){return tr}),n.d(a,"last",function(){return nr}),n.d(a,"count",function(){return rr}),n.d(a,"sd",function(){return ir});var o={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},u={CATEGORICAL:"categorical",TEMPORAL:"temporal",BINNED:"binned",ID:"__id"},c={CONTINUOUS:"continuous"},f={MEASURE:"measure",DIMENSION:"dimension"},l={NORMAL:"normal",INVERSE:"inverse",ALL:"all"},s={SUM:"sum",AVG:"avg",MIN:"min",MAX:"max",FIRST:"first",LAST:"last",COUNT:"count",STD:"std"};function p(e){return e instanceof Date?e:new Date(e)}function d(e){return e<10?"0"+e:e}function h(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},h.TOKEN_PREFIX="%",h.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},h.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},h.defaultRangeParser=function(e,t){return function(n){var r,i=void 0;if(!n)return t;var a=n.toLowerCase();for(i=0,r=e.length;ii.getFullYear()&&(t=""+(a-1)+r),p(t).getFullYear()},formatter:function formatter(e){var t=p(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return p(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},h.formatAs=function(e,t){var n,r=p(e),i=h.findTokens(t),a=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=i.length;l=0;p--)(f=a[p].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(p=0;p0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var F=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:R,a=[],o=[],u=n||Y,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,p=c.name+"."+f.name,d=B(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=g({},e.schema());-1===d.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),f.fields.forEach(function(e){var t=g({},e.schema());-1!==d.indexOf(t.name)?r||(t.name=f.name+"."+t.name,a.push(t)):a.push(t)}),S(e._rowDiffset,function(n){var p=!1,h=void 0;S(t._rowDiffset,function(v){var y=[],m={};m[l]={},m[s]={},c.fields.forEach(function(e){y.push(e.partialField.data[n]),m[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}}),f.fields.forEach(function(e){-1!==d.indexOf(e.schema().name)&&r||y.push(e.partialField.data[v]),m[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}});var b=fn(m[l]),g=fn(m[s]);if(u(b,g,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var _={};y.forEach(function(e,t){_[a[t].name]=e}),p&&R!==i?o[h]=_:(o.push(_),p=!0,h=n)}else if((i===x||i===U)&&!p){var w={},O=c.fields.length-1;y.forEach(function(e,t){w[a[t].name]=t<=O?e:null}),p=!0,h=n,o.push(w)}})}),new qn(o,a,{name:p})}function J(e,t){var n=""+e,r=""+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function G(e,t,n,r){if(n===t)return e;var i=t+Math.floor((n-t)/2);return G(e,t,i,r),G(e,i+1,n,r),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[f],f+=1):f>r?(a[l]=o[c],c+=1):i(o[c],o[f])<=0?(a[l]=o[c],c+=1):(a[l]=o[f],f+=1)}(e,t,i,n,r),e}(e,0,e.length-1,t),e}var Q,K=function K(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=""+e)==(t=""+t)?0:e>t?-1:1}}return n}(e.type,n)}function q(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function Z(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function $(e,t,n){for(var r=void 0,i=void 0,a=void 0,o=n.length-1;o>=0;o--)r=n[o][0],i=n[o][1],(a=Pn(t,r))&&("function"==typeof i?z(e,function(e,t){return i(e[a.index],t[a.index])}):_(i)?function(){var n=q(e,a.index),r=i[i.length-1],o=i.slice(0,i.length-1),u=o.map(function(e){return Pn(t,e)});n.forEach(function(e){e.push(Z(e,o,u))}),z(n,function(e,t){var n=e[2],i=t[2];return r(n,i)}),e.length=0,n.forEach(function(t){e.push.apply(e,W(t[1]))})}():function(){var t=X(a,i);z(e,function(e,n){return t(e[a.index],n[a.index])})}())}function te(e,t,n,r,i){var a=e.fields,o=e.idField.data(),c={schema:[],data:[],uids:[]},l=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,s=r&&r.length>0,p=[];if(n.split(",").forEach(function(e){for(var t=0;tr&&(r=i))}),[n,r]},tt=function(){function e(e,t){for(var n=0;n=a?c=!0:10===(r=e.charCodeAt(o++))?f=!0:13===r&&(f=!0,10===e.charCodeAt(o)&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+Lt(t,6):Lt(t,4))+"-"+Lt(e.getUTCMonth()+1,2)+"-"+Lt(e.getUTCDate(),2)+(a?"T"+Lt(n,2)+":"+Lt(r,2)+":"+Lt(i,2)+"."+Lt(a,3)+"Z":i?"T"+Lt(n,2)+":"+Lt(r,2)+":"+Lt(i,2)+"Z":r||n?"T"+Lt(n,2)+":"+Lt(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,i,a=r(e,function(e,r){if(n)return n(e,r-1);i=e,n=t?function(e,t){var n=xt(e);return function(r,i){return t(n(r),i,e)}}(e,t):xt(e)});return a.columns=i||[],a},parseRows:r,format:function format(t,n){return null==n&&(n=Ut(t)),[n.map(o).join(e)].concat(i(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=Ut(e)),i(e,t).join("\n")},formatRows:function formatRows(e){return e.map(a).join("\n")},formatRow:a,formatValue:o}},Yt=function Yt(e,t,n){if(!Array.isArray(t))throw new Error("Schema missing or is in an unsupported format");var r=t.map(function(e){return e.name});n=Object.assign({},{firstRowHeader:!0},n);var i=[],a=v(i),o=r;n.firstRowHeader&&(o=e.splice(0,1)[0]);var u=o.reduce(function(e,t,n){return Object.assign(e,(a=n,(i=t)in(r={})?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a,r));var r,i,a},{});return e.forEach(function(e){var t=[];return r.forEach(function(n){var r=u[n];t.push(e[r])}),a.apply(void 0,t)}),[r,i]},Ht=function Ht(e,t,n){n=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},n);var r=Bt(n.fieldSeparator);return Yt(r.parseRows(e),t,n)},Jt=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(t){return e.store.set(t.type,t)}),this.store}},{key:"register",value:function value(e){return e instanceof Ct?(this.store.set(e.type,e),this):null}},{key:"unregister",value:function value(e){return this.store.delete(e.type),this}},{key:"get",value:function value(e){return this.store.has(e)?this.store.get(e):null}}]),e}(),an=function(){var e=null;return e||new rn}(),on=function on(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function un(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function cn(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3];t===M.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,cn(i))):e._derivation.push({op:t,meta:r,criteria:i})})(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function pn(e,t){var n;(n=t._ancestorDerivation).push.apply(n,cn(e._ancestorDerivation).concat(cn(e._derivation)))}(e,t)},hn=(un(tn={},l.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),un(tn,l.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),un(tn,l.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),tn),vn=function vn(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split("-")[0]+"-"+t}else e.push(""+t)},yn=function yn(e,t,n){var r=[],i=[],a=on(hn[n].calcDiff,2),o=a[0],u=a[1];return S(e,function(e){var n=t(e);n&&o&&vn(r,e,-1),!n&&u&&vn(i,e,-1)}),{rowDiffset:r.join(","),rejectRowDiffset:i.join(",")}},bn=function bn(e,t,n,r,i){var a={},o=function o(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e._partialFieldspace._cachedValueObjects;return i(c,function(e){return t(f[e],e,o,a)},u)},wn=function wn(e,t,n,r){var i=e[n];return i===C?r:t[i].internalValue},On=function On(e,t){return(t[0]instanceof Array?t:[t]).some(function(t){return e>=t[0]&&e<=t[1]})},En=(un(nn={},c.CONTINUOUS,On),un(nn,u.TEMPORAL,On),nn),An=function An(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=[],i=n.operation||"and",a=n.filterByDim,o=void 0===a||a,u=n.filterByMeasure,c=void 0!==u&&u,l=n.clone,p=void 0===l||l?function gn(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t}(e):e,d=p.getFieldsConfig(),h=e.getPartialFieldspace().idField.data();return r=t.length?t.map(function(e){return function(e){var t=e.criteria,n=void 0===t?{}:t,r=n.identifiers,i=void 0===r?[[],[]]:r,a=n.range,u=on(i,2),l=u[0],s=void 0===l?[]:l,p=u[1],v=void 0===p?[]:p,y=s.reduce(function(e,t,n){return e[t]=n,e},{}),m=(s=s.filter(function(e){return e in d&&d[e].def.type===f.DIMENSION||e===C})).length,b={};if(m)for(var g=function g(e,t){var n=i[e],r=void 0;if(C in y){var a=n[y.__id__];a&&a.values().forEach(function(e){r=""+s.map(function(t){var r=y[t];return t===C?e:n[r]}),b[r]=1})}else r=""+s.map(function(e){var t=y[e];return n[t]}),b[r]=1},_=1,w=i.length;_1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}i=(s=[]).concat.apply(s,[].concat(cn(d.map(c)),[{criteria:e,groupedModel:null!==e&&e.fields.some(function(e){return e.type===f.MEASURE})?Cn(n.propagationSource):null}])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(h,cn(r.excludeModels||[]))})}var y=t.model,m=Object.assign({sourceIdentifiers:e,propagationSourceId:u},r);l.forEach(function(e){var t=e.criteria,n=An(y,t,{filterByMeasure:!!t.find(function(e){return e.groupedModel===y})}),r=e.path;if(r){var i=function(e,t){for(var n=0,r=t.length;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.excludeModels||[],o=i.criteria;(!a.length||-1===a.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=o.filter(function(e){return e.groupedModel===t}),u=In(n,t);a.length&&(u=An(u,a,{filterByDim:!1,filterByMeasure:!0,clone:!1})),e(t,u,r,i)})}(y,n,m,{excludeModels:e.excludeModels,criteria:t})})},Vn=function Vn(e,t,n){var r=e.reduce(function(e,r){return"RegExp"===r.constructor.name?e.push.apply(e,cn(t.filter(function(e){return-1!==e.search(r)}))):r in n&&e.push(r),e},[]);return Array.from(new Set(r)).map(function(e){return e.trim()})},Bn=function Bn(e,t){return e.numberFormat?e.numberFormat()(t):t},Yn=function(){function e(e,t){for(var n=0;n1?(i=e.clone(r.saveChild),kn(i,u[c[1]],e,n,t),[o,i]):o}(this,e,t,{saveChild:t.saveChild})}},{key:"isEmpty",value:function value(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:"clone",value:function value(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=Vn(e,i,r);return a===l.ALL?[Dn(this,o,{mode:l.NORMAL,saveChild:t.saveChild},i),Dn(this,o,{mode:l.INVERSE,saveChild:t.saveChild},i)]:Dn(this,o,t,i)}},{key:"getFieldsConfig",value:function value(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function value(){return this._fieldConfig=this._fieldspace.fields.reduce(function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e},{}),this}},{key:"dispose",value:function value(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(e){e._parent=null}),this._children=[]}},{key:"removeChild",value:function value(e){var t=this._children.findIndex(function(t){return t===e});-1===t||this._children.splice(t,1)}},{key:"setParent",value:function value(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}},{key:"getAncestorDerivations",value:function value(){return this._ancestorDerivation}}]),e}(),zn=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),a=function Ee(e,t,n){var r=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=Oe(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},i=e.getFieldspace().getMeasure(),a=we.defaultReducer();return Object.keys(i).forEach(function(e){"string"!=typeof t[e]&&(t[e]=i[e].defAggFn());var r=we.resolve(t[e]);r?n[e]=r:(n[e]=a,t[e]=me)}),n}(e,n),a=e.getFieldspace(),o=e.getPartialFieldspace().idField.data(),c=a.fieldsObj(),l=a.name,s=[],p=[],d=[],h={},v=[];Object.entries(c).forEach(function(e){var t=Oe(e,2),n=t[0],a=t[1];if(-1!==r.indexOf(n)||i[n])switch(d.push(g({},a.schema())),a.schema().type){case f.MEASURE:p.push(n);break;default:case f.DIMENSION:s.push(n)}});var y=0,m=[];S(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+c[n].partialField.data[e]}),void 0===h[t]?(h[t]=y,v.push({}),m.push([]),s.forEach(function(t){v[y][t]=c[t].partialField.data[e]}),p.forEach(function(t){v[y][t]=[c[t].partialField.data[e]]}),m[y]=[""+o[e]],y+=1):(p.forEach(function(n){v[h[t]][n].push(c[n].partialField.data[e])}),m[h[t]].push(""+o[e]))});var b={},_=function _(){return e.detachedRoot()};return v.forEach(function(e,t){var n=e;p.forEach(function(t){n[t]=i[t](e[t],_,b)}),n.__id__=m[t]}),d.push({name:C,type:f.DIMENSION,subtype:u.ID}),new ur(v,d,{name:l})}.apply(void 0,[this,e,t]);return dn(this,a,M.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t),n.saveChild?a.setParent(this):a.setParent(null),a}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e,withUid:!0}),i=[n.schema.map(function(e){return e.name})].concat(n.data),a=new this.constructor(i,n.schema,{dataFormat:"DSVArr"});return dn(this,a,M.SORT,t,e),t.saveChild?a.setParent(this):a.setParent(null),a}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),i=r[0].length,a=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(a=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach(function(t,n){t[e.name()]=new D(i[n],a[n],e)});return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=Fn(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var i=this.getFieldsConfig(),a=t.slice(0,t.length-1),o=t[t.length-1];if(i[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=a.map(function(e){var t=i[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},p=function p(){return r.detachedRoot()},d=[];S(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});d[e]=o.apply(void 0,Kn(t).concat([e,p,s]))});var v=function Gn(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(Tt([d],[e],[e.name]),1)[0];return c.addField(v),dn(this,c,M.CAL_VAR,{config:e,fields:a},o),c}},{key:"propagate",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function Mn(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,l={groupByModel:Cn(this),model:u};return n&&function Ln(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),xn(e,l,{propagationNameSpace:c,sourceId:a,propagationSource:this},Object.assign({payload:o},t)),i&&function Un(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i],o=a.config,u=n.config.sourceId,c=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(o,n.config);if(o.sourceId!==u&&c){var f=o.criteria;xn(f,{model:t,groupByModel:Cn(a.model)},{propagationNameSpace:e,propagateToSource:!1,sourceId:u,propagationSource:a.model},o)}}}(c,u,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var i=function I(e,t,n){var r=n.buckets,i=n.binsCount,a=n.binSize,o=n.start,u=n.end,c=e.domain(),f=P(c,2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var p=[],d=0;d=(a=e[i=n+Math.floor((r-n)/2)]).start&&t=a.end?n=i+1:t2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],i=r.saveChild,a=e.getFieldspace().fieldsObj(),o=bn(e.clone(i),n,r,e,function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},i=this.getFieldsConfig(),a=Object.keys(i),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach(function(e,n){o[n]=Vn([].concat(Kn(e),Kn(t)),a,i)}),function Sn(e,t,n,r){return t.map(function(t){return Dn(e,t,n,r)})}(this,o,n,a)}}],[{key:"configureInvalidAwareTypes",value:function value(e){return T.invalidAwareVals(e)}},{key:"Reducers",get:function get(){return we}},{key:"Converters",get:function get(){return an}},{key:"FieldTypes",get:function get(){return Nt}}]),t}(),Zn=ye.sum,$n=ye.avg,Qn=ye.min,er=ye.max,tr=ye.first,nr=ye.last,rr=ye.count,ir=ye.std,ar={compose:function compose(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,i=void 0,a=[];return t.forEach(function(e){r=e(r),a.push.apply(a,function V(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){"@babel/helpers - typeof";return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var muze_utils_src_namespaceObject={};__webpack_require__.r(muze_utils_src_namespaceObject),__webpack_require__.d(muze_utils_src_namespaceObject,"InvalidAwareTypes",function(){return src_InvalidAwareTypes}),__webpack_require__.d(muze_utils_src_namespaceObject,"DataModel",function(){return datamodel_default.a}),__webpack_require__.d(muze_utils_src_namespaceObject,"ReservedFields",function(){return reserved_fields}),__webpack_require__.d(muze_utils_src_namespaceObject,"CommonProps",function(){return common_props}),__webpack_require__.d(muze_utils_src_namespaceObject,"COORD_TYPES",function(){return COORD_TYPES}),__webpack_require__.d(muze_utils_src_namespaceObject,"STATE_NAMESPACES",function(){return namespace_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"scales",function(){return scales_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"colorSchemes",function(){return color_schemes_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"getNearestValue",function(){return getNearestValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"getValueParser",function(){return getValueParser}),__webpack_require__.d(muze_utils_src_namespaceObject,"transformColor",function(){return common_utils_transformColor}),__webpack_require__.d(muze_utils_src_namespaceObject,"transformColors",function(){return common_utils_transformColors}),__webpack_require__.d(muze_utils_src_namespaceObject,"detectColor",function(){return detectColor}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslToRgb",function(){return hslToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"rgbToHsv",function(){return rgbToHsv}),__webpack_require__.d(muze_utils_src_namespaceObject,"hexToHsv",function(){return hexToHsv}),__webpack_require__.d(muze_utils_src_namespaceObject,"hsvToRgb",function(){return hsvToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslaToRgb",function(){return hslaToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"escapeHTML",function(){return escapeHTML}),__webpack_require__.d(muze_utils_src_namespaceObject,"angleToRadian",function(){return angleToRadian}),__webpack_require__.d(muze_utils_src_namespaceObject,"generateGetterSetters",function(){return generateGetterSetters}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArraySum",function(){return getArraySum}),__webpack_require__.d(muze_utils_src_namespaceObject,"ERROR_MSG",function(){return ERROR_MSG}),__webpack_require__.d(muze_utils_src_namespaceObject,"interpolator",function(){return common_utils_interpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"colorInterpolator",function(){return common_utils_colorInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"numberInterpolator",function(){return common_utils_numberInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"piecewiseInterpolator",function(){return common_utils_piecewiseInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"reqAnimFrame",function(){return reqAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"cancelAnimFrame",function(){return cancelAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"nextAnimFrame",function(){return nextAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMax",function(){return getMax}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMin",function(){return getMin}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDomainFromData",function(){return getDomainFromData}),__webpack_require__.d(muze_utils_src_namespaceObject,"getUniqueId",function(){return getUniqueId}),__webpack_require__.d(muze_utils_src_namespaceObject,"mergeRecursive",function(){return mergeRecursive}),__webpack_require__.d(muze_utils_src_namespaceObject,"unionDomain",function(){return unionDomain}),__webpack_require__.d(muze_utils_src_namespaceObject,"replaceCSSPrefix",function(){return replaceCSSPrefix}),__webpack_require__.d(muze_utils_src_namespaceObject,"symbolFns",function(){return symbolFns}),__webpack_require__.d(muze_utils_src_namespaceObject,"defaultValue",function(){return defaultValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"easeFns",function(){return easeFns}),__webpack_require__.d(muze_utils_src_namespaceObject,"clone",function(){return clone}),__webpack_require__.d(muze_utils_src_namespaceObject,"interpolateArray",function(){return interpolateArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMinPoint",function(){return getMinPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMaxPoint",function(){return getMaxPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"getClosestIndexOf",function(){return common_utils_getClosestIndexOf}),__webpack_require__.d(muze_utils_src_namespaceObject,"registerListeners",function(){return common_utils_registerListeners}),__webpack_require__.d(muze_utils_src_namespaceObject,"Voronoi",function(){return common_utils_Voronoi}),__webpack_require__.d(muze_utils_src_namespaceObject,"checkExistence",function(){return checkExistence}),__webpack_require__.d(muze_utils_src_namespaceObject,"sanitizeIP",function(){return sanitizeIP}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMinDiff",function(){return getMinDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"capitalizeFirst",function(){return capitalizeFirst}),__webpack_require__.d(muze_utils_src_namespaceObject,"getWindow",function(){return getWindow}),__webpack_require__.d(muze_utils_src_namespaceObject,"getQualifiedClassName",function(){return getQualifiedClassName}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDependencyOrder",function(){return getDependencyOrder}),__webpack_require__.d(muze_utils_src_namespaceObject,"objectIterator",function(){return objectIterator}),__webpack_require__.d(muze_utils_src_namespaceObject,"intSanitizer",function(){return intSanitizer}),__webpack_require__.d(muze_utils_src_namespaceObject,"enableChainedTransaction",function(){return enableChainedTransaction}),__webpack_require__.d(muze_utils_src_namespaceObject,"isHTMLElem",function(){return isHTMLElem}),__webpack_require__.d(muze_utils_src_namespaceObject,"isEqual",function(){return common_utils_isEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"isSimpleObject",function(){return isSimpleObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"nextFrame",function(){return nextFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"getObjProp",function(){return getObjProp}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDataModelFromIdentifiers",function(){return common_utils_getDataModelFromIdentifiers}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDataModelFromRange",function(){return getDataModelFromRange}),__webpack_require__.d(muze_utils_src_namespaceObject,"transposeArray",function(){return transposeArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"toArray",function(){return toArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"extendsClass",function(){return extendsClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"concatModels",function(){return common_utils_concatModels}),__webpack_require__.d(muze_utils_src_namespaceObject,"assembleModelFromIdentifiers",function(){return assembleModelFromIdentifiers}),__webpack_require__.d(muze_utils_src_namespaceObject,"isValidValue",function(){return isValidValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"nestCollection",function(){return common_utils_nestCollection}),__webpack_require__.d(muze_utils_src_namespaceObject,"stack",function(){return common_utils_stack}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSymbol",function(){return common_utils_getSymbol}),__webpack_require__.d(muze_utils_src_namespaceObject,"Scales",function(){return Scales}),__webpack_require__.d(muze_utils_src_namespaceObject,"Symbols",function(){return Symbols}),__webpack_require__.d(muze_utils_src_namespaceObject,"pathInterpolators",function(){return pathInterpolators}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslInterpolator",function(){return common_utils_hslInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSmallestDiff",function(){return getSmallestDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"require",function(){return require}),__webpack_require__.d(muze_utils_src_namespaceObject,"formatTemporal",function(){return common_utils_formatTemporal}),__webpack_require__.d(muze_utils_src_namespaceObject,"nearestSortingDetails",function(){return common_utils_nearestSortingDetails}),__webpack_require__.d(muze_utils_src_namespaceObject,"createSelection",function(){return common_utils_createSelection}),__webpack_require__.d(muze_utils_src_namespaceObject,"temporalFields",function(){return common_utils_temporalFields}),__webpack_require__.d(muze_utils_src_namespaceObject,"retrieveNearestGroupByReducers",function(){return common_utils_retrieveNearestGroupByReducers}),__webpack_require__.d(muze_utils_src_namespaceObject,"retrieveFieldDisplayName",function(){return retrieveFieldDisplayName}),__webpack_require__.d(muze_utils_src_namespaceObject,"sanitizeDomainWhenEqual",function(){return sanitizeDomainWhenEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"sortCategoricalField",function(){return sortCategoricalField}),__webpack_require__.d(muze_utils_src_namespaceObject,"intersect",function(){return common_utils_intersect}),__webpack_require__.d(muze_utils_src_namespaceObject,"partition",function(){return partition}),__webpack_require__.d(muze_utils_src_namespaceObject,"mix",function(){return mix}),__webpack_require__.d(muze_utils_src_namespaceObject,"componentRegistry",function(){return common_utils_componentRegistry}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArrayDiff",function(){return getArrayDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"difference",function(){return difference}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArrayIndexMap",function(){return getArrayIndexMap}),__webpack_require__.d(muze_utils_src_namespaceObject,"arraysEqual",function(){return arraysEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"getReadableTicks",function(){return common_utils_getReadableTicks}),__webpack_require__.d(muze_utils_src_namespaceObject,"unique",function(){return unique}),__webpack_require__.d(muze_utils_src_namespaceObject,"dmMultipleSelection",function(){return common_utils_dmMultipleSelection}),__webpack_require__.d(muze_utils_src_namespaceObject,"pointWithinCircle",function(){return pointWithinCircle}),__webpack_require__.d(muze_utils_src_namespaceObject,"getIndexMap",function(){return getIndexMap}),__webpack_require__.d(muze_utils_src_namespaceObject,"selectElement",function(){return renderer_utils_selectElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"makeElement",function(){return makeElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"applyStyle",function(){return renderer_utils_applyStyle}),__webpack_require__.d(muze_utils_src_namespaceObject,"addClass",function(){return renderer_utils_addClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"removeClass",function(){return renderer_utils_removeClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"appendElement",function(){return appendElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"setAttrs",function(){return renderer_utils_setAttrs}),__webpack_require__.d(muze_utils_src_namespaceObject,"setStyles",function(){return renderer_utils_setStyles}),__webpack_require__.d(muze_utils_src_namespaceObject,"createElement",function(){return renderer_utils_createElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"createElements",function(){return renderer_utils_createElements}),__webpack_require__.d(muze_utils_src_namespaceObject,"clipElement",function(){return renderer_utils_clipElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"getElementsByClassName",function(){return renderer_utils_getElementsByClassName}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMousePos",function(){return getMousePos}),__webpack_require__.d(muze_utils_src_namespaceObject,"getEvent",function(){return renderer_utils_getEvent}),__webpack_require__.d(muze_utils_src_namespaceObject,"getD3Drag",function(){return renderer_utils_getD3Drag}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSmartComputedStyle",function(){return renderer_utils_getSmartComputedStyle}),__webpack_require__.d(muze_utils_src_namespaceObject,"getClientPoint",function(){return renderer_utils_getClientPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"hasTouch",function(){return hasTouch}),__webpack_require__.d(muze_utils_src_namespaceObject,"Store",function(){return store_Store}),__webpack_require__.d(muze_utils_src_namespaceObject,"transactor",function(){return store_transactor}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMillisecond",function(){return src_millisecond}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeSecond",function(){return src_second}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMinute",function(){return src_minute}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeHour",function(){return src_hour}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeDay",function(){return src_day}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeWeek",function(){return sunday}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMonth",function(){return src_month}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeYear",function(){return src_year}),__webpack_require__.d(muze_utils_src_namespaceObject,"Smartlabel",function(){return SmartlabelManager_default.a}),__webpack_require__.d(muze_utils_src_namespaceObject,"dataSelect",function(){return dataSelect}),__webpack_require__.d(muze_utils_src_namespaceObject,"LifeCycleManager",function(){return lifecycle_manager}),__webpack_require__.d(muze_utils_src_namespaceObject,"DimensionSubtype",function(){return dist_datamodel.DimensionSubtype}),__webpack_require__.d(muze_utils_src_namespaceObject,"FieldType",function(){return dist_datamodel.FieldType}),__webpack_require__.d(muze_utils_src_namespaceObject,"MeasureSubtype",function(){return dist_datamodel.MeasureSubtype}),__webpack_require__.d(muze_utils_src_namespaceObject,"DateTimeFormatter",function(){return dist_datamodel.DateTimeFormatter}),__webpack_require__.d(muze_utils_src_namespaceObject,"DM_DERIVATIVES",function(){return dist_datamodel.DM_DERIVATIVES}),__webpack_require__.d(muze_utils_src_namespaceObject,"GROUP_BY_FUNCTIONS",function(){return dist_datamodel.GROUP_BY_FUNCTIONS}),__webpack_require__.d(muze_utils_src_namespaceObject,"RTree",function(){return RTree});var enums_constants_namespaceObject={};__webpack_require__.r(enums_constants_namespaceObject),__webpack_require__.d(enums_constants_namespaceObject,"CLASSPREFIX",function(){return CLASSPREFIX}),__webpack_require__.d(enums_constants_namespaceObject,"STACK",function(){return STACK}),__webpack_require__.d(enums_constants_namespaceObject,"GROUP",function(){return GROUP}),__webpack_require__.d(enums_constants_namespaceObject,"IDENTITY",function(){return IDENTITY}),__webpack_require__.d(enums_constants_namespaceObject,"ANGLE",function(){return constants_ANGLE}),__webpack_require__.d(enums_constants_namespaceObject,"RADIUS",function(){return constants_RADIUS}),__webpack_require__.d(enums_constants_namespaceObject,"SIZE",function(){return SIZE}),__webpack_require__.d(enums_constants_namespaceObject,"COLOR",function(){return COLOR}),__webpack_require__.d(enums_constants_namespaceObject,"SHAPE",function(){return SHAPE}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT",function(){return TEXT}),__webpack_require__.d(enums_constants_namespaceObject,"OUTER_RADIUS_VALUE",function(){return OUTER_RADIUS_VALUE}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT_ANCHOR_MIDDLE",function(){return TEXT_ANCHOR_MIDDLE}),__webpack_require__.d(enums_constants_namespaceObject,"ENCODING",function(){return ENCODING}),__webpack_require__.d(enums_constants_namespaceObject,"STROKE_DASHARRAY",function(){return STROKE_DASHARRAY}),__webpack_require__.d(enums_constants_namespaceObject,"ASCENDING",function(){return ASCENDING}),__webpack_require__.d(enums_constants_namespaceObject,"AGG_FN_SUM",function(){return AGG_FN_SUM}),__webpack_require__.d(enums_constants_namespaceObject,"AREA_LAYER",function(){return AREA_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"ARC_LAYER",function(){return ARC_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"LINE_LAYER",function(){return LINE_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT_LAYER",function(){return TEXT_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"POINT_LAYER",function(){return POINT_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"BAR_LAYER",function(){return BAR_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"TICK_LAYER",function(){return TICK_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"SIMPLE_LAYER",function(){return SIMPLE_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"BASE_LAYER",function(){return BASE_LAYER});var props_namespaceObject={};__webpack_require__.r(props_namespaceObject),__webpack_require__.d(props_namespaceObject,"DATA",function(){return DATA}),__webpack_require__.d(props_namespaceObject,"CONFIG",function(){return CONFIG}),__webpack_require__.d(props_namespaceObject,"MEASUREMENT",function(){return MEASUREMENT}),__webpack_require__.d(props_namespaceObject,"DOMAIN",function(){return DOMAIN}),__webpack_require__.d(props_namespaceObject,"MOUNT",function(){return MOUNT});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var visual_group_src_enums_constants_namespaceObject={};__webpack_require__.r(visual_group_src_enums_constants_namespaceObject),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"X",function(){return X}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"Y",function(){return Y}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"WIDTH",function(){return WIDTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HEIGHT",function(){return HEIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASUREMENT",function(){return constants_MEASUREMENT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CONFIG",function(){return constants_CONFIG}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MIN_UNIT_WIDTH",function(){return MIN_UNIT_WIDTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MIN_UNIT_HEIGHT",function(){return MIN_UNIT_HEIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DIMENSIONS",function(){return DIMENSIONS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASURES",function(){return MEASURES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DIMENSION",function(){return DIMENSION}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASURE",function(){return MEASURE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"PIVOT",function(){return PIVOT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FORMAT",function(){return FORMAT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MOUNT",function(){return constants_MOUNT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HAS_DATA_UPDATED",function(){return HAS_DATA_UPDATED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ROWS",function(){return ROWS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLUMNS",function(){return COLUMNS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DATA",function(){return constants_DATA}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COL",function(){return COL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ROW",function(){return ROW}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLUMN",function(){return COLUMN}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLOR",function(){return enums_constants_COLOR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SHAPE",function(){return enums_constants_SHAPE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SIZE",function(){return enums_constants_SIZE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DETAIL",function(){return DETAIL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LAYERS",function(){return LAYERS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TRANSFORM",function(){return TRANSFORM}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ORDINAL",function(){return enums_constants_ORDINAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LINEAR",function(){return enums_constants_LINEAR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LEFT",function(){return constants_LEFT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RIGHT",function(){return constants_RIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TOP",function(){return enums_constants_TOP}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BOTTOM",function(){return enums_constants_BOTTOM}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RETINAL",function(){return RETINAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CELL",function(){return CELL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"X_AXES",function(){return X_AXES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"Y_AXES",function(){return Y_AXES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ENTRY_CELLS",function(){return ENTRY_CELLS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"INITIALIZED",function(){return INITIALIZED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"EXIT_CELLS",function(){return EXIT_CELLS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"AXIS",function(){return AXIS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"UNIT",function(){return UNIT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"UPDATED",function(){return UPDATED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BEFORE_UPDATE",function(){return BEFORE_UPDATE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"VALUE_MATRIX",function(){return VALUE_MATRIX}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FACET_HEADERS",function(){return FACET_HEADERS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RADIUS",function(){return enums_constants_RADIUS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ANGLE",function(){return enums_constants_ANGLE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ANGLE0",function(){return ANGLE0}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ARC",function(){return ARC}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CATEGORICAL",function(){return constants_CATEGORICAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TEMPORAL",function(){return constants_TEMPORAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BAR",function(){return BAR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LINE",function(){return LINE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"POINT",function(){return POINT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"PRIMARY",function(){return PRIMARY}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SECONDARY",function(){return SECONDARY}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BOTH",function(){return BOTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"INTERACTION",function(){return INTERACTION}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"GRID_LINES",function(){return GRID_LINES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"GRID_BANDS",function(){return GRID_BANDS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HEADER",function(){return HEADER}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FACET",function(){return FACET}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DEFAULT",function(){return DEFAULT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ASCENDING",function(){return constants_ASCENDING}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DESCENDING",function(){return DESCENDING}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DARK",function(){return DARK}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"NONE",function(){return NONE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"NORMAL",function(){return NORMAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DARKER",function(){return DARKER});var helpers_namespaceObject={};__webpack_require__.r(helpers_namespaceObject),__webpack_require__.d(helpers_namespaceObject,"transformColor",function(){return helpers_transformColor}),__webpack_require__.d(helpers_namespaceObject,"applyInteractionStyle",function(){return helpers_applyInteractionStyle}),__webpack_require__.d(helpers_namespaceObject,"retrieveEncodingInf",function(){return helpers_retrieveEncodingInf}),__webpack_require__.d(helpers_namespaceObject,"encodingFieldInfRetriever",function(){return encodingFieldInfRetriever}),__webpack_require__.d(helpers_namespaceObject,"setNullsInStack",function(){return helpers_setNullsInStack}),__webpack_require__.d(helpers_namespaceObject,"transformData",function(){return helpers_transformData}),__webpack_require__.d(helpers_namespaceObject,"getIndividualClassName",function(){return getIndividualClassName}),__webpack_require__.d(helpers_namespaceObject,"dataNormalizers",function(){return dataNormalizers}),__webpack_require__.d(helpers_namespaceObject,"getNormalizedData",function(){return helpers_getNormalizedData}),__webpack_require__.d(helpers_namespaceObject,"domainCalculator",function(){return domainCalculator}),__webpack_require__.d(helpers_namespaceObject,"attachDataToVoronoi",function(){return helpers_attachDataToVoronoi}),__webpack_require__.d(helpers_namespaceObject,"updateStyle",function(){return helpers_updateStyle}),__webpack_require__.d(helpers_namespaceObject,"animateGroup",function(){return helpers_animateGroup}),__webpack_require__.d(helpers_namespaceObject,"positionPoints",function(){return positionPoints}),__webpack_require__.d(helpers_namespaceObject,"getGroupSpan",function(){return getGroupSpan}),__webpack_require__.d(helpers_namespaceObject,"getPlotMeasurement",function(){return helpers_getPlotMeasurement}),__webpack_require__.d(helpers_namespaceObject,"renderLayer",function(){return helpers_renderLayer}),__webpack_require__.d(helpers_namespaceObject,"resolveInvalidTransformType",function(){return helpers_resolveInvalidTransformType}),__webpack_require__.d(helpers_namespaceObject,"getValidTransform",function(){return getValidTransform}),__webpack_require__.d(helpers_namespaceObject,"getValidTransformForAggFn",function(){return helpers_getValidTransformForAggFn}),__webpack_require__.d(helpers_namespaceObject,"getMarkId",function(){return helpers_getMarkId}),__webpack_require__.d(helpers_namespaceObject,"resolveEncodingValues",function(){return helpers_resolveEncodingValues}),__webpack_require__.d(helpers_namespaceObject,"getColorMetaInf",function(){return getColorMetaInf}),__webpack_require__.d(helpers_namespaceObject,"toCartesianCoordinates",function(){return toCartesianCoordinates}),__webpack_require__.d(helpers_namespaceObject,"sortData",function(){return sortData}),__webpack_require__.d(helpers_namespaceObject,"getBoundBoxes",function(){return helpers_getBoundBoxes}),__webpack_require__.d(helpers_namespaceObject,"getDataFromEvent",function(){return helpers_getDataFromEvent});var point_helper_namespaceObject={};__webpack_require__.r(point_helper_namespaceObject),__webpack_require__.d(point_helper_namespaceObject,"prepareDrawingInf",function(){return helper_prepareDrawingInf}),__webpack_require__.d(point_helper_namespaceObject,"pointTranslators",function(){return helper_pointTranslators}),__webpack_require__.d(point_helper_namespaceObject,"getStrokeWidthByPosition",function(){return getStrokeWidthByPosition});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var src_enums_namespaceObject={};__webpack_require__.r(src_enums_namespaceObject),__webpack_require__.d(src_enums_namespaceObject,"PROPS",function(){return props_namespaceObject}),__webpack_require__.d(src_enums_namespaceObject,"LAYER_TYPES",function(){return layer_types_namespaceObject}),__webpack_require__.d(src_enums_namespaceObject,"CONSTANTS",function(){return enums_constants_namespaceObject});var visual_unit_src_helper_namespaceObject={};__webpack_require__.r(visual_unit_src_helper_namespaceObject),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getDimensionMeasureMap",function(){return helper_getDimensionMeasureMap}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"transformDataModels",function(){return transformDataModels}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayerFromDef",function(){return helper_getLayerFromDef}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"resolveEncodingTransform",function(){return resolveEncodingTransform}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"sanitizeLayerDef",function(){return helper_sanitizeLayerDef}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"attachDataToLayers",function(){return attachDataToLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"attachAxisToLayers",function(){return helper_attachAxisToLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayerAxisIndex",function(){return helper_getLayerAxisIndex}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"unionDomainFromLayers",function(){return helper_unionDomainFromLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"renderLayers",function(){return helper_renderLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getNearestDimensionalValue",function(){return helper_getNearestDimensionalValue}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayersBy",function(){return getLayersBy}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"removeLayersBy",function(){return removeLayersBy}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createSideEffectGroup",function(){return helper_createSideEffectGroup}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createRenderPromise",function(){return createRenderPromise}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getRadiusRange",function(){return getRadiusRange}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"setAxisRange",function(){return helper_setAxisRange}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createRTree",function(){return helper_createRTree});var reactive_props_namespaceObject={};__webpack_require__.r(reactive_props_namespaceObject),__webpack_require__.d(reactive_props_namespaceObject,"CONFIG",function(){return reactive_props_CONFIG}),__webpack_require__.d(reactive_props_namespaceObject,"DATA",function(){return reactive_props_DATA}),__webpack_require__.d(reactive_props_namespaceObject,"AXES",function(){return AXES}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERDEFS",function(){return LAYERDEFS}),__webpack_require__.d(reactive_props_namespaceObject,"WIDTH",function(){return reactive_props_WIDTH}),__webpack_require__.d(reactive_props_namespaceObject,"HEIGHT",function(){return reactive_props_HEIGHT}),__webpack_require__.d(reactive_props_namespaceObject,"MOUNT",function(){return reactive_props_MOUNT}),__webpack_require__.d(reactive_props_namespaceObject,"TRANSFORM",function(){return reactive_props_TRANSFORM}),__webpack_require__.d(reactive_props_namespaceObject,"TRANSFORMEDDATA",function(){return TRANSFORMEDDATA}),__webpack_require__.d(reactive_props_namespaceObject,"DATADOMAIN",function(){return DATADOMAIN}),__webpack_require__.d(reactive_props_namespaceObject,"FIELDS",function(){return FIELDS}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERAXISINDEX",function(){return LAYERAXISINDEX}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERS",function(){return reactive_props_LAYERS}),__webpack_require__.d(reactive_props_namespaceObject,"DOMAIN",function(){return reactive_props_DOMAIN});var visual_unit_src_enums_constants_namespaceObject={};__webpack_require__.r(visual_unit_src_enums_constants_namespaceObject),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CLASSPREFIX",function(){return enums_constants_CLASSPREFIX}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"IDFIELD",function(){return IDFIELD}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_LINE_PARENT_GROUP_CLASS",function(){return GRID_LINE_PARENT_GROUP_CLASS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_BAND_PARENT_GROUP_CLASS",function(){return GRID_BAND_PARENT_GROUP_CLASS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_PARENT_GROUP",function(){return GRID_PARENT_GROUP}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"BAND",function(){return enums_constants_BAND}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"TICK",function(){return TICK}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_BAND",function(){return GRID_BAND}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_LINE",function(){return GRID_LINE}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CONSOLIDATED",function(){return CONSOLIDATED}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"FRAGMENTED",function(){return FRAGMENTED}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"FACET_BY_FIELDS",function(){return FACET_BY_FIELDS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"RETINAL_FIELDS",function(){return RETINAL_FIELDS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"PARENT_ALIAS",function(){return PARENT_ALIAS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"LAYERS",function(){return constants_LAYERS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CACHED_DATA",function(){return CACHED_DATA}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"STORE",function(){return STORE});var visual_unit_src_enums_namespaceObject={};__webpack_require__.r(visual_unit_src_enums_namespaceObject),__webpack_require__.d(visual_unit_src_enums_namespaceObject,"REACTIVE_PROPS",function(){return reactive_props_namespaceObject}),__webpack_require__.d(visual_unit_src_enums_namespaceObject,"CONSTANTS",function(){return visual_unit_src_enums_constants_namespaceObject});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return behaviours_TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"ANCHORS",function(){return side_effects_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"BRUSH_ANCHORS",function(){return side_effects_BRUSH_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"PERSISTENT_ANCHORS",function(){return side_effects_PERSISTENT_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"FILTER",function(){return side_effects_FILTER}),__webpack_require__.d(side_effects_namespaceObject,"HIGHLIGHTER",function(){return side_effects_HIGHLIGHTER}),__webpack_require__.d(side_effects_namespaceObject,"CROSSLINE",function(){return CROSSLINE}),__webpack_require__.d(side_effects_namespaceObject,"TOOLTIP",function(){return side_effects_TOOLTIP}),__webpack_require__.d(side_effects_namespaceObject,"FRAGMENTED_TOOLTIP",function(){return FRAGMENTED_TOOLTIP}),__webpack_require__.d(side_effects_namespaceObject,"AXIS_LABEL_HIGHLIGHTER",function(){return AXIS_LABEL_HIGHLIGHTER});var src_side_effects_namespaceObject={};__webpack_require__.r(src_side_effects_namespaceObject),__webpack_require__.d(src_side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(src_side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"FragmentedTooltip",function(){return fragmented_tooltip_FragmentedTooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(src_side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(src_side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"AxisLabelHighLighter",function(){return axis_labels_highlighter_AxisLabelHighLighter});var group_utils_namespaceObject={};__webpack_require__.r(group_utils_namespaceObject),__webpack_require__.d(group_utils_namespaceObject,"initStore",function(){return group_utils_initStore}),__webpack_require__.d(group_utils_namespaceObject,"isDistributionEqual",function(){return group_utils_isDistributionEqual}),__webpack_require__.d(group_utils_namespaceObject,"initializeCacheMaps",function(){return initializeCacheMaps}),__webpack_require__.d(group_utils_namespaceObject,"getAxisKey",function(){return getAxisKey}),__webpack_require__.d(group_utils_namespaceObject,"getCellKey",function(){return getCellKey}),__webpack_require__.d(group_utils_namespaceObject,"extractUnitConfig",function(){return group_utils_extractUnitConfig}),__webpack_require__.d(group_utils_namespaceObject,"hasOneField",function(){return hasOneField}),__webpack_require__.d(group_utils_namespaceObject,"getHeaderText",function(){return getHeaderText}),__webpack_require__.d(group_utils_namespaceObject,"headerCreator",function(){return group_utils_headerCreator}),__webpack_require__.d(group_utils_namespaceObject,"sanitizeCheck",function(){return group_utils_sanitizeCheck}),__webpack_require__.d(group_utils_namespaceObject,"findInGroup",function(){return group_utils_findInGroup}),__webpack_require__.d(group_utils_namespaceObject,"getAxisType",function(){return group_utils_getAxisType}),__webpack_require__.d(group_utils_namespaceObject,"retriveDomainFromData",function(){return retriveDomainFromData}),__webpack_require__.d(group_utils_namespaceObject,"mutateAxesFromMap",function(){return mutateAxesFromMap}),__webpack_require__.d(group_utils_namespaceObject,"getEncoder",function(){return group_utils_getEncoder}),__webpack_require__.d(group_utils_namespaceObject,"getHeaderAxisFrom",function(){return group_utils_getHeaderAxisFrom}),__webpack_require__.d(group_utils_namespaceObject,"setFacetsAndProjections",function(){return setFacetsAndProjections}),__webpack_require__.d(group_utils_namespaceObject,"getBorders",function(){return getBorders}),__webpack_require__.d(group_utils_namespaceObject,"getFieldsFromSuppliedLayers",function(){return getFieldsFromSuppliedLayers}),__webpack_require__.d(group_utils_namespaceObject,"extractFields",function(){return group_utils_extractFields}),__webpack_require__.d(group_utils_namespaceObject,"sortFacetFields",function(){return group_utils_sortFacetFields}),__webpack_require__.d(group_utils_namespaceObject,"removeExitCells",function(){return group_utils_removeExitCells});var encoder_helper_namespaceObject={};__webpack_require__.r(encoder_helper_namespaceObject),__webpack_require__.d(encoder_helper_namespaceObject,"getAdjustedDomain",function(){return getAdjustedDomain}),__webpack_require__.d(encoder_helper_namespaceObject,"generateAxisFromMap",function(){return encoder_helper_generateAxisFromMap}),__webpack_require__.d(encoder_helper_namespaceObject,"sanitizeIndividualLayerConfig",function(){return encoder_helper_sanitizeIndividualLayerConfig}),__webpack_require__.d(encoder_helper_namespaceObject,"mutateAxesFromMap",function(){return encoder_helper_mutateAxesFromMap}),__webpack_require__.d(encoder_helper_namespaceObject,"getDefaultMark",function(){return encoder_helper_getDefaultMark}),__webpack_require__.d(encoder_helper_namespaceObject,"createRetinalAxis",function(){return encoder_helper_createRetinalAxis}),__webpack_require__.d(encoder_helper_namespaceObject,"getIndex",function(){return getIndex}),__webpack_require__.d(encoder_helper_namespaceObject,"getLayerConfFromFields",function(){return getLayerConfFromFields}),__webpack_require__.d(encoder_helper_namespaceObject,"resolveAxisConfig",function(){return encoder_helper_resolveAxisConfig}),__webpack_require__.d(encoder_helper_namespaceObject,"getSortingConfig",function(){return getSortingConfig});var encoder_namespaceObject={};__webpack_require__.r(encoder_namespaceObject),__webpack_require__.d(encoder_namespaceObject,"VisualEncoder",function(){return visual_encoder_VisualEncoder}),__webpack_require__.d(encoder_namespaceObject,"CartesianEncoder",function(){return cartesian_encoder_CartesianEncoder}),__webpack_require__.d(encoder_namespaceObject,"PolarEncoder",function(){return polar_encoder_PolarEncoder}),__webpack_require__.d(encoder_namespaceObject,"RetinalEncoder",function(){return retinal_encoder_RetinalEncoder});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendMarker",function(){return legend_marker_LegendMarker});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var src_number=function(a,b){return a=+a,b=+b,function(t){return a*(1-t)+b*t}},define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex=/^#([0-9a-f]{3,8})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_formatHex(){return this.rgb().formatHex()}function color_formatRgb(){return this.rgb().formatRgb()}function color_color(format){var m,l;return format=(format+"").trim().toLowerCase(),(m=reHex.exec(format))?(l=m[1].length,m=parseInt(m[1],16),6===l?rgbn(m):3===l?new Rgb(m>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):8===l?new Rgb(m>>24&255,m>>16&255,m>>8&255,(255&m)/255):4===l?new Rgb(m>>12&15|m>>8&240,m>>8&15|m>>4&240,m>>4&15|240&m,((15&m)<<4|15&m)/255):null):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function rgb_formatHex(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)}function rgb_formatRgb(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===a?")":", "+a+")")}function hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}function hsl(h,s,l,opacity){return 1===arguments.length?hslConvert(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Color,color_color,{copy:function copy(channels){return Object.assign(new this.constructor,this,channels)},displayable:function displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHsl:function color_formatHsl(){return hslConvert(this).formatHsl()},formatRgb:color_formatRgb,toString:color_formatRgb}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rgb_formatHex,formatHex:rgb_formatHex,formatRgb:rgb_formatRgb,toString:rgb_formatRgb})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function formatHsl(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===a?")":", "+a+")")}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;return new FormatSpecifier({fill:match[1],align:match[2],sign:match[3],symbol:match[4],zero:match[5],width:match[6],comma:match[7],precision:match[8]&&match[8].slice(1),trim:match[9],type:match[10]})}function FormatSpecifier(specifier){this.fill=void 0===specifier.fill?" ":specifier.fill+"",this.align=void 0===specifier.align?">":specifier.align+"",this.sign=void 0===specifier.sign?"-":specifier.sign+"",this.symbol=void 0===specifier.symbol?"":specifier.symbol+"",this.zero=!!specifier.zero,this.width=void 0===specifier.width?void 0:+specifier.width,this.comma=!!specifier.comma,this.precision=void 0===specifier.precision?void 0:+specifier.precision,this.trim=!!specifier.trim,this.type=void 0===specifier.type?"":specifier.type+""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0&&(i0=0)}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},locale_map=Array.prototype.map,prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=void 0===locale.grouping||void 0===locale.thousands?src_identity:function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale_map.call(locale.grouping,Number),locale.thousands+""),currencyPrefix=void 0===locale.currency?"":locale.currency[0]+"",currencySuffix=void 0===locale.currency?"":locale.currency[1]+"",decimal=void 0===locale.decimal?".":locale.decimal+"",numerals=void 0===locale.numerals?src_identity:function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale_map.call(locale.numerals,String)),percent=void 0===locale.percent?"%":locale.percent+"",minus=void 0===locale.minus?"-":locale.minus+"",nan=void 0===locale.nan?"NaN":locale.nan+"";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(void 0===precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currencyPrefix:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currencySuffix:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=isNaN(value)?nan:formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:minus:"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=void 0===precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=0===arguments.length?new Date:new Date(+date)),date}return interval.floor=function(date){return floori(date=new Date(+date)),date},interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var year_year=newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()});year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,month_month=(year_year.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,durationMinute=(month_month.range,6e4),durationWeek=6048e5;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),day_day=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day,hour_hour=(day_day.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,minute_minute=(hour_hour.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,second_second=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()})),src_second=second_second,millisecond_millisecond=(second_second.range,newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start}));millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond;millisecond_millisecond.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcDay=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay,utcYear=(utcDay.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newDate(y,m,d){return{y:y,m:m,d:d,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseQuarter(d,string,i){var n=numberRe.exec(string.slice(i,i+1));return n?(d.q=3*n[0]-3,i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.s=+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d)-1,d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d)-1,d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d)-1,d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d)-1,d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.getHours()>=12)]},q:function formatQuarter(d){return 1+~~(d.getMonth()/3)},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.getUTCHours()>=12)]},q:function formatUTCQuarter(d){return 1+~~(d.getUTCMonth()/3)},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},q:parseQuarter,Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newDate(d.y,0,1))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=localDate(newDate(d.y,0,1))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newDate(d.y,0,1)).getUTCDay():localDate(newDate(d.y,0,1)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):localDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",!1);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier+="",!0);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,src_defaultLocale_locale.utcFormat,src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""},sequential_multi_cubehelix=cubehelixLong(cubehelix_cubehelix(300,.5,0),cubehelix_cubehelix(-240,.5,1)),BuGn=src_ramp(new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(d3_scale_chromatic_src_colors)),BuPu=src_ramp(new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(d3_scale_chromatic_src_colors)),GnBu=src_ramp(new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(d3_scale_chromatic_src_colors)),OrRd=src_ramp(new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(d3_scale_chromatic_src_colors)),PuBuGn=src_ramp(new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(d3_scale_chromatic_src_colors)),PuBu=src_ramp(new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(d3_scale_chromatic_src_colors)),PuRd=src_ramp(new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(d3_scale_chromatic_src_colors)),RdPu=src_ramp(new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(d3_scale_chromatic_src_colors)),YlGnBu=src_ramp(new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(d3_scale_chromatic_src_colors)),YlGn=src_ramp(new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(d3_scale_chromatic_src_colors)),YlOrBr=src_ramp(new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(d3_scale_chromatic_src_colors)),YlOrRd=src_ramp(new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(d3_scale_chromatic_src_colors)),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",swap=function swap(arr,i,j){var tmp=arr[i];arr[i]=arr[j],arr[j]=tmp},defaultCompare=function defaultCompare(a,b){return a>b?-1:a>b?1:0},quick_select=function quickselect(arr,k,left,right,compare){!function quickselectStep(arr,k,left,right,compare){for(;right>left;){if(right-left>600){var n=right-left+1,m=k-left+1,z=Math.log(n),s=.5*Math.exp(2*z/3),sd=.5*Math.sqrt(z*s*(n-s)/n)*(m-n/2<0?-1:1);quickselectStep(arr,k,Math.max(left,Math.floor(k-m*s/n+sd)),Math.min(right,Math.floor(k+(n-m)*s/n+sd)),compare)}var t=arr[k],i=left,j=right;for(swap(arr,left,k),compare(arr[right],t)>0&&swap(arr,left,right);i0;)j--}0===compare(arr[left],t)?swap(arr,left,j):swap(arr,++j,right),j<=k&&(left=j+1),k<=j&&(right=j-1)}}(arr,k,left||0,right||arr.length-1,compare||defaultCompare)};function _defineProperties(target,props){for(var i=0;i=a.minX&&b.maxY>=a.minY},findItem=function findItem(item,items,equalsFn){if(!equalsFn)return items.indexOf(item);for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:9;!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RTree),this._maxEntries=Math.max(4,maxEntries),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}return function _createClass(Constructor,protoProps,staticProps){return protoProps&&_defineProperties(Constructor.prototype,protoProps),staticProps&&_defineProperties(Constructor,staticProps),Constructor}(RTree,[{key:"all",value:function all(){return _all(this.data,[])}},{key:"search",value:function search(bbox){var node=this.data,result=[];if(!intersects(bbox,node))return result;for(var toBBox=this.toBBox,nodesToSearch=[];node;){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=node.children[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var child=_step.value,childBBox=node.leaf?toBBox(child):child;intersects(bbox,childBBox)&&(node.leaf?result.push(child):contains(bbox,childBBox)?_all(child,result):nodesToSearch.push(child))}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}node=nodesToSearch.pop()}return result}},{key:"load",value:function load(data){if(!data||!data.length)return this;if(data.length=0&&insertPath[level].children.length>this._maxEntries;)this.split(insertPath,level),level--;this.adjustParentBoxes(bbox,insertPath,level)}},{key:"split",value:function split(insertPath,level){var node=insertPath[level],M=node.children.length,m=this._minEntries;this.chooseSplitAxis(node,m,M);var splitIndex=this.chooseSplitIndex(node,m,M),newNode=createNode(node.children.splice(splitIndex,node.children.length-splitIndex));newNode.height=node.height,newNode.leaf=node.leaf,calcBBox(node,this.toBBox),calcBBox(newNode,this.toBBox),level?insertPath[level-1].children.push(newNode):this.splitRoot(node,newNode)}},{key:"splitRoot",value:function splitRoot(node,newNode){this.data=createNode([node,newNode]),this.data.height=node.height+1,this.data.leaf=!1,calcBBox(this.data,this.toBBox)}},{key:"chooseSplitIndex",value:function chooseSplitIndex(node,m,M){for(var index,minOverlap=1/0,minArea=1/0,i=m;i<=M-m;i++){var bbox1=distBBox(node,0,i,this.toBBox),bbox2=distBBox(node,i,M,this.toBBox),overlap=intersectionArea(bbox1,bbox2),area=bboxArea(bbox1)+bboxArea(bbox2);overlap=m;_i--){var _child=node.children[_i];r_tree_extend(rightBBox,node.leaf?toBBox(_child):_child),margin+=bboxMargin(rightBBox)}return margin}},{key:"adjustParentBoxes",value:function adjustParentBoxes(bbox,path,level){for(var i=level;i>=0;i--)r_tree_extend(path[i],bbox)}},{key:"condense",value:function condense(path){for(var siblings,i=path.length-1;i>=0;i--)0===path[i].children.length?i>0?(siblings=path[i-1].children).splice(siblings.indexOf(path[i]),1):this.clear():calcBBox(path[i],this.toBBox)}}]),RTree}(),reserved_fields={ROW_ID:"__id__",MEASURE_NAMES:"__measure_names__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES={POLAR:"polar",CARTESIAN:"cartesian"},DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,pi=Math.PI,halfPi=pi/2,tau=2*pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/pi);context.moveTo(r,0),context.arc(0,0,r,0,tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},kr=Math.sin(pi/10)/Math.sin(7*pi/10),kx=Math.sin(tau/10)*kr,ky=-Math.cos(tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},path_pi=Math.PI,path_tau=2*path_pi,tauEpsilon=path_tau-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((path_pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y,ccw=!!ccw;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%path_tau+path_tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=path_pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},none=function(series){for(var n=series.length,o=new Array(n);--n>=0;)o[n]=n;return o},order_ascending=function(series){var sums=series.map(ascending_sum);return none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}function _point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:!function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(ia?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function hsl_hsl(hue){return function(start,end){var h=hue((start=hsl(start)).h,(end=hsl(end)).h),s=nogamma(start.s,end.s),l=nogamma(start.l,end.l),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.h=h(t),start.s=s(t),start.l=l(t),start.opacity=opacity(t),start+""}}}hsl_hsl(color_hue);var hslLong=hsl_hsl(nogamma);function piecewise_piecewise(interpolate,values){for(var i=0,n=values.length-1,v=values[0],I=new Array(n<0?0:n);i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},getExtremePoint=function getExtremePoint(points,compareValue,minOrMax){for(var extremePoint,point,val,len=points.length,minOrMaxVal="max"===minOrMax?-1/0:1/0,i=0;iminOrMaxVal)&&(minOrMaxVal=val,extremePoint=point);return extremePoint},getMinPoint=function getMinPoint(points,compareValue){return getExtremePoint(points,compareValue,"min")},getMaxPoint=function getMaxPoint(points,compareValue){return getExtremePoint(points,compareValue,"max")},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},reqAnimFrame=requestAnimationFrame,cancelAnimFrame=cancelAnimationFrame,capitalizeFirst=function capitalizeFirst(text){return(text=text.toLowerCase()).replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1)})},unique=function unique(arr){var fn=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(d){return d},vals=arr.reduce(function(acc,v){return acc[fn(v)]=v,acc},{});return Object.values(vals)},getMinDiff=function getMinDiff(arr,index){var diff,uniqueVals;if((uniqueVals=unique(void 0!==index?arr.map(function(d){return d[index]}):arr)).length>1){diff=Math.abs(uniqueVals[1]-uniqueVals[0]);for(var i=2,len=uniqueVals.length;i0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0},common_utils_isEqual=function isEqual(type){return function(oldVal,newVal){return"Array"===type?!!oldVal&&arraysEqual(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},enableChainedTransaction=function enableChainedTransaction(transactionModel,transactionEndpoint,transactionItems){return transactionItems.forEach(function(item){return transactionModel.registerImmediateListener(item,function(_ref3){var newVal=_slicedToArray(_ref3,2)[1];return transactionEndpoint[item](newVal)})})},isHTMLElem=function isHTMLElem(elem){return elem instanceof common_utils_HTMLElement},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||dataSelect(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},interpolateArray=function interpolateArray(data,fitCount){var linearInterpolate=function linearInterpolate(before,after,atPoint){return before+(after-before)*atPoint},newData=[],springFactor=(data.length-1)/(fitCount-1);newData[0]=data[0];for(var i=1;i1&&(t-=1),t<1/6?p+6*(q-p)*t:t<.5?q:t<2/3?p+(q-p)*(2/3-t)*6:p}var hslToRgb=function hslToRgb(h,s,l){var r,g,b,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;if(0===s)r=g=b=l;else{var q=l<.5?l*(1+s):l+s-l*s,p=2*l-q;r=hue2rgb(p,q,h+1/3),g=hue2rgb(p,q,h),b=hue2rgb(p,q,h-1/3)}return[255*r,255*g,255*b,a]},rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g3&&void 0!==arguments[3]?arguments[3]:1,i=Math.floor(6*h),f=6*h-i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s);switch(i%6){case 0:r=v,g=t,b=p;break;case 1:r=q,g=v,b=p;break;case 2:r=p,g=v,b=t;break;case 3:r=p,g=q,b=v;break;case 4:r=t,g=p,b=v;break;case 5:r=v,g=p,b=q}return[255*r,255*g,255*b,a]},hexToHsv=function hexToHsv(hex){hex=hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(m,r,g,b){return r+r+g+g+b+b});var result=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return result?rgbToHsv(parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)):""},hslaToRgb=function hslaToRgb(h,s,l,a){var _hslToRgb2=_slicedToArray(hslToRgb(h,s,l,a),4);return function RGBAtoRGB(r,g,b,a){var r2=arguments.length>4&&void 0!==arguments[4]?arguments[4]:255,g2=arguments.length>5&&void 0!==arguments[5]?arguments[5]:255,b2=arguments.length>6&&void 0!==arguments[6]?arguments[6]:255,r3=Math.round((1-a)*r2+a*r),g3=Math.round((1-a)*g2+a*g),b3=Math.round((1-a)*b2+a*b);return"rgb(".concat(r3,",").concat(g3,",").concat(b3,")")}(_hslToRgb2[0],_hslToRgb2[1],_hslToRgb2[2],_hslToRgb2[3])},detectColor=function detectColor(col){return/rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/.test(col)||/rgba?\(((25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,\s*?){2}(25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,?\s*([01]\.?\d*?)?\)/.test(col)?"rgb":/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(col)||/^hsla\(([\d.]+),\s*([\d.]+)%,\s*([\d.]+)%,\s*(\d*(?:\.\d+)?)\)$/.test(col)?"hsl":/^#([0-9a-f]{3}){1,2}$/i.test(col)?"hex":col};var assembleModelFromIdentifiers=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=range[0]&&fieldValue<=range[1]})},{saveChild:!1,mode:mode})},getArrayIndexMap=function getArrayIndexMap(arr){return arr.reduce(function(acc,value,i){return acc[value]=i,acc},{})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode,hasBarLayer){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig||d===reserved_fields.ROW_ID});filteredDataModel=dataModel.select(function(fields,rowId){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=propField===reserved_fields.ROW_ID?rowId:fields[propField].internalValue,index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode,hasBarLayer);return filteredDataModel},common_utils_registerListeners=function registerListeners(context,listenerMap){for(var _len2=arguments.length,params=new Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)params[_key2-2]=arguments[_key2];var propListenerMap=listenerMap.apply(void 0,[context].concat(params));for(var key in propListenerMap)if({}.hasOwnProperty.call(propListenerMap,key)){var namespace=params[1].namespace,ns=null;namespace&&(ns=namespace);var mapObj=propListenerMap[key],propType=mapObj.type,props=mapObj.props,listenerFn=mapObj.listener;context.store()[propType](props,listenerFn,!1,{namespace:ns})}},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},escapeHTML=function escapeHTML(str){var htmlEscapes={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})},transposeArray=function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},extendsClass=function extendsClass(cls,extendsFrom,found){if(!cls)return!1;var prototype=cls.prototype;return found=prototype instanceof extendsFrom||extendsClass(prototype,extendsFrom,found)},common_utils_concatModels=function concatModels(dm1,dm2){for(var dataObj1=dm1.getData(),dataObj2=dm2.getData(),data1=dataObj1.data,data2=dataObj2.data,schema1=dataObj1.schema,schema2=dataObj2.schema,commonTuples={},i=0;i0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):(d[0]=0,d[1]=dy)}),_defineProperty(_stackOffsets,"none",offset_none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},pie:function(){var value=d3_shape_src_identity,sortValues=src_descending,sort=null,startAngle=d3_shape_src_constant(0),endAngle=d3_shape_src_constant(tau),padAngle=d3_shape_src_constant(0);function pie(data){var i,j,k,a1,v,n=data.length,sum=0,index=new Array(n),arcs=new Array(n),a0=+startAngle.apply(this,arguments),da=Math.min(tau,Math.max(-tau,endAngle.apply(this,arguments)-a0)),p=Math.min(Math.abs(da)/n,padAngle.apply(this,arguments)),pa=p*(da<0?-1:1);for(i=0;i0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},common_utils_nearestSortingDetails=function nearestSortingDetails(dataModel){var nearestSortDerivation=[].concat(common_utils_toConsumableArray(dataModel.getAncestorDerivations()),common_utils_toConsumableArray(dataModel.getDerivations())).reverse().find(function(derivation){return derivation.op===dist_datamodel.DM_DERIVATIVES.SORT});return nearestSortDerivation?nearestSortDerivation.criteria:null},common_utils_sortingOrder=function sortingOrder(a,b){return a instanceof InvalidAwareTypes||b instanceof InvalidAwareTypes?1:a.localeCompare(b)},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return common_utils_sortingOrder(firstVal,secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return common_utils_sortingOrder(secondVal,firstVal)}),_sortOrderMap),sortCategoricalField=function sortCategoricalField(sortOrder,firstVal,secondVal){var sortOrderType=common_utils_typeof(sortOrder);return sortOrderType===FUNCTION?sortOrder(firstVal,secondVal):sortOrderType===STRING&&sortOrderMap[sortOrder]?sortOrderMap[sortOrder](firstVal,secondVal):null},common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},difference=function difference(arr1,arr2){var _accessors2=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors2[0],fn2=_accessors2[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return!set.has(fn1(value))})},partition=function partition(array,filterFn){return array.reduce(function(acc,v,i){return filterFn(v,i,array)?acc[0].push(v):acc[1].push(v),acc},[[],[]])},mix=function mix(superclass){return{with:function _with(){for(var _len4=arguments.length,mixins=new Array(_len4),_key4=0;_key4<_len4;_key4++)mixins[_key4]=arguments[_key4];return mixins.reduce(function(cls,mixin){return mixin(cls)},superclass)}}},common_utils_componentRegistry=function componentRegistry(comps){var reg=Object.assign({},comps),regObj={register:function register(def,customKey){var key=customKey||def.formalName();return reg[key]=def,regObj},get:function get(){return reg}};return regObj},common_utils_getReadableTicks=function getReadableTicks(domain,steps){var orderedDomain=[Math.min.apply(Math,common_utils_toConsumableArray(domain)),Math.max.apply(Math,common_utils_toConsumableArray(domain))];if(steps<3)return orderedDomain;var tempScale=quantize().domain(orderedDomain).nice(),legendTicks=null;return legendTicks=Symbols.axisBottom().scale(tempScale).scale().ticks(steps),Math.max.apply(Math,common_utils_toConsumableArray(legendTicks))orderedDomain[0]&&legendTicks.unshift(orderedDomain[0]),legendTicks},common_utils_transformColor=function transformColor(rgbaValues,_ref7,datum,apply){var _ref7$h=_ref7.h,h=void 0===_ref7$h?0:_ref7$h,_ref7$s=_ref7.s,s=void 0===_ref7$s?0:_ref7$s,_ref7$l=_ref7.l,l=void 0===_ref7$l?0:_ref7$l,a=_ref7.a,_RGBAToHSLA$code=_slicedToArray(function RGBAToHSLA(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r/=255,g/=255,b/=255;var cmin=Math.min(r,g,b),cmax=Math.max(r,g,b),delta=cmax-cmin,h=0,s=0,l=0;return h=0===delta?0:cmax===r?(g-b)/delta%6:cmax===g?(b-r)/delta+2:(r-g)/delta+4,(h=Math.round(60*h))<0&&(h+=360),l=(cmax+cmin)/2,s=+(100*(s=0===delta?0:delta/(1-Math.abs(2*l-1)))).toFixed(1),l=+(100*l).toFixed(1),{color:"hsla(".concat(h,",").concat(s,"%,").concat(l,"%,").concat(a,")"),code:[h,s,l,a]}}.apply(void 0,common_utils_toConsumableArray(rgbaValues)).code,4),origH=_RGBAToHSLA$code[0],origS=_RGBAToHSLA$code[1],origL=_RGBAToHSLA$code[2],origA=_RGBAToHSLA$code[3],sanitizedA=parseFloat(a||origA,10),newH=origH+h,newS=origS+s,newL=origL+l,newA=sanitizedA+1;return apply||(newA=sanitizedA-1),{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH,newS,newL,newA]}},pointWithinCircle=function pointWithinCircle(c,point){var cx=c.x,cy=c.y,r=c.r,x=point.x,y=point.y;return Math.sqrt(Math.pow(cx-x,2)+Math.pow(cy-y,2))<=r},common_utils_dmMultipleSelection=function dmMultipleSelection(targetData,dm){var targetFields=targetData[0],payloadMap=targetData.slice(1,targetData.length).reduce(function(acc,v){return acc[v]=v,acc},{}),measures=Object.keys(dm.getFieldspace().getMeasure());return function filterFn(fields,i){return"".concat(targetFields.map(function(field){var val;if(field===reserved_fields.MEASURE_NAMES)val=measures;else if(field===reserved_fields.ROW_ID)val=i;else{var currentField=fields[field];val=currentField instanceof InvalidAwareTypes?currentField.value():(currentField||{}).internalValue}return val}))in payloadMap}},getIndexMap=function getIndexMap(arr,prop){return arr.reduce(function(acc,v,i){return acc[prop?v[prop]:v]=i,acc},{})};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function constantNull(){return null}function remove_remove(){var parent=this.parentNode;parent&&parent.removeChild(this)}function selection_cloneShallow(){var clone=this.cloneNode(!1),parent=this.parentNode;return parent?parent.insertBefore(clone,this.nextSibling):clone}function selection_cloneDeep(){var clone=this.cloneNode(!0),parent=this.parentNode;return parent?parent.insertBefore(clone,this.nextSibling):clone}var filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}var cssNode,cssRoot,cssView,svgNode,degrees=180/Math.PI,decompose_identity={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},decompose=function(a,b,c,d,e,f){var scaleX,scaleY,skewX;return(scaleX=Math.sqrt(a*a+b*b))&&(a/=scaleX,b/=scaleX),(skewX=a*c+b*d)&&(c-=a*skewX,d-=b*skewX),(scaleY=Math.sqrt(c*c+d*d))&&(c/=scaleY,d/=scaleY,skewX/=scaleY),a*d180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i.call(this,t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i.call(this,t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i.call(this,t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},textTween:function(value){var key="text";if(arguments.length<1)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function textTween(value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function textInterpolate(i){return function(t){this.textContent=i.call(this,t)}}(i)),t0}return tween._value=value,tween}(value))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},renderer_utils_applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},appendElement=function appendElement(element1,element2){element1.appendChild(element2)},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_addClass=function addClass(element,className,selector,filterFn){src_select(element).selectAll(selector).each(function(data){var elem=src_select(this);filterFn?filterFn(data)&&elem.classed(className,!0):elem.classed(className,!0)})},renderer_utils_removeClass=function removeClass(element,className,selector,filterFn){src_select(element).selectAll(selector).each(function(data){var elem=src_select(this);filterFn?filterFn(data)&&elem.classed(className,!1):elem.classed(className,!1)})},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i}));var sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(data);sel.enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_clipElement=function clipElement(container,measurement,id){var clipPathElement=makeElement(src_select(container),"clipPath",[1],"#".concat(id));makeElement(clipPathElement,"rect",[1]).attr("x",measurement.x).attr("y",measurement.x).attr("width",measurement.width).attr("height",measurement.height),clipPathElement.attr("clip-path","url(#".concat(id,")"))},renderer_utils_getElementsByClassName=function getElementsByClassName(node,className){return src_select(node).selectAll(className).nodes()},getMousePos=function getMousePos(element,event){var boundingClientRect=element.getBoundingClientRect();return{x:event.x-boundingClientRect.x,y:event.y-boundingClientRect.y}},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_createElement=function createElement(tag,mount){return src_select(mount).append(tag).node()},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(11),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var _len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];if(params.length){var _ref$takesMultiplePar=(meta||{}).takesMultipleParams,takesMultipleParams=void 0!==_ref$takesMultiplePar&&_ref$takesMultiplePar,val=takesMultipleParams?params:params[0];if(meta){var values,prevVal=context.get(nsProp,subNamespace),sanitization=meta.sanitization,typeCheck=meta.typeCheck,typeExpected=meta.typeExpected;if("function"==typeof sanitization&&(val=sanitization(val,prevVal,holder)),"function"==typeof typeCheck)typeCheck(val)&&(values=val);else"string"==typeof typeCheck&&"constructor"===typeCheck?val&&val.constructor.name===typeExpected&&(values=val):values=val;var preset=meta.preset,oldValues=toArray(context.get(nsProp,subNamespace));preset&&preset(values,holder),takesMultipleParams&&oldValues.forEach(function(value,i){void 0===values[i]&&(values[i]=value)}),values&&context.commit(nsProp,values,subNamespace)}else context.commit(nsProp,val,subNamespace);return holder}return context.get(nsProp,subNamespace)}}(store,conf.meta,nameSpaceProp,Array.isArray(conf.value))}if(subNamespace)for(var key in stateProps)store.commit(key,stateProps[key][subNamespace],subNamespace);else void 0===namespace?store.append(stateProps):store.append(namespace,stateProps);return[holder,store]},SmartlabelManager=__webpack_require__(8),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,CLASSPREFIX="muze",STACK="stack",GROUP="group",IDENTITY="identity",constants_ANGLE="angle",constants_RADIUS="radius",SIZE="size",COLOR="color",SHAPE="shape",TEXT="text",OUTER_RADIUS_VALUE="outerRadiusValue",TEXT_ANCHOR_MIDDLE="middle",ENCODING={X:"x",Y:"y",X0:"x0",Y0:"y0",RADIUS:"radius",RADIUS0:"radius0",ANGLE:"angle",ANGLE0:"angle0",COLOR:"color",SHAPE:"shape",SIZE:"size",TEXT:"text"},STROKE_DASHARRAY="stroke-dasharray",ASCENDING="asc",AGG_FN_SUM="sum",AREA_LAYER="area",ARC_LAYER="arc",LINE_LAYER="line",TEXT_LAYER="text",POINT_LAYER="point",BAR_LAYER="bar",TICK_LAYER="tick",SIMPLE_LAYER="simple",BASE_LAYER="base";function simple_layer_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")")))})}(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=Math.min(minTickSpace.width,tickDimWidth),minTickHeight=Math.min(minTickSpace.height,tickDimHeight);return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain))),Math.max.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain))),Math.max.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+(tickValues?axisNamePadding:0)}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?{allTickDimensions:allTickDimensions,tickSize:0,tickDimensions:{height:0,width:0},axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks}:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var renderConfig=axisInstance.renderConfig(),config=axisInstance.config(),show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName,mount=axisInstance.mount(),orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix;if(show){var availableSpace,labelProps,tickSize,selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});if(selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axisInstance.domain().length>0){var labelManager=axisInstance.dependencies().labelManager,range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter;tickSize=axisInstance.getTickSize(),labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks)),availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions,axis_renderer_setFixedBaseline(axisInstance),labels.rotation||!1!==labels.smartTicks?(selectContainer.call(axis),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize)):selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0)}var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"_getRawTickValue",value:function _getRawTickValue(data){return data}},{key:"getTicksBasedOnData",value:function getTicksBasedOnData(tickData){var _this=this,allTicks=renderer_utils_selectElement(this.mount()).selectAll(".tick"),elementToBeModified=null,elementNotToBeModified=null;return tickData&&(elementToBeModified=allTicks.filter(function(tickValue){return tickData===_this._getRawTickValue(tickValue)}),elementNotToBeModified=allTicks.filter(function(tickValue){return!(tickData===_this._getRawTickValue(tickValue))})),{selectionSet:elementToBeModified,rejectionSet:elementNotToBeModified||allTicks}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){"@babel/helpers - typeof";return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){"@babel/helpers - typeof";return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops?config.stops:config.range&&config.range.length>2?config.range.length:DEFAULT_CONFIG.stops),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}},sanitiseConfigIntervals=function sanitiseConfigIntervals(intervals){return intervals||5};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(common_utils_hslInterpolator(),range.map(function(e){return props_getHslString(e)})),i=0;ioriginalRangeLen){var newRange=[],newDomain=originalDomain.map(function(d,i){return i/originalDomainLen});this._linearScale=scaleMap.linear().range(this._config.range).domain(newDomain);for(var i=0,len=originalDomainLen;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,domainRangeFn=this._colorStrategy.domainRange(),scaleType=this._colorStrategy.scale,scaleInfo=domainRangeFn(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.scaleDomain||this.domain()),this.setRangeWithInterpolatedColors(scaleType,scaleInfo)}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=Math.min(defaultValue(color[3],0),1),newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=Math.min(a+transformationArr[3]||0,1);return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:51,range:[51,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]&&1!==domain.length?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().stops);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",WIDTH="width",HEIGHT="height",constants_MEASUREMENT="measurement",constants_CONFIG="config",MIN_UNIT_WIDTH="minUnitWidth",MIN_UNIT_HEIGHT="minUnitHeight",DIMENSIONS="dimensions",MEASURES="measures",DIMENSION="dimension",MEASURE="measure",PIVOT="pivot",FORMAT="format",constants_MOUNT="mount",HAS_DATA_UPDATED="hasDataUpdated",ROWS="rows",COLUMNS="columns",constants_DATA="data",COL="col",ROW="row",COLUMN="column",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",DETAIL="detail",LAYERS="layers",TRANSFORM="transform",enums_constants_ORDINAL="ordinal",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",enums_constants_TOP="top",enums_constants_BOTTOM="bottom",RETINAL="retinal",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",INITIALIZED="initialized",EXIT_CELLS="exitCell",AXIS="axis",UNIT="unit",UPDATED="updated",BEFORE_UPDATE="beforeupdate",VALUE_MATRIX="valueMatrix",FACET_HEADERS="facet-headers",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",ARC="arc",constants_CATEGORICAL="categorical",constants_TEMPORAL="temporal",BAR="bar",LINE="line",POINT="point",PRIMARY="Primary",SECONDARY="Secondary",BOTH="both",INTERACTION="interaction",GRID_LINES="gridLines",GRID_BANDS="gridBands",HEADER="header",FACET="facet",DEFAULT="default",constants_ASCENDING="asc",DESCENDING="desc",DARK="dark",NONE="none",NORMAL="normal",DARKER="darker";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(row[valueFieldIndex]instanceof src_InvalidAwareTypes&&(row[valueFieldIndex]=null),obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));var source=pointObj.source;return pointObj.dataObj=fieldsArr.reduce(function(acc,name){return acc[name]=source[fieldsConfig[name].index],acc},{}),pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),helpers_getNormalizedData=function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr=transformType===IDENTITY?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)},domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return sort===ASCENDING?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||transformType===STACK?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||transformType===STACK?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),defFn=function defFn(d){var _d$update=d.update;return{x:_d$update.x,y:_d$update.y}},helpers_attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref,accessor=arguments.length>2&&void 0!==arguments[2]?arguments[2]:defFn;voronoi.data((_ref=[]).concat.apply(_ref,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var _accessor=accessor(d);return{x:_accessor.x,y:_accessor.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},helpers_animateGroup=function animateGroup(mount,context){var groupTransition,update,transition=context.transition,groupAnimateStyle=context.groupAnimateStyle,duration=transition.duration,effect=transition.effect,disabled=transition.disabled;groupAnimateStyle&&(renderer_utils_setStyles(mount.node(),groupAnimateStyle.enter),update=groupAnimateStyle.update,groupTransition=disabled?mount:mount.transition().ease(easeFns[effect]).duration(duration).on("end",function(){helpers_updateStyle(renderer_utils_selectElement(this),update,!0)}),helpers_updateStyle(groupTransition,update))},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},getGroupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=getGroupSpan(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_renderLayer=function renderLayer(context){var mount=context.mount();mount&&(context.render(mount),context.dependencies().throwback.commit(common_props.ON_LAYER_DRAW,!0,context.metaInf().parentNamespace))},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){return function transformResolverPredicates(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig(),xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return[!xField,!yField,!groupByField,getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE,xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION,dimensionField&&encodingFieldInf[dimensionField]===groupByField]}(context.encodingFieldsInf(),context,context.config().transform.groupBy).some(function(value){return value})?IDENTITY:null},getValidTransform=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType=common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]===AGG_FN_SUM?STACK:GROUP}return transformType},helpers_getMarkId=function getMarkId(source,schema){return source.filter(function(val,i){return schema[i]&&schema[i].type===dist_datamodel.FieldType.DIMENSION}).join()},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(initialStyle){var conf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{originalStyle:Object.assign({},{styles:initialStyle},conf),currentState:new Map}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i0&&(interactionType=function getLastItemInMap(map){return Array.from(map)[map.size-1]}(currentState)[0],stylesForCurrentLevel=currentState.get(interactionType)||{}),stylesForCurrentLevel},strokeProps={"stroke-width":1,stroke:1,"stroke-opacity":1},parseStyle=function parseStyle(value,_ref,apply){var datum=_ref.datum,datumStyle=_ref.datumStyle;if("function"==typeof value){if(isNaN(datumStyle))value=value(datumStyle.replace(/[^\d,.]/g,"").split(",").map(function(s){return Number(s)}),datum,apply);else value=value(parseFloat(datumStyle,10),datum,apply);return value}return value},helper_applyStylesOnInteraction=function applyStylesOnInteraction(context,elem,interactionType,conf,options){var datum,mountPoint=options.mountPoint,apply=options.apply,reset=options.reset,d=elem.data()[0],_datum$meta=(datum=Array.isArray(d)?d[0]:Array.isArray(d.data)?d.data[0]:d).meta,currentState=_datum$meta.currentState,originalStyle=_datum$meta.originalStyle,applicableStyles={},styles=conf.style,strokePosition=conf.strokePosition,applicableStrokePos=strokePosition;reset&¤tState.clear();var applyStyle=!0;if(apply){var sanitizedStyles={styles:{},strokePosition:strokePosition};for(var type in styles){var parsedStyleVal=parseStyle(styles[type],{datum:datum,datumStyle:elem.style(type)},apply);sanitizedStyles.styles[type]=parsedStyleVal}currentState.set(interactionType,sanitizedStyles),applicableStyles=sanitizedStyles.styles}else if(currentState.has(interactionType)||reset){currentState.delete(interactionType);var currentStyle=getPreviousStyle(datum.meta,interactionType);applicableStyles=Object.assign({},originalStyle.styles,currentStyle.styles),applicableStrokePos=currentStyle.strokePosition||originalStyle.strokePosition}else applyStyle=!1;var styleKeys=Object.keys(applicableStyles),_partition2=helper_slicedToArray(partition(styleKeys,function(v){return v in strokeProps}),2),strokeStyles=_partition2[0],otherStyles=_partition2[1];applyStyle&&context.applyStyles({strokeStyles:strokeStyles,otherStyles:otherStyles,styleObj:applicableStyles,elem:elem,datum:datum,applicableStrokePos:applicableStrokePos,mountPoint:mountPoint})};function base_mixin_typeof(obj){"@babel/helpers - typeof";return(base_mixin_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _construct(Parent,args,Class){return(_construct=function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&base_mixin_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function base_mixin_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function base_mixin_slicedToArray(arr,i){return function base_mixin_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function base_mixin_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function base_mixin_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function base_mixin_toConsumableArray(arr){return function base_mixin_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref2=[]).concat.apply(_ref2,base_mixin_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,idx=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI=this.encodingFieldsInf(),yField=_this$encodingFieldsI.yField,xField=_this$encodingFieldsI.xField,yFieldType=_this$encodingFieldsI.yFieldType;if(_this$encodingFieldsI.xFieldType===dist_datamodel.FieldType.MEASURE)measureIndex=fieldsConfig[xField].index,enc="x";else if(yFieldType===dist_datamodel.FieldType.MEASURE){var layerName=this.constructor.formalName();measureIndex=fieldsConfig[yField].index,enc="y",layerName===AREA_LAYER&&(enc=idx%2==0?"y":"y0")}var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc]||0,row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i1&&renderer_getElementsForLine({mount:mount,data:d,strokeStyle:strokeStyle,className:".".concat(className,"-").concat(nullDataLineClass),layer:layer,linepath:linepath,transition:transition,updateFns:updateFns}),null}),elementWithNullData},line_default_config_defaultConfig={classPrefix:CLASSPREFIX,defClassName:"layer-line",className:"",interpolate:"linear",transform:{type:"group"},interaction:{fade:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},focus:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},brushStroke:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}}},crossline:!0,nearestPointThreshold:20,encoding:{color:{},x:{},y:{},strokeOpacity:{value:1},fillOpacity:{value:0},strokeWidth:{value:"2px"}},transition:{effect:"cubic",duration:1e3},connectNullData:!1,nullDataLineStyle:{},nullDataLineClass:"null"};__webpack_require__(21);function line_mixin_typeof(obj){"@babel/helpers - typeof";return(line_mixin_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function line_mixin_toConsumableArray(arr){return function line_mixin_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return this.getDataFromEvent(config.event)}},{key:"getDataFromEvent",value:function getDataFromEvent(event){var dataPoint=renderer_utils_selectElement(event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf({fill:color}),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_mixin_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),_class}()};function arc_typeof(obj){"@babel/helpers - typeof";return(arc_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function arc_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":TEXT_ANCHOR_MIDDLE}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}},{key:"getNearestPoint",value:function getNearestPoint(x,y,_ref){var event=_ref.event;return this.data()?this.getDataFromEvent(event):null}},{key:"getDataFromEvent",value:function getDataFromEvent(event){return helpers_getDataFromEvent(this,event)}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),_class}()};function text_typeof(obj){"@babel/helpers - typeof";return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update);var pathEl=makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr);renderer_utils_setStyles(pathEl,style)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:CLASSPREFIX,defColorStyle:"stroke",interaction:{highlight:{className:"highlight-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"center"},focusStroke:{className:"focus-stroke-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"outside"},commonDoubleStroke:{style:{stroke:"black","stroke-width":"2px"},strokePosition:"outside"},brushStroke:{className:"brush-stroke-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"outside"},doubleStroke:{style:{stroke:"black","stroke-width":"2px"},strokePosition:"outside"},fade:{style:{fill:function fill(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},focus:{style:{fill:function fill(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}}},innerPadding:.1,nearestPointThreshold:5,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},stroke:{value:"#000"},"stroke-width":{value:0},fill:{},shape:{value:"circle"},x:{},y:{},"stroke-opacity":{value:1},"fill-opacity":{value:.5},strokePosition:{value:"center"},interaction:{anchors:"highlight","persistent-anchors":"focusStroke","brush-anchors":"brushStroke"}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]};__webpack_require__(25);function point_helper_slicedToArray(arr,i){return function point_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function point_helper_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function point_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var helper_prepareDrawingInf=function prepareDrawingInf(_ref){var data=_ref.data,datum=_ref.datum,i=_ref.i,layerInst=_ref.layerInst,xPx=_ref.xPx,yPx=_ref.yPx,axes=layerInst.axes(),shapeAxis=axes.shape,colorAxis=axes.color,sizeAxis=axes.size,shape=shapeAxis.getShape(datum.shape),size=sizeAxis.getSize(datum.size),color=colorAxis.getColor(datum.color),layerEncoding=layerInst.config().encoding,stroke=layerEncoding.stroke.value,strokeWidth=layerEncoding["stroke-width"].value,resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,stroke:stroke,"stroke-width":strokeWidth,size:size,shape:shape,data:datum},data:datum},i,data,layerInst),rowId=datum.rowId,source=datum.source;shape=resolvedEncodings.shape,size=resolvedEncodings.size;var style={fill:color=resolvedEncodings.color,stroke:resolvedEncodings.stroke,"stroke-width":resolvedEncodings["stroke-width"]},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};return{enter:pos,update:pos,shape:shape,source:source,rowId:rowId,style:style,data:datum.dataObj,meta:Object.assign({layerId:layerInst.id()},getColorMetaInf(style,{strokePosition:layerEncoding.strokePosition.value})),size:size}},helper_pointTranslators=function helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},COORD_TYPES.CARTESIAN,function(data,config,layerInst){for(var points=[],encoding=layerInst.config().encoding,axes=layerInst.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,fieldsConfig=layerInst.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],_map2=point_helper_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];if(xPx+=offsetX,yPx+=offsetY,!isNaN(xPx)&&!isNaN(yPx)){var point=helper_prepareDrawingInf({data:data,datum:d,i:i,layerInst:layerInst,xPx:xPx,yPx:yPx});point.className=getIndividualClassName(d,i,data,layerInst),points.push(point),layerInst.cachePoint(d[key],point)}},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{};return helper_pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var seriesClassName,_this2=this,maxSize=0,config=this.config(),keys=this._transformedData.map(function(d){return d.key}),transition=config.transition,className=config.className,defClassName=config.defClassName,classPrefix=config.classPrefix,normalizedData=this._normalizedData,containerSelection=renderer_utils_selectElement(container),qualifiedClassName=getQualifiedClassName(defClassName,this.id(),classPrefix);this._points=[],this._pointMap={},containerSelection.classed(qualifiedClassName.join(" "),!0).classed(className,!0),this._points=this.generateDataPoints(normalizedData,keys),this._graphicElems={};var schema=this.data().getSchema();return makeElement(container,"g",this._points,null,{update:function update(group,points){maxSize=Math.max.apply(Math,[maxSize].concat(point_mixin_toConsumableArray(points.map(function(d){return d.size||0})))),seriesClassName="".concat(qualifiedClassName[0]),_this2.constructor.drawFn()({layer:_this2,container:group.node(),points:points,interpolate:config.interpolate,className:seriesClassName,transition:transition,keyFn:function keyFn(v){return helpers_getMarkId(v.source,schema)}})}},function(data){return data[0].rowId}),this._maxSize=2*Math.sqrt(maxSize/Math.PI),this.attachDataToVoronoi(this._points),this}},{key:"attachDataToVoronoi",value:function attachDataToVoronoi(points){helpers_attachDataToVoronoi(this._voronoi,points)}},{key:"generateDataPoints",value:function generateDataPoints(normalizedData,keys){var _this3=this,_getPlotMeasurement2=point_mixin_slicedToArray(helpers_getPlotMeasurement(this,keys),2),widthMetrics=_getPlotMeasurement2[0],heightMetrics=_getPlotMeasurement2[1],offsetXValues=widthMetrics.offsetValues||[],offsetYValues=heightMetrics.offsetValues||[];return normalizedData.map(function(dataArr,i){var measurementConf=_this3.getMeasurementConfig(offsetXValues[i],offsetYValues[i],widthMetrics.span,heightMetrics.span);return _this3.translatePoints(dataArr,measurementConf)}).filter(function(d){return d.length})}},{key:"getMeasurementConfig",value:function getMeasurementConfig(offsetX,offsetY,widthSpan,heightSpan){return{offset:{x:(offsetX||0)+widthSpan/2,y:(offsetY||0)+heightSpan/2},span:{x:widthSpan,y:heightSpan}}}},{key:"getNearestPoint",value:function getNearestPoint(x,y){var nearestPointThreshold=this.config().nearestPointThreshold,distanceLimit=Math.max(this._maxSize,nearestPointThreshold);if(!this.data())return null;var point=this._voronoi.find(x,y,distanceLimit),dimensions=point&&point.data.data.update,radius=point?Math.sqrt(point.data.data.size/Math.PI):0;if(point&&pointWithinCircle({x:dimensions.x,y:dimensions.y,r:radius+nearestPointThreshold},{x:x,y:y})){var _point$data$data=point.data.data,source=_point$data$data.source,rowId=_point$data$data.rowId;return{id:this.getIdentifiersFromData(source,rowId),dimensions:[{x:dimensions.x,y:dimensions.y,width:radius,height:radius}],layerId:this.id()}}return null}},{key:"addOverlayPath",value:function addOverlayPath(refElement,data,style,strokePosition){var pathElement,container=refElement.parentElement;if(this._overlayPath[data.rowId]?pathElement=this._overlayPath[data.rowId]:((pathElement=makeElement(container,"path",[data.update],null,{},function(d){return"".concat(d.x," ").concat(data.rowId)})).style("fill","none"),pathElement.style("fill-opacity",0),pathElement.attr("id",data.rowId),this._overlayPath[data.rowId]=pathElement),"stroke-width"===style.type){var position=strokePosition,radius=Math.sqrt(data.size/Math.PI);radius=getStrokeWidthByPosition(position,radius);var size=data.size+radius;if("string"==typeof data.shape){var path=common_utils_getSymbol(data.shape).size(size);pathElement.attr("d",path)}}var styleVal=style.value;"function"==typeof styleVal&&(styleVal=styleVal(pathElement.style(style.type)));pathElement.style(style.type,styleVal),appendElement(refElement,pathElement.node())}},{key:"removeOverlayPath",value:function removeOverlayPath(data,style){var currentPath=this._overlayPath[data.rowId];currentPath&&(currentPath.node().removeAttribute("style"),Object.keys(style).forEach(function(s){return currentPath.style(s,style[s])}),currentPath.style("fill-opacity",0))}},{key:"getBoundBoxes",value:function getBoundBoxes(){return helpers_getBoundBoxes(this._points.flat())}},{key:"applyElementStyles",value:function applyElementStyles(elem,styles,styleObj){styles.forEach(function(type){elem.select("path").style(type,styleObj[type])})}}],[{key:"defaultConfig",value:function defaultConfig(){return point_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=point_mixin_get(point_mixin_getPrototypeOf(_class),"defaultPolicy",this).call(this,conf,userConf),encoding=config.encoding,transform=config.transform,colorField=encoding.color&&encoding.color.field;return colorField&&(transform.groupBy=colorField),config}},{key:"drawFn",value:function drawFn(){return point_renderer}}]),_class}()};function point_typeof(obj){"@babel/helpers - typeof";return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],xAxis=axes.x,yAxis=axes.y,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),layer_registry=function(){var layers=arguments.length>0&&void 0!==arguments[0]?arguments[0]:DEFAULT_LAYERS,reg=Object.assign({},layers),regObj={register:function register(def){var key=def.formalName();return reg[key]=def,regObj},get:function get(){return reg}};return regObj},helpers=Object.assign(helpers_namespaceObject,{pointLayerHelpers:point_helper_namespaceObject}),layerMixins={BarLayerMixin:bar_mixin_BarLayerMixin,BaseLayerMixin:base_mixin_BaseLayerMixin,LineLayerMixin:line_mixin_LineLayerMixin,AreaLayerMixin:area_mixin_AreaLayerMixin,PointLayerMixin:point_mixin_PointLayerMixin,TextLayerMixin:text_mixin_TextLayerMixin,TickLayerMixin:tick_mixin_TickLayerMixin,ArcLayerMixin:arc_mixin_ArcLayerMixin};function src_helper_toConsumableArray(arr){return function src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})},helper_X=ENCODING.X,helper_Y=ENCODING.Y,helper_RADIUS=ENCODING.RADIUS,helper_ANGLE=ENCODING.ANGLE,helper_ANGLE0=ENCODING.ANGLE0,RADIUS0=ENCODING.RADIUS0,helper_getLayerAxisIndex=function getLayerAxisIndex(layers,fields){var layerAxisIndex={};return layers.forEach(function(layer){var _layer$config=layer.config(),axis=_layer$config.axis,encoding=_layer$config.encoding,id=layer.id();[helper_X,helper_Y,helper_ANGLE,helper_ANGLE0,helper_RADIUS].forEach(function(type){var index,specificField=getObjProp(encoding,type,"field"),encodingField=type===helper_RADIUS?defaultValue(specificField,getObjProp(encoding,RADIUS0,"field")):getObjProp(encoding,type,"field"),field=defaultValue(getObjProp(axis,type),encodingField);index=fields[type]&&fields[type].length?fields[type].findIndex(function(fieldInst){return-1!==fieldInst.getMembers().indexOf(field)}):0,!layerAxisIndex[id]&&(layerAxisIndex[id]={}),layerAxisIndex[id][type]=index})}),layerAxisIndex},helper_unionDomainFromLayers=function unionDomainFromLayers(layers,axisFields,layerAxisIndex,fieldsConfig){var domains={};return(layers=layers.filter(function(layer){return null!==layer.getDataDomain()})).forEach(function(layer){var domainValues={},config=layer.config(),layerDomain=layer.getDataDomain(),layerId=layer.id();null!==layerDomain&&!1!==config.calculateDomain&&(domainValues=Object.entries(layerDomain),domains=domainValues.reduce(function(fieldDomain,domain){var encodingType=domain[0],axisIndex=layerAxisIndex[layerId][encodingType],field=getObjProp(axisFields,encodingType,axisIndex);!fieldDomain[encodingType]&&(fieldDomain[encodingType]={});var encodingDomain=fieldDomain[encodingType];if(field){var fieldStr="".concat(field);encodingDomain[fieldStr]=encodingDomain[fieldStr]||[],encodingDomain[fieldStr]=function getValidDomain(domain,domain1,encodingType,fieldType){return encodingType===helper_ANGLE||encodingType===helper_ANGLE0?domain.concat(domain1.filter(function(d){return-1===domain.indexOf(d)})):unionDomain([domain,domain1],fieldType)}(encodingDomain[fieldStr],domain[1],encodingType,fieldsConfig[field.getMembers()[0]].def.subtype)}return fieldDomain},domains))}),domains},helper_renderLayers=function renderLayers(context,container,layers,measurement){context._lifeCycleManager.notify({client:layers,action:"beforedraw",formalName:"layer"});var classPrefix=context.config().classPrefix,orderedLayers=layers.sort(function(a,b){return a.config().order-b.config().order}),layerParentGroup=makeElement(container,"g",[1],"".concat(classPrefix,"-layer-group")),layerDepOrder=getDependencyOrder(context._layerDepOrder),groups={};makeElement(layerParentGroup,"g",orderedLayers,null,{update:function update(group,layer){groups[layer.alias()]={group:group,layer:layer}}}),layerDepOrder.map(function(name){return groups[name]}).filter(function(d){return void 0!==d}).forEach(function(o){var layer=o.layer,group=o.group;layer.measurement(measurement),layer.dataProps({timeDiffs:context._timeDiffs}),!1!==layer.config().render&&layer.mount(group.node())})},helper_getNearestDimensionalValue=function getNearestDimensionalValue(context,position){var fields=context.fields();if(!fields.x.length||!fields.y.length)return null;var data=context.data(),axes=context.axes(),fieldsConfig=data.getFieldsConfig(),xField=getObjProp(fields,"x",0).getMembers()[0],yField=getObjProp(fields,"y",0).getMembers()[0],xFieldType=fieldsConfig[xField].def.subtype,yFieldType=fieldsConfig[yField].def.subtype,entryVal=[["x",xFieldType,xField],["y",yFieldType,yField]].find(function(entry){return entry[1]===dist_datamodel.DimensionSubtype.CATEGORICAL||entry[1]===dist_datamodel.DimensionSubtype.TEMPORAL});if(!entryVal||xFieldType!==dist_datamodel.MeasureSubtype.CONTINUOUS&&yFieldType!==dist_datamodel.MeasureSubtype.CONTINUOUS)return null;var field=entryVal[2],index=fieldsConfig[field].index,key=axes[entryVal[0]][0].invert(position[entryVal[0]]);if(entryVal[1]===dist_datamodel.DimensionSubtype.TEMPORAL){var filterData=src_helper_toConsumableArray(new Set(data.getData().data.map(function(d){return d[index]})));key=getNearestValue(filterData,key)}return void 0!==key?[[field],[key]]:null},getLayersBy=function getLayersBy(layers,searchBy,value){return layers.filter(function(layer){return("type"===searchBy?layer.constructor.formalName():layer.alias())===value})},removeLayersBy=function removeLayersBy(layers,searchBy,value){layers.filter(function(inst){return("type"===searchBy?inst.config().mark:inst.alias())!==value||(inst.remove(),!1)})},helper_createSideEffectGroup=function createSideEffectGroup(container,className){return makeElement(container,"g",[1],className).node()},createRenderPromise=function createRenderPromise(unit){unit._renderedPromise.then(function(){unit._renderedPromise=new Promise(function(resolve){unit._renderedResolve=resolve}),createRenderPromise(unit)})},getRadiusRange=function getRadiusRange(width,height){var config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]},helper_setAxisRange=function setAxisRange(context){var radiusAxes=context.axes().radius;radiusAxes&&radiusAxes.forEach(function(axis){axis.range(getRadiusRange(context.width(),context.height()))})},helper_createRTree=function createRTree(context){var _ref,elements=(_ref=[]).concat.apply(_ref,src_helper_toConsumableArray(context.layers().filter(function(layer){return!1!==layer.config().interactive}).map(function(layer){return layer.getBoundBoxes()}))).flat().filter(function(d){return null!==d}),rtree=new RTree;return rtree.load(elements),rtree},reactive_props_CONFIG="config",reactive_props_DATA="data",AXES="axes",LAYERDEFS="layerDef",reactive_props_WIDTH="width",reactive_props_HEIGHT="height",reactive_props_MOUNT="mount",reactive_props_TRANSFORM="transform",TRANSFORMEDDATA="transformedData",DATADOMAIN="dataDomain",FIELDS="fields",LAYERAXISINDEX="layerAxisIndex",reactive_props_LAYERS="layers",reactive_props_DOMAIN="domain",enums_constants_CLASSPREFIX="muze",IDFIELD="__id__",GRID_LINE_PARENT_GROUP_CLASS="grid-lines",GRID_BAND_PARENT_GROUP_CLASS="grid-bands",GRID_PARENT_GROUP="grid-parent-group",enums_constants_BAND="band",TICK="tick",GRID_BAND="gridBands",GRID_LINE="gridLines",CONSOLIDATED="consolidated",FRAGMENTED="fragmented",FACET_BY_FIELDS="facetByFields",RETINAL_FIELDS="retinalFields",PARENT_ALIAS="parentAlias",constants_LAYERS="layers",CACHED_DATA="cachedData",STORE="store",DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},set=this._set,uidMap=this._uidMap,retObj={entrySet:[[],[]],exitSet:[[],[]],mergedEnter:[],mergedExit:[],completeSet:[]},dimVals=this._dimVals,keepDims=config.keepDims,_config$fields=config.fields,fields=void 0===_config$fields?[]:_config$fields,_config$keys=config.keys,keys=void 0!==_config$keys&&_config$keys,measureNames=this._measureNames,_loop=function _loop(key){var measureNamesArr=measureNames[key]||[],val=void 0;val=keepDims?fields.map(function(field){return field===reserved_fields.MEASURE_NAMES?measureNamesArr:field===reserved_fields.ROW_ID?uidMap[key]:dimVals[key][_this._fieldIndices[field]]}):keys?key:measureNamesArr.length?[uidMap[key],measureNamesArr]:[uidMap[key]],set[key]>0?([SELECTION_OLD_ENTRY,SELECTION_NEW_ENTRY].forEach(function(v,i){set[key]===v&&retObj.entrySet[i].push(val)}),set[key]!==SELECTION_OLD_ENTRY&&set[key]!==SELECTION_NEW_ENTRY||retObj.mergedEnter.push(val)):set[key]<0&&([SELECTION_OLD_EXIT,SELECTION_NEW_EXIT].forEach(function(v,i){set[key]===v&&retObj.exitSet[i].push(val)}),set[key]!==SELECTION_OLD_EXIT&&set[key]!==SELECTION_NEW_EXIT||retObj.mergedExit.push(val)),retObj.completeSet.push(val)};for(var key in set)_loop(key);return retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){i in set&&(set[i]=SELECTION_NULL)});else for(var key in set)set[key]=SELECTION_NULL;return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}}]),SelectionSet}();function muze_firebolt_src_helper_toConsumableArray(arr){return function muze_firebolt_src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffect=this.sideEffects()[name],setTransform=options.setTransform;selectionSet=setTransform?setTransform(selectionSet,payload,sideEffect):selectionSet,sideEffect.apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"shouldApplyHighlightEffect",value:function shouldApplyHighlightEffect(){return!0}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],behaviourEffectMap=this._behaviourEffectMap,sideEffects=getSideEffects(behaviour,behaviourEffectMap);if(this._propagationInf=propagationInfo,this._payloads[behaviour]=payload,action){action.dispatch(payload),this._entryExitSet[behaviour]=action.entryExitSet();var shouldApplySideEffects=this.shouldApplySideEffects(propagationInfo);if(this.shouldApplyHighlightEffect(behaviour)&&(propagate&&this.propagate(behaviour,payload,action.propagationIdentifiers(),{sideEffects:sideEffects}),shouldApplySideEffects)){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,this.getEntryExitSet(behaviour),payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._behaviourPolicies[behaviour]||(this._behaviourPolicies[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sideEffectPolicies[sideEffect]||(this._sideEffectPolicies[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sideEffectPolicies[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._behaviourPolicies[behaviour][key],this}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){var handler=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.onDataModelPropagation();return dataModel.unsubscribe("propagation"),dataModel.on("propagation",handler),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),target=SideEffect.target();if(target===context.target()||"all"===target){var sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"target",value:function target(){return"all"}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this.registerPhysicalActionHandlers(),this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{model:propagationInf.data?propagationInf.data:null,uids:criteria?function getKeysFromCriteria(criteria,firebolt){if(criteria){var data=firebolt.data(),dimensionsMap=firebolt._metaData.dimensionsMap,values=[];if(isSimpleObject(criteria))getDataModelFromRange(data,criteria).getData({withUid:!0}).data.forEach(function(row){var id=row[row.length-1],measures=criteria[reserved_fields.MEASURE_NAMES]||dimensionsMap[id]||[];measures.length?measures.forEach(function(measureArr){values.push("".concat([id].concat(firebolt_toConsumableArray(measureArr))))}):values.push([id])});else{var dimsMapGetter=firebolt._dimsMapGetter;values=firebolt_getUidsFromCriteria(criteria,{dm:firebolt.data(),dimensionsMap:dimensionsMap,dimsMapGetter:dimsMapGetter})}return values}return null}(criteria,this):null}}},{key:"getSelectionSet",value:function getSelectionSet(action){return this.selectionSet()[action]}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}},{key:"data",value:function data(){return this.context.data()}},{key:"currentData",value:function currentData(){return this.data()}},{key:"triggerPhysicalAction",value:function triggerPhysicalAction(event,payload){var handlers=this._handlers[event]||[],genericHandlers=this._handlers["*"];return[].concat(firebolt_toConsumableArray(Object.values(handlers)),firebolt_toConsumableArray(Object.values(genericHandlers))).forEach(function(fn){fn(event,payload)}),this}},{key:"onPhysicalAction",value:function onPhysicalAction(event,fn,namespace){return!this._handlers[event]&&(this._handlers[event]={}),this._handlers[event][namespace]=fn,this}},{key:"registerPhysicalActionHandlers",value:function registerPhysicalActionHandlers(){var _this4=this;this.onPhysicalAction("*",function(event,payload){_this4._actionBehaviourMap[event].behaviours.forEach(function(beh){return _this4.dispatchBehaviour(beh,payload)})})}},{key:"id",value:function id(){return this.context.id()}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(){var _this$context;return(_this$context=this.context).getRangeFromIdentifiers.apply(_this$context,arguments)}},{key:"sanitizePayload",value:function sanitizePayload(payload){return payload}},{key:"payloadGenerators",value:function payloadGenerators(){return arguments.length&&Object.assign(this._payloadGenerators,arguments.length<=0?void 0:arguments[0]),this._payloadGenerators}},{key:"getPayloadGeneratorFor",value:function getPayloadGeneratorFor(action){var defaultFn=this._payloadGenerators.__default,fn=this._payloadGenerators[action];return defaultValue(fn,defaultFn)}},{key:"getPayload",value:function getPayload(action){return this._payloads[action]}},{key:"actions",value:function actions(){return this._actions}}]),Firebolt}();function entry_exit_set_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.fields.map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria)},this}return this._entryExitSet}},{key:"getSetInfo",value:function getSetInfo(type,set,filteredDataModel){var sourceId=this.firebolt.getPropagationInf().sourceId,data=this.firebolt.data();return new entry_exit_set_EntryExitSet({uids:set,filteredModel:function filteredModel(fullData){var model=null;if("complete"===type)return fullData;if("mergedEnter"===type&&sourceId)model=filteredDataModel;else{var uidMap=set.reduce(function(acc,v){return acc[v[0]]=1,acc},{});model=fullData.select(function(fields){return fields[reserved_fields.ROW_ID]in uidMap},{saveChild:!1})}return model},data:data})}},{key:"propagationIdentifiers",value:function propagationIdentifiers(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(params.length){var propData=null,selectionSet=params[0],payload=params[1],fieldsConfig=this.firebolt.data().getFieldsConfig(),criteria=payload.criteria,propagationFields=this._propagationFields;if(selectionSet.resetted()||null===criteria)propData=null;else if(isSimpleObject(criteria)){var fields=Object.keys(criteria),otherFields=generic_slicedToArray(partition(fields,function(d){return fieldsConfig[d]?fieldsConfig[d].def.subtype===dist_datamodel.DimensionSubtype.CATEGORICAL:d===reserved_fields.MEASURE_NAMES}),2)[1],allFields=fields.filter(function(d){return d===reserved_fields.ROW_ID||fieldsConfig[d]&&fieldsConfig[d].def.subtype===dist_datamodel.DimensionSubtype.CATEGORICAL}),mergedEnter=selectionSet.getSets({keepDims:!0,fields:allFields}).mergedEnter;propData={fields:fields.map(function(d){return fieldsConfig[d]?fieldsConfig[d].def:{name:d}}),range:this.firebolt.getRangeFromIdentifiers({criteria:criteria,entrySet:selectionSet.getSets().mergedEnter,fields:otherFields}),identifiers:[[].concat(generic_toConsumableArray(allFields),[reserved_fields.MEASURE_NAMES])].concat(generic_toConsumableArray(mergedEnter))}}else{var _fields=propagationFields?[].concat(generic_toConsumableArray(propagationFields),[reserved_fields.MEASURE_NAMES]):criteria[0],_mergedEnter=selectionSet.getSets({keepDims:!0,fields:_fields}).mergedEnter;propData={fields:_fields.map(function(d){return fieldsConfig[d]?fieldsConfig[d].def:{name:d}}),identifiers:[_fields].concat(generic_toConsumableArray(_mergedEnter))}}return this._propagationIdentifiers=propData,this}return this._propagationIdentifiers}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}},{key:"propagateWith",value:function propagateWith(){return this._propagationFields=arguments.length<=0?void 0:arguments[0],this}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}();function volatile_typeof(obj){"@babel/helpers - typeof";return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iendPos.x&&(newStartPos.x=endPos.x,newEndPos.x=startPos.x),startPos.y>endPos.y){var y=startPos.y;newStartPos.y=endPos.y,newEndPos.y=y}var payload=drag_action_config(firebolt,{startPos:newStartPos,endPos:newEndPos});payload.dragging=!0,payload.dragDiff=Math.abs(startPos.x-endPos.x)+Math.abs(startPos.y-endPos.y),firebolt.triggerPhysicalAction(action,payload)}}).on("end",function(){var event=renderer_utils_getEvent();endPos={x:event.x,y:event.y};var duration=(new Date).getTime()-touchStart;if(!(touch&&duration>100&&Math.abs(startPos.x-endPos.x)<=5)){if(endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height)),startPos.x>endPos.x){var x=startPos.x;startPos.x=endPos.x,endPos.x=x}if(startPos.y>endPos.y){var y=startPos.y;startPos.y=endPos.y,endPos.y=y}var payload=drag_action_config(firebolt,{startPos:startPos,endPos:endPos});payload.dragEnd=!0,payload.hideSelBox=!0,firebolt.triggerPhysicalAction(action,payload)}}))},physical_hover=function hover(firebolt){return function(targetEl){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:!0,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,getAllPoints:!1,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};firebolt.triggerPhysicalAction(HOVER,payload),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){firebolt.triggerPhysicalAction(HOVER,{criteria:null})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},selection_box_drag_selectionBoxDrag=function selectionBoxDrag(firebolt){return function(targetEl){var subject,drawingInf,context=firebolt.context,onDrag=function onDrag(payload){firebolt.triggerPhysicalAction(actions_namespaceObject.SELECTIONDRAG,payload)},d3Drag=renderer_utils_getD3Drag();targetEl.call(d3Drag().on("start",function(){var event=renderer_utils_getEvent();drawingInf=context.getDrawingContext(),subject=event.subject}).on("drag",function(){var event=renderer_utils_getEvent();subject.x+=event.dx,subject.y+=event.dy;var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(firebolt,{startPos:{x:x,y:y},endPos:{x:x2,y:y2}});onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(firebolt,{startPos:{x:x,y:y},endPos:{x:x2,y:y2}});payload.dragEnd=!0,onDrag(payload)}}))}},physical_click=function click(firebolt){return function(targetEl){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);firebolt.triggerPhysicalAction(CLICK,payload),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl){drag_event_attachDragEvent(targetEl,DRAG,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?firebolt.triggerPhysicalAction(LONGTOUCH,{criteria:null}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);firebolt.triggerPhysicalAction(LONGTOUCH,payload),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),physical_defineProperty(_physicalActions,SELECTIONDRAG,selection_box_drag_selectionBoxDrag),_physicalActions),side_effects_ANCHORS="anchors",side_effects_TOOLTIP="tooltip",side_effects_BRUSH_ANCHORS="brush-anchors",side_effects_PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",side_effects_HIGHLIGHTER="highlighter",CROSSLINE="crossline",FRAGMENTED_TOOLTIP="fragmented-tooltip",AXIS_LABEL_HIGHLIGHTER="axis-label-highlighter",generic_props_PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},layers=arguments.length>2?arguments[2]:void 0,interactionType=config.interactionType,apply=config.apply,_config$reset=config.reset,reset=void 0!==_config$reset&&_config$reset;return(layers||this.firebolt.context.layers()).forEach(function(layer){if(!1!==layer.config().interactive){var layerFields=layer.data().getFieldsConfig(),filteredUids=set.uids.filter(function(_ref){var _ref2$=surrogate_slicedToArray(_ref,2)[1];return(void 0===_ref2$?[]:_ref2$).every(function(m){return m in layerFields})}).map(function(d){return d[0]}),options={apply:apply,reset:reset,styles:null};layer.applyInteractionStyle(interactionType,filteredUids,options)}}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){"@babel/helpers - typeof";return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model,classPrefix=config.classPrefix;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function){makeElement(mount,"div",[1],"".concat(classPrefix,"-tooltip-html-container")).html(data())}else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"",{update:function update(elem,elemData){return elem.attr("class",elemData.className)}}),_cells=makeElement(_rows,"span",function(d){return d.data},"".concat(classPrefix,"-tooltip-content"));_cells.attr("class","".concat(classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block"}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=src_default_config_defaultConfig.content;return config.classPrefix=src_default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className="".concat(classPrefix,"-").concat(contentClass,"-").concat(name),specificClass="".concat(classPrefix,"-").concat(contentConfig.className),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className," ").concat(specificClass)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target;if(target){var node=this._tooltipContainer.node(),tooltipPos=this._orientation;if("left"===tooltipPos||"right"===tooltipPos?y+node.offsetHeighttarget.y+target.height:x+node.offsetWidthtarget.x+target.width){var path;this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===tooltipPos?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===tooltipPos?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===tooltipPos&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else this._tooltipConnectorContainer.style("display","none")}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,contentContainer=this._contentContainer.node();this._tooltipContainer.style("top","0px").style("left","0px").style("width","2000px").style("height","2000px");var offsetWidth=contentContainer.offsetWidth+4,offsetHeight=contentContainer.offsetHeight+4,config=this._config,offset=this._offset,spacing=config.spacing,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,bottomSpace=extent.height-(dim.y+dim.height+offset.y),arrowSize=spacing,tooltipHeight=offsetHeight+arrowSize,tooltipWidth=offsetWidth+arrowSize,spaces=[{position:"top",value:topSpace-tooltipHeight},{position:"right",value:rightSpace-tooltipWidth},{position:"left",value:leftSpace-tooltipWidth},{position:"bottom",value:bottomSpace-tooltipHeight}],positionHorizontal=function positionHorizontal(positionVal){var position,x=dim.x+dim.width,y=dim.y;return"right"===positionVal?(position="left",x+=arrowSize):"left"===positionVal&&(x=dim.x-offsetWidth,position="right",x-=arrowSize),dim.height0?positionHorizontal(hMax.position):positionVertical(vMax.position);return this._position={x:obj.x,y:obj.y},this._tooltipContainer.style("height","".concat(offsetHeight,"px")).style("width","".concat(offsetWidth,"px")),this._orientation=obj.position,draw&&this.position(obj.x,obj.y),this}},{key:"hide",value:function hide(){return this._tooltipContainer.style("display","none"),this._tooltipConnectorContainer.style("display","none"),this}},{key:"show",value:function show(){return this._tooltipContainer.style("display","block"),this}},{key:"extent",value:function extent(_extent){return this._extent=_extent,this}},{key:"offset",value:function offset(_offset){return this._offset=_offset,this}},{key:"remove",value:function remove(){return this._tooltipContainer.remove(),this._tooltipConnectorContainer.remove(),this}}],[{key:"defaultConfig",value:function defaultConfig(){return src_default_config_defaultConfig}}]),Tooltip}(),HIGHLIGHT_SUMMARY="highlightSummary";function strategies_construct(Parent,args,Class){return(strategies_construct=function strategies_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&strategies_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function strategies_setPrototypeOf(o,p){return(strategies_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function strategies_toConsumableArray(arr){return function strategies_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1;hasMultipleMeasures&&content.push({data:[icon,formattedRetinalValue]});var isSelected=(target&&target[1][target[0].indexOf(retField)])===retinalFieldValue;measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,formatterFn=_fieldInf$measure.fn,currentMeasureValue=valueArr[measureIndex],value=formatterFn(currentMeasureValue),keyValue=strategies_getKeyValue({field:hasMultipleMeasures?"".concat(dName).concat(separator):formattedRetinalValue,value:value,classPrefix:classPrefix,margin:hasMultipleMeasures?margin:void 0,isSelected:isSelected,stackedSum:stackedSum,stackedValue:currentMeasureValue instanceof strategies_InvalidAwareTypes?currentMeasureValue.value():currentMeasureValue.toFixed(2),isStackedBar:isStackedBar});hasMultipleMeasures||(keyValue.data=[icon].concat(strategies_toConsumableArray(keyValue.data))),content.push(keyValue)})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$retinalField=context.retinalFields,color=_context$retinalField.color,shape=_context$retinalField.shape,size=_context$retinalField.size,detailFields=context.detailFields||[],_ref2$showStackSum=(context.config||{}).showStackSum,showStackSum=void 0===_ref2$showStackSum||_ref2$showStackSum,_context$payload$sele=context.payload.selectedMeasures,selectedMeasures=void 0===_context$payload$sele?[]:_context$payload$sele,dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(strategies_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),isStacked=function isStackedChart(layers){return layers.some(function(d){return"stack"===d.transformType()})}(context.layers),isStackedBar=function isStackedBarChart(layers){return layers.some(function(d){return"stack"===d.transformType()&&d.config().mark===BAR})}(context.layers),filteredMeasures=isSingleValue(dataLen,isStacked)?measures:measures.filter(function(d){return-1===allMeasures.indexOf(d.name)});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataModel=selectionSet&&selectionSet.mergedEnter.model;if(!helper_shouldApplySideEffect(dataModel,this))return this;if(null===payload.criteria||dataModel&&dataModel.isEmpty()||null===selectionSet)return this.hide(options,null),this;var strategy=defaultValue(options.strategy,this._strategy);return this.createTooltip(dataModel,Object.assign({},{payload:payload,selectionSet:selectionSet,strategy:strategy,options:options}),null,0),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips,orientation=this.config().orientation;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var tooltip=tooltips[key],strategy=options.strategy||this._strategy;tooltip.content(strategy,null),Object.keys(tooltip._contents).length?tooltip.positionRelativeTo(tooltip._target,{orientation:orientation}):tooltip.hide()}}},{key:"getPlotPointsFromIdentifiers",value:function getPlotPointsFromIdentifiers(payload){var target=payload.target;return tooltip_get(tooltip_getPrototypeOf(Tooltip.prototype),"plotPointsFromIdentifiers",this).call(this,target||payload.criteria,{getBBox:!0})}},{key:"createTooltip",value:function createTooltip(dataModel){var props=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},plotDim=arguments.length>2?arguments[2]:void 0,key=arguments.length>3?arguments[3]:void 0,drawingInf=this.drawingContext(),sourceInf=this.sourceInfo(),config=this.config(),strategy=props.strategy,payload=props.payload,selectionSet=props.selectionSet;plotDim=(plotDim=defaultValue(plotDim,this.getPlotPointsFromIdentifiers(payload)))&&plotDim[0];var pad=config.padding,showInPosition=payload.showInPosition,tooltipPos=payload.position,_config$strategy=config[strategy],projectFields=_config$strategy.fields,dataTransform=_config$strategy.dataTransform,strategyFn=this._strategies[strategy],dt=dataTransform(dataModel,projectFields,this),layoutContainer=drawingInf.parentContainer,parentContainerDimensions=drawingInf.parentContainerDimensions,layoutBoundBox=layoutContainer.getBoundingClientRect(),unitBoundBox=drawingInf.htmlContainer.getBoundingClientRect(),offsetLeft=unitBoundBox.left-layoutBoundBox.left,offsetTop=unitBoundBox.top-layoutBoundBox.top,tooltipInst=this._tooltips[key]=this._tooltips[key]||new tooltip_Tooltip(layoutContainer,drawingInf.svgContainer);Object.assign(sourceInf,{payload:payload,firebolt:this.firebolt,detailFields:[],timeDiffs:sourceInf.timeDiffs,valueParser:this.valueParser(),selectionSet:selectionSet,config:config[strategy]}),tooltipInst.context(sourceInf),tooltipInst.content(strategy,dt,{formatter:strategyFn,order:config[strategy].order,className:config[strategy].className}).config(this.config()).extent({x:0,y:0,width:parentContainerDimensions.width,height:parentContainerDimensions.height}).offset({x:offsetLeft+(config.offset.x||0),y:offsetTop+(config.offset.y||0)}),showInPosition?tooltipInst.position(tooltipPos.x+pad,tooltipPos.y+pad):plotDim?tooltipInst.positionRelativeTo({x:plotDim.x,y:plotDim.y,width:plotDim.width||0,height:plotDim.height||0},{orientation:config.orientation}):tooltipInst.hide()}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{order:1,dataTransform:function dataTransform(dm,fields){return fields?dm.project(fields,{saveChild:!1}):dm}},selectionSummary:{order:0,dataTransform:function dataTransform(dm){return dm}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}},{key:"target",value:function target(){return"all"}}]),Tooltip}();function fragmented_tooltip_typeof(obj){"@babel/helpers - typeof";return(fragmented_tooltip_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function fragmented_tooltip_toConsumableArray(arr){return function fragmented_tooltip_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);idrawingInf.height:totalWidth>drawingInf.width)break;position&&boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(strategy,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return boxes.length&&function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})}),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"formalName",value:function formalName(){return FRAGMENTED_TOOLTIP}}]),FragmentedTooltip}();__webpack_require__(30);function crossline_typeof(obj){"@babel/helpers - typeof";return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]&&arguments[2]?common_utils_intersect:difference)(set.uids,selectedPointsId,[function(d){return d[0]},function(d){return d[0]}]);return function helper_objectSpread(target){for(var i=1;i0&&void 0!==arguments[0]?arguments[0]:[];return excludeSet instanceof Function?excludeSet(this.firebolt.getEntryExitSet):excludeSet.reduce(function(acc,behaviour){var selectedPointsIds=((_this2.firebolt.getEntryExitSet(behaviour)||{}).mergedEnter||{}).uids;return selectedPointsIds&&acc.push.apply(acc,plot_highlighter_toConsumableArray(selectedPointsIds)),acc},[])}},{key:"apply",value:function apply(selectionSet,payload){var options=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},currentStrategy=this._strategies[options.strategy||this._strategy],excludeSetIds=this.getExcludeSetIds(options.excludeSet);return currentStrategy({selectionSet:selectionSet,formattedSet:function plot_highlighter_objectSpread(target){for(var i=1;i3&&void 0!==arguments[3]?arguments[3]:{},propagationDataDims=[],criteria=null,propPayload=propConfig.payload,sourceIdentifiers=propConfig.sourceIdentifiers,excludeSelectedMeasures=propConfig.excludeSelectedMeasures,data=propagationDataModel.getData({withUid:!0}).data,payload=Object.assign({},propPayload),fieldsConfig=Object.assign({},propagationDataModel.getFieldsConfig(),function payload_generator_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},reserved_fields.ROW_ID,{index:Object.keys(propagationDataModel.getFieldsConfig()).length}));return!(propagationDataDims=Object.keys(propagationDataModel.getFieldspace().getDimension())).length&&(propagationDataDims=[reserved_fields.ROW_ID]),sourceIdentifiers&&function(){for(var identifierMap=function getIdentifierMeasureMap(identifiers,fields,facetsMap){var identifierIdxMap=getIndexMap(identifiers[0]);return identifiers.slice(1,identifiers.length).reduce(function(acc,row){var facetPresent=!0;for(var field in facetsMap){var facetVal=row[identifierIdxMap[field]];facetPresent=facetPresent&&facetVal===facetsMap[field]}if(facetPresent){var key=fields.map(function(field){var fieldIndex=identifierIdxMap[field];return row[fieldIndex]}),measureNamesIdx=identifierIdxMap[reserved_fields.MEASURE_NAMES];if(void 0!==measureNamesIdx){var measureArr=row[measureNamesIdx];!acc[key]&&(acc[key]=[]),measureArr&&measureArr.length&&acc[key].push([measureArr])}}return acc},{})}(sourceIdentifiers.identifiers,propagationDataDims,facetByFields),dataArr=[],_loop=function _loop(i,len){var row=data[i],dims=[];propagationDataDims.forEach(function(field){var idx=fieldsConfig[field].index;dims.push(row[idx])});var uid=row[row.length-1],dimKey="".concat(dims);if(dimKey in identifierMap){var measures=identifierMap[dimKey],allMeasures=instance._metaData.dimensionsMap[uid];if(excludeSelectedMeasures)difference(allMeasures,measures).forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))});else measures&&measures.length?measures.forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))}):dataArr.push([].concat(dims,[[]]))}else dataArr.push([].concat(dims,[[]]))},i=0,len=data.length;i2&&void 0!==arguments[2]?arguments[2]:{},obj=function getUniqueKeys(data,_ref2){var layers=_ref2.layers,uids=_ref2.uids,_ref2$keys=_ref2.keys,keys=void 0===_ref2$keys?{}:_ref2$keys,_ref2$dimensionsMap=_ref2.dimensionsMap,dimensionsMap=void 0===_ref2$dimensionsMap?{}:_ref2$dimensionsMap,dimensions=_ref2.dimensions;return data.forEach(function(row,i){var key=[uids[i]],dims=dimensions.map(function(d){return row[d.index]});layers.forEach(function(layer){var measureNames=Object.keys(layer.data().getFieldspace().getMeasure()),mKey="".concat([key].concat(firebolt_helper_toConsumableArray(measureNames)));keys[mKey]=defaultValue(keys[mKey],{}),keys[mKey]={dims:dims,measureNames:measureNames,uid:uids[i]},dimensionsMap[key]=defaultValue(dimensionsMap[key],[]),measureNames.length&&dimensionsMap[key].push(measureNames)})}),{keys:keys,dimensionsMap:dimensionsMap}}(data,{layers:layers,uids:uids,keys:maps.keys,dimensions:dimensions,dimensionsMap:maps.dimensionsMap});return{keys:obj.keys,dimensionsMap:obj.dimensionsMap}},createMapByDimensions=function createMapByDimensions(context,dm){var cacheMap=context._cacheMap={};return function(propDims,fieldsConfig){return(cacheMap=context._cacheMap)[propDims]||(cacheMap[propDims]=dm.getData({withUid:!0}).data.reduce(function(acc,row){var key=propDims.map(function(d){return row[fieldsConfig[d].index]});return acc[key]||(acc[key]=[]),acc[key].push(row),acc},{})),cacheMap[propDims]}};function src_firebolt_typeof(obj){"@babel/helpers - typeof";return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(transposeArray(Object.values(identifiers)))));for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}},BORDER_WIDTH={default:2,facet:1},cell_border_applier_handleBlankCell=function handleBlankCell(data){data.config().externalClassname.push("".concat(NONE,"-").concat(constants_LEFT)),data.config().externalClassname.push("".concat(NONE,"-").concat(constants_RIGHT))},cell_border_applier_sanitiseHeaderMatrix=function sanitiseHeaderMatrix(matrices,header){if(header)for(var i=0;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},getCellKey=function getCellKey(rowId,columnId){return"cell-".concat(rowId,"-").concat(columnId)},group_utils_extractUnitConfig=function extractUnitConfig(config){var unitConfig={};return[INTERACTION,GRID_LINES,GRID_BANDS].forEach(function(attr){void 0!==config[attr]&&(unitConfig[attr]=config[attr])}),unitConfig},hasOneField=function hasOneField(fields){return Object.keys(fields).some(function(d){return fields[d].length>0})},getHeaderText=function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i0?fields[0].map(function(cell,i){return new TextCell({type:HEADER,className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(getHeaderText(fieldHeaders,i,fields[0].length)).config({show:cell.config().show})}):[];return sanitizeCheck&&cell_border_applier_sanitiseHeaderMatrix(headers,!0),headers},group_utils_sanitizeCheck=function sanitizeCheck(){var isBorderPresent=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).isBorderPresent;return!isBorderPresent||["color","showRowBorders","showColBorders","showValueBorders"].every(function(d){return!isBorderPresent[d]})},group_utils_findInGroup=function findInGroup(variable,allFields){var channel=null;return[enums_constants_COLOR,enums_constants_SIZE,enums_constants_SHAPE].forEach(function(e){group_utils_this.store.get(e)&&variable===group_utils_this.store.get(e)[0]&&(channel=e)}),channel?{channel:channel}:([ROW,COL].forEach(function(facetType){allFields["".concat(facetType,"Facets")].forEach(function(e){e.toString()===variable&&(channel={channel:FACET,type:facetType===COL?COLUMN:ROW})})}),channel||([ROW,COL].forEach(function(projType){allFields["".concat(projType,"Projections")].forEach(function(e){e.forEach(function(m){m.toString()===variable&&(channel=projType===COL?X:Y)})})}),channel?{channel:channel}:null))},group_utils_getAxisType=function getAxisType(fieldsConfig,field){var fieldType=enums_constants_ORDINAL;return field&&fieldsConfig[field].def.type!==DIMENSION&&(fieldType=enums_constants_LINEAR),fieldType},retriveDomainFromData=function retriveDomainFromData(datamodel,fieldName){return datamodel.getFieldspace().fields.find(function(d){return d.name()===fieldName.toString()}).domain()},mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}},group_utils_getEncoder=function getEncoder(layers){var encoder=new cartesian_encoder_CartesianEncoder;return layers.length&&(encoder=layers.some(function(layerConf){return function hasPolarEncodings(layerConf){return layerConf.mark===ARC||[enums_constants_RADIUS,enums_constants_ANGLE].some(function(field){return getObjProp(layerConf.encoding,field)})}(layerConf)})?new polar_encoder_PolarEncoder:encoder),encoder},group_utils_getHeaderAxisFrom=function getHeaderAxisFrom(type,fields,userAxisFromConfig){var axisFrom=userAxisFromConfig[type],headerFrom="",options=type===ROW?[constants_LEFT,constants_RIGHT]:[enums_constants_BOTTOM,enums_constants_TOP],_fields=group_utils_slicedToArray(fields,2),firstField=_fields[0],secondField=_fields[1],firstFieldType=function firstFieldType(i){return firstField.length?firstField[i].type():null},secondFieldType=function secondFieldType(i){return secondField.length?secondField[i].type():null};return firstFieldType(firstField.length-1)===DIMENSION&&secondFieldType(0)===DIMENSION?(headerFrom=axisFrom?options[1-options.indexOf(axisFrom)]:options[1],axisFrom=type===COLUMN&&firstField[firstField.length-1].toString()===secondField[0].toString()?enums_constants_TOP:axisFrom||options[0]):secondFieldType(secondField.length-1)===DIMENSION?(headerFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM,axisFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM):(headerFrom=type===ROW?constants_LEFT:enums_constants_TOP,axisFrom=type===ROW?constants_LEFT:enums_constants_TOP),firstFieldType(firstField.length-1)===MEASURE&&secondFieldType(0)===MEASURE?axisFrom=type===ROW?constants_LEFT:enums_constants_TOP:secondFieldType(0)===MEASURE?axisFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM:firstFieldType(firstField.length-1)===MEASURE&&(axisFrom=type===ROW?constants_LEFT:enums_constants_TOP),[headerFrom,axisFrom]},setFacetsAndProjections=function setFacetsAndProjections(context,fieldInfo,encoder){var fields=fieldInfo.fields,type=fieldInfo.type,_encoder$simpleEncode=encoder.simpleEncoder.getFacetsAndProjections(fields,type),facets=_encoder$simpleEncode.facets,projections=_encoder$simpleEncode.projections;return context.facets(group_utils_defineProperty({},"".concat(type,"Facets"),facets)),context.projections(group_utils_defineProperty({},"".concat(type,"Projections"),projections)),{facets:facets,projections:projections,fields:fields}},getBorders=function getBorders(matrices,encoder){var showRowBorders={top:!1,bottom:!1,left:!1,right:!1},showColBorders={top:!1,bottom:!1,left:!1,right:!1},showValueBorders={top:!1,bottom:!1,left:!1,right:!1},rows=matrices.rows,columns=matrices.columns,valueMatrix=matrices.values,_rows=group_utils_slicedToArray(rows,2),leftRows=_rows[0],rightRows=_rows[1],_columns=group_utils_slicedToArray(columns,2),topColumns=_columns[0],bottomColumns=_columns[1],_encoder$fieldInfo=encoder.fieldInfo(),rowDimensions=_encoder$fieldInfo.rowDimensions,columnDimensions=_encoder$fieldInfo.columnDimensions,rowTemporalFields=_encoder$fieldInfo.rowTemporalFields,columnTemporalFields=_encoder$fieldInfo.columnTemporalFields,columnMeasures=_encoder$fieldInfo.columnMeasures,rowMeasures=_encoder$fieldInfo.rowMeasures,allDimensionLength=rowDimensions.length+columnDimensions.length,allMeasuresLength=rowMeasures.length+columnMeasures.length,allTemporalFieldsLength=rowTemporalFields.length+columnTemporalFields.length;if(encoder.constructor.type()===group_utils_POLAR){if(!allDimensionLength)return{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}}else if(!allMeasuresLength&&!allTemporalFieldsLength&&allDimensionLength<=2)return{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders};return showRowBorders=function getRowBorders(left,right){var borders={top:!1,bottom:!1,left:!1,right:!1};return(left.length>1||right.length>1)&&(borders.top=!0,borders.bottom=!0,borders.left=!0,borders.right=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={top:!1,bottom:!1,left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.top=!0,borders.bottom=!0,borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=[enums_constants_TOP,enums_constants_BOTTOM];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},getFieldsFromSuppliedLayers=function getFieldsFromSuppliedLayers(suppliedLayerConfig){var _ref3,encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}}),fields=(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return"object"===group_utils_typeof(d)?d.field:d})})));return group_utils_toConsumableArray(new Set(fields.filter(function(d){return d})))},group_utils_extractFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],facetNames=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet);facetNames.push(name);var facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([facetNames].concat(group_utils_toConsumableArray(keys)),schema).getData({sort:sortInfo}).data},group_utils_removeExitCells=function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)},encoder_props_PROPS={layers:{},data:{},globalConfig:{}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(COLUMN,fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}},{key:"getProjectionFields",value:function getProjectionFields(layers){return getFieldsFromSuppliedLayers(layers)}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){return hasOneField(fields)}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis};function matrix_model_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function matrix_model_objectSpread(target){for(var i=1;i1)){var _config$facetsUserCon=config.facetsUserConfig,facetsUserConfig=void 0===_config$facetsUserCon?{}:_config$facetsUserCon,border=config.border,_facetsUserConfig$isB=facetsUserConfig.isBorderPresent,isBorderPresent=void 0===_facetsUserConfig$isB?{}:_facetsUserConfig$isB,_facetsUserConfig$isG=facetsUserConfig.isGridLinePresent,isGridLinePresent=void 0===_facetsUserConfig$isG?{}:_facetsUserConfig$isG,gridLinesShowLength=Object.keys(isGridLinePresent).length,borderWidth=border.width,borderColor=border.color,borderStyle=border.style,showValueBorders=border.showValueBorders,showRowBorders=border.showRowBorders,showColBorders=border.showColBorders,gridLines={},borderConf={};0!==Object.keys(isBorderPresent).length&&isBorderPresent.width?Object.assign(borderConf,borderWidth?{width:borderWidth}:null,borderColor?{color:borderColor}:null,showValueBorders?{showValueBorders:showValueBorders}:null,showRowBorders?{showRowBorders:showRowBorders}:null,showColBorders?{showColBorders:showColBorders}:null,borderStyle?{style:borderStyle}:null):borderConf={width:BORDER_WIDTH[FACET]},gridLinesShowLength<=0&&(gridLines={x:{show:!1}}),conf={border:borderConf,gridLines:gridLines}}return conf}(facetInfo,projectionInfo,globalConfig);globalConfig=mergeRecursive(globalConfig,defaultConfig);var generalContext={matrix:matrix,geomCellCreator:geomCellCreator,projectionInfo:projectionInfo,splitModelsHashMap:splitModelsHashMap,colKeys:colKeys};if(rowKeys.length)rowKeys.forEach(function(rowKeyObj){var rowIndex=function createRowDataModels(rowContext,fieldInfo,sourceDM){var currentColumnIndex=0,rowIndexForCurrentKey=0,colKeys=rowContext.colKeys,rowKeyObj=rowContext.rowKeyObj,currentRowIndex=rowContext.currentRowIndex,newRowIndex=currentRowIndex,colContext=matrix_model_objectSpread({},rowContext,{rowKeyArr:rowKeyObj.keyArr,rowKey:rowKeyObj.joinedKey,newRowIndex:newRowIndex});if(rowIndexForCurrentKey=currentRowIndex,colKeys.length)colKeys.forEach(function(colKeyObj){colContext.colKeyObj=colKeyObj,colContext.currentColumnIndex=currentColumnIndex;var _createColumnDataMode=matrix_model_createColumnDataModels(colContext,fieldInfo,sourceDM),columnIndex=_createColumnDataMode.columnIndex,rowIndex=_createColumnDataMode.rowIndex;currentColumnIndex=columnIndex,rowIndexForCurrentKey=rowIndex});else{colContext.colKeyObj={keyArr:[],joinedKey:""},colContext.currentColumnIndex=currentColumnIndex;var _createColumnDataMode2=matrix_model_createColumnDataModels(colContext,fieldInfo,sourceDM),columnIndex=_createColumnDataMode2.columnIndex,rowIndex=_createColumnDataMode2.rowIndex;currentColumnIndex=columnIndex,rowIndexForCurrentKey=rowIndex}return{rowIndex:++rowIndexForCurrentKey}}(matrix_model_objectSpread({},generalContext,{rowKeyObj:rowKeyObj,currentRowIndex:currentRowIndex}),fieldInfo,dataModel).rowIndex;currentRowIndex=rowIndex});else if(colKeys.length){var currentColumnIndex=0,newRowIndex=currentRowIndex;colKeys.forEach(function(colKeyObj){var colContext=matrix_model_objectSpread({},generalContext,{rowKeyArr:[],rowKey:"",colKeyObj:colKeyObj,newRowIndex:newRowIndex,currentColumnIndex:currentColumnIndex}),_createColumnDataMode3=matrix_model_createColumnDataModels(colContext,fieldInfo,dataModel),columnIndex=_createColumnDataMode3.columnIndex,rowIndex=_createColumnDataMode3.rowIndex;currentRowIndex=rowIndex,currentColumnIndex=columnIndex})}else{var _currentColumnIndex=0,colContext=matrix_model_objectSpread({},generalContext,{rowKeyArr:[],rowKey:"",colKeyObj:{keyArr:[],joinedKey:""},newRowIndex:currentRowIndex,currentColumnIndex:_currentColumnIndex}),_createColumnDataMode4=matrix_model_createColumnDataModels(colContext,fieldInfo,dataModel),columnIndex=_createColumnDataMode4.columnIndex,rowIndex=_createColumnDataMode4.rowIndex;currentRowIndex=rowIndex,_currentColumnIndex=columnIndex}var formattedColKeys=formatKeys(colKeys.map(function(e){return e.keyArr}),colFacets.map(function(facetField){return facetField.rawFormat()}));return{matrix:matrix,rowKeys:formatKeys(rowKeys.map(function(e){return e.keyArr}),rowFacets.map(function(facetField){return facetField.rawFormat()})),columnKeys:formattedColKeys.length>0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;resolvedData instanceof datamodel_default.a&&resolvedData.dispose();var fields=getFieldsFromSuppliedLayers(suppliedLayers).filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),allFields=group_utils_extractFields(facetsAndProjections,fields);if(groupedModel=dataModel.project(allFields),resolver.data(groupedModel),!groupBy.disabled){var newFieldsConfig=groupedModel.getFieldsConfig(),dimensions=allFields.filter(function(field){return getObjProp(newFieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return fieldConfig[field].def.subtype===constants_TEMPORAL?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel),resolver.transformedData(groupedModel),groupedModel},cell_creator_computeMatrices=function computeMatrices(resolverConfig){var datamodel=resolverConfig.datamodel,encoders=resolverConfig.encoders,resolver=resolverConfig.resolver,globalConfig=resolverConfig.globalConfig,selection=resolverConfig.selection,transform=resolverConfig.transform,componentRegistry=resolverConfig.componentRegistry,groupBy=resolverConfig.groupBy,labelManager=resolverConfig.labelManager,fieldMap=resolverConfig.fieldMap,layerConfig=resolverConfig.layerConfig,registry=resolverConfig.registry,normalizedRows=resolverConfig.normalizedRows,normalizedColumns=resolverConfig.normalizedColumns,otherEncodings=resolverConfig.otherEncodings,facetsAndProjections=resolverConfig.facetsAndProjections,simpleEncoder=resolverConfig.simpleEncoder,config=resolverConfig.config,rowFacets=facetsAndProjections.rowFacets,colFacets=facetsAndProjections.colFacets,isFacet=rowFacets.length>0||colFacets.length>0;isFacet&&(globalConfig.isFacet=!0);var matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.cells.GeomCell),AxisCell:resolver.getCellDef(registry.cells.AxisCell),BlankCell:resolver.getCellDef(registry.cells.BlankCell),TextCell:resolver.getCellDef(registry.cells.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver);simpleEncoder.data(groupedModel);var cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=matrix_model_getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);group_utils_removeExitCells(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=mutateAxesFromMap(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;if(resolver.rowMatrix(rows),resolver.columnMatrix(columns),isFacet){var sanitizeCheckBorder=group_utils_sanitizeCheck(globalConfig.facetsUserConfig),arr=sanitizeCheckBorder&&function sanitiseBorderMatrix(matrices,blankCell){var leftMatrix=matrices.leftMatrix,rightMatrix=matrices.rightMatrix,topMatrix=matrices.topMatrix,bottomMatrix=matrices.bottomMatrix,bottomBorderObj={};return rightMatrix.length&&(bottomBorderObj=cell_border_applier_sanitiseFacetValues(rightMatrix,"".concat(constants_RIGHT),blankCell)),leftMatrix.length&&(bottomBorderObj=cell_border_applier_sanitiseFacetValues(leftMatrix,"".concat(constants_LEFT),blankCell)),topMatrix.length&&cell_border_applier_sanitiseHeaderMatrix(topMatrix),bottomMatrix.length&&cell_border_applier_sanitiseHeaderMatrix(bottomMatrix),bottomBorderObj}({leftMatrix:rows[0],rightMatrix:rows[1],topMatrix:columns[0],bottomMatrix:columns[1]},registry.cells.BlankCell);valueMatrixInfo.matrix=sanitizeCheckBorder&&function sanitiseGeomMatrix(matrices){for(var arr=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=0;i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:INITIALIZED,formalName:FACET_HEADERS}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"updateVisualUnit",value:function updateVisualUnit(retinalConfig){var retinalAxes=this.getRetinalAxes(),lifeCycleManager=this.dependencies().lifeCycleManager;lifeCycleManager.notify({client:this.axes(),action:INITIALIZED,formalName:AXIS}),lifeCycleManager.notify({client:this.units(),action:BEFORE_UPDATE,formalName:UNIT});var units=[],matrixLayers=this.matrixLayers(),props=["".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"),"".concat(namespace_namespaceObject.UNIT_GLOBAL_NAMESPACE,".domain")],store=this.store();return store.lockCommits(props),store.lockModel(),this.forEach(VALUE_MATRIX,function(i,j,el){el.axes(Object.assign(el.axes(),retinalAxes)),el.source()&&el.source().retinalFields(retinalConfig),el.layerDef(matrixLayers[i][j]),el.updateModel(),units.push(el.source())}),store.unlockModel().unlockCommits([props[0]]).unlockCommits([props[1]]),lifeCycleManager.notify({client:units,action:UPDATED,formalName:UNIT}),this}},{key:"getMatrices",value:function getMatrices(resolverConfig){return this._placeholderInfo=cell_creator_computeMatrices(resolverConfig),this._placeholderInfo}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}],[{key:"getterSetters",value:function getterSetters(){return RESOLVER_PROPS}}]),MatrixResolver}();function src_data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_data_type_scale_map_dataTypeScaleMap=(src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap={},dist_datamodel.FieldType.DIMENSION,scale_type_namespaceObject.BAND),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.CATEGORICAL,scale_type_namespaceObject.BAND),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.TEMPORAL,scale_type_namespaceObject.TIME),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.FieldType.MEASURE,scale_type_namespaceObject.LINEAR),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.MeasureSubtype.CONTINUOUS,scale_type_namespaceObject.LINEAR),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.BINNED,scale_type_namespaceObject.BAND),data_type_scale_map_dataTypeScaleMap);function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratio1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis},getIndex=function getIndex(arr,val){for(var i=0,arrIndex=-1;-1===arrIndex&&i1?axesCreators.position=BOTH:axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.dataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=getAdjustedDomain(max,min);else if(typeOfAxis===scale_type_namespaceObject.BAND){key=axisType?"".concat(idx,"00"):"0".concat(idx,"0");var currentFieldName=fieldsObj[axisType][key].oneVar(),sortingOrder=getSortingConfig(context,currentFieldName,axes[0].config);sortingOrder&&domains[axisType][key]instanceof Array&&domains[axisType][key].sort(function(a,b){return sortCategoricalField(sortingOrder,a,b)})}axes.forEach(function(axis,index){key=axisType?"".concat(idx,"0").concat(index):"0".concat(idx).concat(index),(domain=adjustedDomain[index]||domains[axisType][key])&&axis.domain(domain);var type=axisType?"y":"x";store.commit("".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.").concat(type),domain,"".concat(idx).concat(index))})})}),store.unlockModel()}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(fields,type){for(var facets=[],projections=[],counter=0,primaryFacets=[],secondaryFacets=[],primaryFields=fields[0],secondaryFields=fields[1],primaryLen=primaryFields.length,secondaryLen=secondaryFields.length,axisFrom=this.axisFrom(),i=0;icounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field),fieldInstance=groupedModel.getFieldspace().fieldsObj()[field];fieldInstance.schema().subtype===constants_TEMPORAL&&(domain=fieldInstance.data()),domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),colFieldType=colField.subtype(),mark=encoder_helper_getDefaultMark(colFieldType,rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=getLayerConfFromFields(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){var colProjections=fields.colProjections,rowProjections=fields.rowProjections,colFields=cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"hasMandatoryFields",this).call(this,{colProjections:colProjections}),rowFields=cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"hasMandatoryFields",this).call(this,{rowProjections:rowProjections});return colFields&&rowFields}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){"@babel/helpers - typeof";return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){var optionalProjections=fields.optionalProjections;return polar_encoder_get(polar_encoder_getPrototypeOf(PolarEncoder.prototype),"hasMandatoryFields",this).call(this,{optionalProjections:optionalProjections})}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){"@babel/helpers - typeof";return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){"@babel/helpers - typeof";return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}();__webpack_require__(35);function legend_marker_typeof(obj){"@babel/helpers - typeof";return(legend_marker_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_marker_defineProperties(target,props){for(var i=0;i0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{onset:function onset(context,value){return context.firebolt().attachPropagationListener(value)}},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}};var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+iconSpaces[i].width+2*effPadding):(labelSpaces[i].width=iconSpaces[i].width,itemSpaces[i].width=iconSpaces[i].width,labelSpaces[i].width=iconSpaces[i].width),totalWidth+=itemSpaces[i].width;else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelWidth+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,maxWidth=_this$measurement2.maxWidth,width=legend_helper_calculateTitleWidth(this.measurement(),this._labelManager.getOriSize(this._title.text).width,this.config()),_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var orientation=config.item.text.orientation,textAlign="left",alignment=measurement.alignment,maxWidth=measurement.maxWidth,width=measurement.width,height=measurement.height,border=measurement.border,padding=measurement.padding;"top"!==orientation&&"bottom"!==orientation&&alignment!==HORIZONTAL||(textAlign="center");var titleWidth=Math.min(maxWidth,width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(height,"px")).style("border-bottom","".concat(border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(maxWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(padding,"px")).text(title.text).style("text-align",textAlign).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor,alignment:POSITION_ALIGNMENT_MAP[this.config().position]},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),border=_this$measurement3.border,marginHorizontal=_this$measurement3.marginHorizontal,maxHeight=_this$measurement3.maxHeight,height=_this$measurement3.height,width=_this$measurement3.width,maxWidth=_this$measurement3.maxWidth,margin=this.measurement().margin,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom"),margin=marginHorizontal;break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top"),margin=marginHorizontal;break;default:marginPosition="margin-".concat("left")}legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left");var widthBox=legend_helper_calculateTitleWidth(this.measurement(),this._labelManager.getOriSize(this._title.text).width,this.config()),titleWidth=Math.min(maxWidth,widthBox);return width4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),icon).attr("transform","translate(".concat(transalate," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color).attr("stroke",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){"@babel/helpers - typeof";return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](ele)),gradient_legend_defineProperty(_ref,"value",+value.toFixed(1)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data,context._id),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border));var markerWithBuffer=LEGEND_MARKER_PROPS_size+LEGEND_MARKER_PROPS_BUFFER;align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," ").concat(markerWithBuffer,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),renderer_utils_applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(".concat(markerWithBuffer," ").concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-(gradientDimensions.width+markerWithBuffer)-2*padding),renderer_utils_applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),renderer_utils_applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height+markerWithBuffer,"px"),width:"".concat(gradientDimensions.width+markerWithBuffer,"px")}),renderer_utils_applyStyle(legendRect,{fill:"url(#linear-gradient-".concat(context._id,")")}),legendGradSvg.attr("height",gradientDimensions.height+markerWithBuffer),legendGradSvg.attr("width",gradientDimensions.width+markerWithBuffer),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.mapSideEffects(gradient_legend_defineProperty({},"highlight",["marker"])),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(_ref2){var fields=_ref2.fields,criteria=_ref2.criteria;return fields.reduce(function(range,v){return range[v]=criteria[v],range},{})}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){"@babel/helpers - typeof";return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainLeg.push(domain[1]),domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,range,value=null;if(i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}},sideEffects:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container"),baseFontLimit:16,upperFontLimit:24,baseSizeLimit:100,upperSizeLimit:300,fractionImage:.8,fractionChild:.7};function local_options_typeof(obj){"@babel/helpers - typeof";return(local_options_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function local_options_slicedToArray(arr,i){return function local_options_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function local_options_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function local_options_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var canvas_local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref){var _ref2=local_options_slicedToArray(_ref,2),arg1=_ref2[0],arg2=_ref2[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref3){var _ref4=local_options_slicedToArray(_ref3,2),title=_ref4[0],titleConfig=_ref4[1],t=title;"string"!=typeof title&&title||(t=function t(){return title});var defConfig=mergeRecursive({},TITLE_CONFIG);return[t,mergeRecursive(defConfig,titleConfig)]}}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref5){var _ref6=local_options_slicedToArray(_ref5,2),arg1=_ref6[0],arg2=_ref6[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref7){var _ref8=local_options_slicedToArray(_ref7,2),subtitle=_ref8[0],subtitleConfig=_ref8[1],sub=subtitle;"string"!=typeof subtitle&&subtitle||(sub=function sub(){return subtitle});var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return[sub,mergeRecursive(defConfig,subtitleConfig)]}}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){"@babel/helpers - typeof";return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){"@babel/helpers - typeof";return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},computations_bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(computations_bufferCondition).every(function(e){return computations_bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){"@babel/helpers - typeof";return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,specificBorderApplier=function specificBorderApplier(params){var borderTypes=params.borderTypes,showBorders=params.showBorders,cells=params.cells,borderInfo=params.borderInfo,name=params.name,isFacet=params.isFacet,color=borderInfo.color,style=borderInfo.style,width=borderInfo.width;borderTypes.forEach(function(borderType){!function applySpecificBorder(params){var type=params.type,borderWidth=params.borderWidth,borderStyle=params.borderStyle,cells=params.cells,color=params.color;cells.style("border-".concat(type),"".concat(borderWidth,"px ").concat(borderStyle," ").concat(color))}({cells:cells,color:showBorders[borderType]?color:"transparent",type:borderType,borderWidth:width,borderStyle:style,name:name,isFacet:isFacet})})},border_helper_applyBorders=function applyBorders(params){var cells=params.cells,border=params.border,row=params.row,column=params.column,isFacet=params.isFacet,showHeaders=params.showHeaders,name="".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column]),borderApplierFn=function borderApplier(cells,borderInfo,name,isFacet){var _ref2,showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return border_helper_defineProperty(_ref2={},"row",function(){return specificBorderApplier({borderTypes:["top","bottom"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"column",function(){return specificBorderApplier({borderTypes:["left","right"],showBorders:showColBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"center",function(){return specificBorderApplier({borderTypes:["left","right","top","bottom"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"left",function(){return specificBorderApplier({borderTypes:["left"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"right",function(){return specificBorderApplier({borderTypes:["right"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"".concat("center").concat("left"),function _(){return specificBorderApplier({borderTypes:["left","top","bottom"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"".concat("center").concat("right"),function _(){return specificBorderApplier({borderTypes:["right","top","bottom"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),_ref2}(cells,border,name,isFacet),borderMapVal=function borderMap(isFacet,showHeaders){var _ref;return border_helper_defineProperty(_ref={},"".concat("top","-").concat("left"),isFacet&&showHeaders?"left":null),border_helper_defineProperty(_ref,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_ref,"".concat("top","-").concat("right"),isFacet&&showHeaders?"right":null),border_helper_defineProperty(_ref,"".concat("center","-").concat("left"),isFacet?"".concat("center").concat("left"):"row"),border_helper_defineProperty(_ref,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_ref,"".concat("center","-").concat("right"),isFacet?"".concat("center").concat("right"):"row"),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("right"),null),_ref}(isFacet,showHeaders)[name];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"formalName",value:function formalName(){return"SimpleCell"}},{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"padding",(enums_defaults_defineProperty(_CONSTANTS$PADDING={},visual_cell_src_enums_constants_LEFT,8),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_RIGHT,8),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_TOP,10),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$PADDING)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"headerPadding",(enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD={},visual_cell_src_enums_constants_LEFT,8),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_RIGHT,5),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_TOP,2),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_BOTTOM,5),_CONSTANTS$HEADER_PAD)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"titlePadding",(enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$TITLE_PADD)),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){"@babel/helpers - typeof";return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidthcurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")}).each(function(d){d.legend.mount(this)})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}},{key:"setComponentInfo",value:function setComponentInfo(params){var rootNode=params.rootNode;this.components.forEach(function(legendInfo){legendInfo.legend.setParentInfo({canvasRoot:rootNode})})}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(37),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();__webpack_require__(38);function matrix_component_typeof(obj){"@babel/helpers - typeof";return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)MESSAGE_CONFIG.baseSizeLimit?MESSAGE_CONFIG.fractionChild*height:0,message=config.message;renderer_utils_applyStyle(node,{width:"".concat(width,"px"),height:"".concat(height,"px")});var childNode=makeElement(node,"div",[1],"".concat(className,"-child")),imageNode=makeElement(childNode,"div",[1],"".concat(className,"-child-img")),messageNode=makeElement(childNode,"div",[1],"".concat(className,"-child-message"));renderer_utils_applyStyle(childNode,{width:width,height:"".concat(childHeight,"px")}),renderer_utils_applyStyle(imageNode,{width:width,height:"".concat(childHeight*MESSAGE_CONFIG.fractionImage,"px")}),imageNode.html('\n\x3c!-- Generator: Sketch 60.1 (88133) - https://sketch.com --\x3e\n\nGroup 23\n Created with Sketch.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ');var textElement=makeElement(messageNode,"text",[1]);renderer_utils_applyStyle(messageNode,{"font-size":"".concat(function formatFontSize(width,height){var baseFontLimit=MESSAGE_CONFIG.baseFontLimit,upperFontLimit=MESSAGE_CONFIG.upperFontLimit,baseSizeLimit=MESSAGE_CONFIG.baseSizeLimit,upperSizeLimit=MESSAGE_CONFIG.upperSizeLimit,fontSize=upperFontLimit,dim=widthbaseSizeLimit&&dim0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function canvas_firebolt_helper_toConsumableArray(arr){return function canvas_firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1||rowProj.length>1))},helper_dispatchBehaviours=function dispatchBehaviours(firebolt,_ref){var payload=_ref.payload,unit=_ref.unit;_ref.behaviours.forEach(function(action){var actions=firebolt._actions.behavioural;payload.criteria=helper_addFacetDataAndMeasureNames(payload.criteria,unit.facetFieldsMap(),unit.layers().map(function(layer){return Object.keys(layer.data().getFieldspace().getMeasure())})),function addSelectedMeasuresInPayload(firebolt,unit,payload){var groupFields=firebolt.context.composition().visualGroup.resolver().getAllFields();if(isCrosstab(groupFields)){var measureFields,_unit$fields=unit.fields(),x=_unit$fields.x,y=_unit$fields.y;x.length&&y.length&&(x[0].type()===dist_datamodel.FieldType.MEASURE?measureFields=["".concat(x[0])]:y[0].type()===dist_datamodel.FieldType.MEASURE&&(measureFields=["".concat(y[0])]),payload.selectedMeasures=measureFields)}}(firebolt,unit,payload),payload.sourceCanvas=firebolt.sourceCanvas(),firebolt.dispatchBehaviour(action,payload,{propagate:!1,unit:unit});var identifiers=actions[action].propagationIdentifiers();firebolt.propagate(action,payload,identifiers,{sideEffects:getSideEffects(action,firebolt._behaviourEffectMap),sourceUnitId:unit.id(),sourceId:firebolt.id(),propagationDataSource:firebolt.getPropagationSource()})})},helper_attachBehaviours=function attachBehaviours(group){var allFields=group.resolver().getAllFields(),valueMatrix=group.matrixInstance().value,crosstab=isCrosstab(allFields);valueMatrix.each(function(cell){var firebolt=cell.valueOf().firebolt(),behaviours=crosstab?["pseudoSelect"]:[];firebolt._connectedBehaviours[behaviours_namespaceObject.SELECT]=behaviours})};function group_firebolt_typeof(obj){"@babel/helpers - typeof";return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{};!function propagateValues(instance,action){var config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,identifiers=config.identifiers,sourceUnitId=config.sourceUnitId,sourceCanvasId=config.sourceCanvasId,dataModel=config.propagationDataSource,sideEfffects=instance._sideEffectDefinitions,behaviourEffectMap=instance._behaviourEffectMap,propagationBehaviour=instance._propagationBehaviourMap[action]||action;payload.sourceUnit=sourceUnitId,payload.action=action,payload.sourceCanvas=sourceCanvasId;var groupId=sourceCanvasId,sourceBehaviour=instance._actions.behavioural[action],isMutableAction=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:identifiers,isMutableAction:isMutableAction,groupId:groupId,sourceId:config.sourceId,filterFn:function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||!!effects&&effects.some(function(d){return sideEfffects[d.name||d].mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.sourceCanvas()}};if(dataModel.propagate(identifiers,propConfig,!0),action!==propagationBehaviour){var behaviourInstance=instance._actions.behavioural[propagationBehaviour];isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),dataModel.propagate(identifiers,Object.assign({},propConfig,{isMutableAction:isMutableAction,applyOnSource:!1,action:propagationBehaviour,sourceId:isMutableAction?groupId:sourceUnitId,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.sourceCanvas()}}),!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}})}}(this,behaviour,Object.assign({payload:payload,identifiers:identifiers,propagationFields:this._propagationFields,sourceId:this.id(),sourceCanvasId:this.id(),propagationDataSource:this.data()},auxConfig))}},{key:"getPropagationSource",value:function getPropagationSource(){return this.context.composition().visualGroup._originalGroupedData}},{key:"sourceCanvas",value:function sourceCanvas(){return this.context.alias()}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects,payload,propagationInf){var _this4=this;if(payload.sideEffects)return[{effects:payload.sideEffects,behaviours:[payload.action]}];var mode=this.context.config().interaction.tooltip.mode;return propagationInf.propPayload=propagationInf.propPayload||payload,sideEffects.forEach(function(d){var mappedEffects=d.effects;mappedEffects=mappedEffects.filter(function(se){return(se.name!==side_effects_TOOLTIP||"fragmented"!==mode)&&isSideEffectEnabled(_this4,{se:se,propagationInf:propagationInf})}),d.effects=mappedEffects}),sideEffects}},{key:"dispatchBehaviour",value:function dispatchBehaviour(action,payload){var propagationInf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},units=this.context.composition().visualGroup.resolver().units(),_propagationInf$unit=propagationInf.unit,unit=void 0===_propagationInf$unit?units[0][0]:_propagationInf$unit,behaviourEffectMap=this._behaviourEffectMap,sideEffects=getSideEffects(action,behaviourEffectMap),sideEffectInstances=this.sideEffects();sideEffects.forEach(function(_ref3){_ref3.effects.forEach(function(effect){var name=effect.name,inst=sideEffectInstances[name];inst&&(inst.sourceInfo(function(){return unit.getSourceInfo()}),inst.layers(function(){return unit.layers()}),inst.plotPointsFromIdentifiers(function(){return unit.getPlotPointsFromIdentifiers.apply(unit,arguments)}),inst instanceof spawnable_SpawnableSideEffect&&inst.drawingContext(function(){return unit.getDrawingContext()}),inst.valueParser(unit.valueParser()))})}),group_firebolt_get(group_firebolt_getPrototypeOf(GroupFireBolt.prototype),"dispatchBehaviour",this).call(this,action,payload,propagationInf)}}],[{key:"defaultInteractionPolicy",value:function defaultInteractionPolicy(){return function(){}}},{key:"defaultCrossInteractionPolicy",value:function defaultCrossInteractionPolicy(){return _defaultCrossInteractionPolicy}}]),GroupFireBolt}(),APP_INITIAL_STATE={app:{group:{},units:{},layers:{},canvas:{}},local:{canvas:{},group:{},units:{},layers:{}}};function canvas_typeof(obj){"@babel/helpers - typeof";return(canvas_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function canvas_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function canvas_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:COMPONENTS,reg=Object.assign({},components);return{register:function register(cls){var key=cls.formalName();return reg[key]=cls,componentRegistry},get:function get(){return reg}}}(COMPONENTS),cells:cell_registry(),layers:layer_registry(),interactions:registry_registry};__webpack_require__(39);function muze_slicedToArray(arr,i){return function muze_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function muze_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function muze_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var muze_transactor=store_transactor,Smartlabel=SmartlabelManager_default.a,muze_enableChainedTransaction=enableChainedTransaction,muze_LifeCycleManager=lifecycle_manager,DataModel=datamodel_default.a,muze_Store=store_Store,globalCache={},defaultRegistry=default_registry_registry.components,overrideRegistryDefinitions=function overrideRegistryDefinitions(overrideRegistry,registry){overrideRegistry.forEach(function(def){registry.register(def)})},muze_muze=function muze(){var _transactor2=muze_slicedToArray(muze_transactor({},src_options),2),env=_transactor2[0],globalStore=_transactor2[1],components=Object.assign({},default_registry_registry.components.get()),componentSubRegistryDef=Object.assign({},SUBREGISTRIES),componentSubRegistry={};for(var prop in componentSubRegistryDef)componentSubRegistry[prop]=componentSubRegistryDef[prop](default_registry_registry[prop].get());return env.canvas=function(){var settings=globalStore.serialize(),canvas=canvas_Canvas.withSettings(settings,{components:components,componentSubRegistry:componentSubRegistry,interactions:default_registry_registry.interactions},env.globalDependencies());return muze_enableChainedTransaction(globalStore,canvas,Object.keys(settings)),canvas},env.globalDependencies=function(){return globalCache.smartlabel||(globalCache.smartlabel=new Smartlabel(1,"body")),{smartlabel:globalCache.smartlabel,lifeCycleManager:new muze_LifeCycleManager}},env.settings=function(){return globalStore.serialize()},env.registry=function(){for(var _len=arguments.length,overrideRegistry=new Array(_len),_key=0;_key<_len;_key++)overrideRegistry[_key]=arguments[_key];return overrideRegistry.length?(overrideRegistry.forEach(function(def){var prop=def.formalName();prop in defaultRegistry&&(components[prop]=def)}),env):components},env.cellRegistry=function(){for(var cellRegistry=componentSubRegistry.cellRegistry,_len2=arguments.length,overrideRegistry=new Array(_len2),_key2=0;_key2<_len2;_key2++)overrideRegistry[_key2]=arguments[_key2];return overrideRegistry.length?(overrideRegistryDefinitions(overrideRegistry,cellRegistry),env):cellRegistry.get()},env.layerRegistry=function(){for(var layerRegistry=componentSubRegistry.layerRegistry,_len3=arguments.length,overrideRegistry=new Array(_len3),_key3=0;_key3<_len3;_key3++)overrideRegistry[_key3]=arguments[_key3];return overrideRegistry.length?(overrideRegistryDefinitions(overrideRegistry,layerRegistry),env):layerRegistry.get()},env};muze_muze.registry=default_registry_registry,muze_muze.Components={VisualLayer:{layers:{BaseLayer:base_layer_BaseLayer,LineLayer:line_LineLayer,TextLayer:TextLayer,TickLayer:TickLayer,PointLayer:point_PointLayer,SimpleLayer:simple_layer_SimpleLayer,AreaLayer:area_AreaLayer,ArcLayer:ArcLayer},helpers:helpers,enums:src_enums_namespaceObject,layerMixins:layerMixins},VisualUnit:{constructor:visual_unit_VisualUnit,helpers:visual_unit_src_helper_namespaceObject,enums:visual_unit_src_enums_namespaceObject,UnitFireBolt:firebolt_UnitFireBolt},VisualGroup:{constructor:visual_group,Encoders:encoder_namespaceObject,encoderHelpers:encoder_helper_namespaceObject,groupUtils:group_utils_namespaceObject,enums:visual_group_src_enums_constants_namespaceObject},Canvas:{constructor:canvas_Canvas},Firebolt:{constructor:firebolt_Firebolt}};var SideEffects={sideEffects:src_side_effects_namespaceObject,standards:{SurrogateSideEffect:SurrogateSideEffect,SpawnableSideEffect:spawnable_SpawnableSideEffect,GenericSideEffect:generic}},Behaviours={behaviouralActions:behavioural_namespaceObject,standards:{GenericBehaviour:generic_GenericBehaviour,PersistentBehaviour:persistent_PersistentBehaviour,VolatileBehaviour:volatile_VolatileBehaviour}};muze_muze.DataModel=DataModel,muze_muze.version=muze_package.version,muze_muze.SideEffects=SideEffects,muze_muze.ActionModel=actionModel,muze_muze.layerFactory=src_layer_factory,muze_muze.Operators=operators_namespaceObject,muze_muze.Behaviours=Behaviours,muze_muze.utils=muze_utils_src_namespaceObject,muze_muze.Model=(new muze_Store).model.constructor;__webpack_exports__.default=muze_muze}])}); //# sourceMappingURL=muze.js.map \ No newline at end of file diff --git a/dist/muze.js.map b/dist/muze.js.map index 50a945f9..1adbe4ed 100644 --- a/dist/muze.js.map +++ b/dist/muze.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/webpack://DataModel/webpack/universalModuleDefinition","webpack://muze/webpack://DataModel/webpack/bootstrap","webpack://muze/webpack://DataModel/src/index.js","webpack://muze/webpack://DataModel/src/enums/data-format.js","webpack://muze/webpack://DataModel/src/enums/dimension-subtype.js","webpack://muze/webpack://DataModel/src/enums/measure-subtype.js","webpack://muze/webpack://DataModel/src/enums/field-type.js","webpack://muze/webpack://DataModel/src/enums/filtering-mode.js","webpack://muze/webpack://DataModel/src/enums/group-by-functions.js","webpack://muze/webpack://DataModel/src/utils/date-time-formatter.js","webpack://muze/webpack://DataModel/src/utils/column-major.js","webpack://muze/webpack://DataModel/src/utils/extend2.js","webpack://muze/webpack://DataModel/src/utils/helper.js","webpack://muze/webpack://DataModel/src/field-store.js","webpack://muze/webpack://DataModel/src/value.js","webpack://muze/webpack://DataModel/src/operator/row-diffset-iterator.js","webpack://muze/webpack://DataModel/src/invalid-aware-types.js","webpack://muze/webpack://DataModel/src/constants/index.js","webpack://muze/webpack://DataModel/src/operator/get-common-schema.js","webpack://muze/webpack://DataModel/src/operator/cross-product.js","webpack://muze/webpack://DataModel/src/operator/merge-sort.js","webpack://muze/webpack://DataModel/src/operator/sort.js","webpack://muze/webpack://DataModel/src/operator/data-builder.js","webpack://muze/webpack://DataModel/src/operator/difference.js","webpack://muze/webpack://DataModel/src/operator/group-by-function.js","webpack://muze/webpack://DataModel/src/utils/reducer-store.js","webpack://muze/webpack://DataModel/src/operator/natural-join-filter-function.js","webpack://muze/webpack://DataModel/src/operator/union.js","webpack://muze/webpack://DataModel/src/operator/outer-join.js","webpack://muze/webpack://DataModel/src/fields/partial-field/index.js","webpack://muze/webpack://DataModel/src/fields/field/index.js","webpack://muze/webpack://DataModel/src/fields/dimension/index.js","webpack://muze/webpack://DataModel/src/fields/measure/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/field-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/categorical-parser/index.js","webpack://muze/webpack://DataModel/src/fields/categorical/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/temporal-parser/index.js","webpack://muze/webpack://DataModel/src/fields/helper.js","webpack://muze/webpack://DataModel/src/fields/temporal/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/binned-parser/index.js","webpack://muze/webpack://DataModel/src/fields/binned/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/continuous-parser/index.js","webpack://muze/webpack://DataModel/src/fields/continuous/index.js","webpack://muze/webpack://DataModel/src/fields/field-registry.js","webpack://muze/webpack://DataModel/src/field-creator.js","webpack://muze/webpack://DataModel/src/default-config.js","webpack://muze/webpack://DataModel/src/converter/model/dataConverter.js","webpack://muze/webpack://DataModel/node_modules/d3-dsv/src/dsv.js","webpack://muze/webpack://DataModel/src/converter/utils/dsv-arr.js","webpack://muze/webpack://DataModel/src/converter/utils/dsv-str.js","webpack://muze/webpack://DataModel/src/converter/defaultConverters/dsvStringConverter.js","webpack://muze/webpack://DataModel/src/converter/utils/flat-json.js","webpack://muze/webpack://DataModel/src/converter/defaultConverters/jsonConverter.js","webpack://muze/webpack://DataModel/src/converter/defaultConverters/dsvArrayConverter.js","webpack://muze/webpack://DataModel/src/converter/defaultConverters/autoConverter.js","webpack://muze/webpack://DataModel/src/converter/utils/auto-resolver.js","webpack://muze/webpack://DataModel/src/converter/dataConverterStore.js","webpack://muze/webpack://DataModel/src/helper.js","webpack://muze/webpack://DataModel/src/relation.js","webpack://muze/webpack://DataModel/src/datamodel.js","webpack://muze/webpack://DataModel/src/operator/group-by.js","webpack://muze/webpack://DataModel/src/operator/bucket-creator.js","webpack://muze/webpack://DataModel/src/stats/index.js","webpack://muze/webpack://DataModel/src/export.js","webpack://muze/webpack://DataModel/src/operator/compose.js","webpack://muze/webpack://DataModel/src/operator/pure-operators.js","webpack://muze/webpack://DataModel/src/operator/natural-join.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/webpack://hyperdis/webpack/universalModuleDefinition","webpack://muze/webpack://hyperdis/webpack/bootstrap","webpack://muze/webpack://hyperdis/src/utils/set.js","webpack://muze/webpack://hyperdis/src/utils/index.js","webpack://muze/webpack://hyperdis/src/graph-node.js","webpack://muze/webpack://hyperdis/src/electric-node.js","webpack://muze/webpack://hyperdis/src/graph.js","webpack://muze/webpack://hyperdis/src/model.js","webpack://muze/webpack://hyperdis/src/index.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/numberArray.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/src/enums/namespace.js","webpack://muze/./packages/muze-utils/src/quick-select.js","webpack://muze/./packages/muze-utils/src/r-tree.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/src/enums/constants.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/join.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/textTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/end.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/store.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/helper.js","webpack://muze/./packages/muze-utils/src/index.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/visual-layer/src/base-layer/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/skip-ticks.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/space-setter.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/helper.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/polar-axis/props.js","webpack://muze/./packages/muze-axis/src/polar-axis/angle-axis.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/polar-axis/radius-axis.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/local-options.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/helper.js","webpack://muze/./packages/visual-layer/src/base-layer/base-mixin.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line-mixin.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area-mixin.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-mixin.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text-mixin.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/helper.js","webpack://muze/./packages/visual-layer/src/layers/point/point-mixin.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-mixin.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick-mixin.js","webpack://muze/./packages/visual-layer/src/layers/tick/helper.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/enums/layer-types.js","webpack://muze/./packages/visual-layer/src/layer-factory/layer-factory.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/visual-layer/src/index.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/selection-set/selection-set.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/enums/side-effects.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/props.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-firebolt/src/enums/tooltip-strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/fragmented-tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/axis-labels-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/muze-firebolt/src/registry.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/firebolt/behaviours/brush.js","webpack://muze/./packages/visual-unit/src/enums/behaviours.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/firebolt/behaviours/pseudo-select.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/visual-group/src/group-helper/cell-border-applier.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/encoder/props.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/resolver-props.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/helper.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-marker/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/layoutComponent.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/dummy-component.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/layout/src/tree-layout/constants/defaults.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/definitionModel.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/helper/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/tree/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/layout-model/index.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/tree-layout/utils/index.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-point.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-parser.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/helper.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/html-data.js","webpack://muze/./packages/layout/src/tree-layout/renderers/renderer.js","webpack://muze/./packages/layout/src/tree-layout/renderers/html-renderer.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/layout-def.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/index.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/row-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/column-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/view-info-getter.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/layout/src/grid-layout/border-helper.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell-helper.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/components/muze-chart-component.js","webpack://muze/./packages/muze/src/canvas/components/headerComponent.js","webpack://muze/./packages/muze/src/canvas/components/legendComponent.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/helper.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/props.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-component.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/horizontal-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/vertical-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/matrix-component.js","webpack://muze/./packages/muze/src/canvas/components/grid-component.js","webpack://muze/./packages/muze/src/enums/constants.js","webpack://muze/./packages/muze/src/canvas/components/message-component.js","webpack://muze/./packages/muze/src/canvas/components/message-icon.js","webpack://muze/./packages/muze/src/canvas/component-wrapper-maker.js","webpack://muze/./packages/muze/src/canvas/scroll-manager.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/firebolt/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt/group-firebolt.js","webpack://muze/./packages/muze/src/canvas/firebolt/index.js","webpack://muze/./packages/muze/src/canvas/app-state.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","_typeof","DataModel","require","DataFormat","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","DimensionSubtype","CATEGORICAL","TEMPORAL","BINNED","MeasureSubtype","CONTINUOUS","FieldType","MEASURE","DIMENSION","FilteringMode","NORMAL","INVERSE","ALL","GROUP_BY_FUNCTIONS","SUM","AVG","MIN","MAX","FIRST","LAST","COUNT","STD","convertToNativeDate","date","Date","pad","DateTimeFormatter","format","this","dtParams","nativeDate","RegExp","escape","text","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","defVal","val","parsedVal","isFinite","parseInt","defaultRangeParser","range","nVal","toLowerCase","length","getTokenDefinitions","daysDef","short","long","monthsDef","H","index","extract","parser","formatter","getHours","toString","hours","P","M","getMinutes","S","getSeconds","K","getMilliseconds","a","join","day","getDay","A","e","getDate","b","month","getMonth","B","y","result","substring","presentDate","presentYear","Math","trunc","getFullYear","year","Y","getTokenFormalNames","definitions","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","defaultResolver","arg","targetParam","arguments","hourFormat24","hourFormat12","ampmLower","ampmUpper","amOrpm","isPM","findTokens","tokenPrefix","tokenLiterals","keys","occurrence","forwardChar","indexOf","push","token","formatAs","nDate","formattedStr","String","formattedVal","parse","dateTimeStamp","options","extractTokenValue","dtParamSeq","noBreak","dtParamArr","args","resolverKey","resolverParams","resolverFn","param","resolvedVal","splice","apply","checkIfOnlyYear","unshift","tokenObj","lastOccurrenceIndex","occObj","occIndex","targetText","regexFormat","tokenArr","map","obj","occurrenceLength","extractValues","match","shift","getNativeDate","Number","len","v","store","fields","Array","forEach","fieldIndex","from","OBJECTSTRING","objectToStrFn","objectToStr","arrayToStr","checkCyclicRef","parentArr","bIndex","extend2","obj1","obj2","skipUndef","merge","tgtArr","srcArr","item","srcVal","tgtVal","str","cRef","isArray","getUniqueId","getTime","round","random","isArrEqual","arr1","arr2","formatNumber","detectDataFormat","data","fieldStore","createNamespace","fieldArr","dataId","fieldsObj","_cachedFieldsObj","field","getMeasure","measureFields","_cachedMeasure","schema","type","getDimension","dimensionFields","_cachedDimension","Value","rawValue","formattedValue","getNumberFormattedVal","defineProperties","_value","configurable","writable","_formattedValue","_internalValue","rowDiffsetIterator","rowDiffset","callback","split","diffStr","diffStsArr","start","end","InvalidAwareTypes","config","assign","_invalidAwareValsMap","invalidAwareVals","NULL","NA","NIL","invalid","nil","null","undefined","ROW_ID","DM_DERIVATIVES","SELECT","PROJECT","GROUPBY","COMPOSE","CAL_VAR","BIN","SORT","JOINS","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","getCommonSchema","fs1","fs2","retArr","fs1Arr","defaultFilterFn","crossProduct","dm1","dm2","filterFn","replaceCommonSchema","jointype","applicableFilterFn","dm1FieldStore","getFieldspace","dm2FieldStore","dm1FieldStoreName","dm2FieldStoreName","commonSchemaList","Error","tmpSchema","_rowDiffset","rowAdded","rowPosition","ii","tuple","userArg","partialField","formattedData","dm1Fields","prepareJoinData","dm2Fields","detachedRoot","tupleObj","cellVal","iii","defSortFn","a1","b1","mergeSort","arr","sortFn","sort","lo","hi","mid","floor","mainArr","auxArr","resolveStrSortOrder","fDetails","strSortOrder","sortOrder","dataType","sortType","retFunc","groupData","hashMap","Map","groupedData","datum","fieldVal","has","set","createSortingFnArg","groupedDatum","targetFields","targetFieldDetails","label","reduce","acc","next","idx","applyStandardSort","sortingDetails","fieldName","sortMeta","fieldInSchema","sortingFn","slice","f","makeGroupMapAndSort","depColumns","targetCol","currRow","fVal","u","iterator","done","W","nMap","dataBuilder","colIdentifier","retObj","uids","addUid","columnWise","reqSorting","tmpDataArr","colName","insertInd","sortData","dataObj","filter","sDetial","groupSortingIdx","findIndex","standardSortingDetails","groupSortingDetails","detail","sortedGroupMap","row","nextMap","pop","tmpData","difference","hashTable","schemaNameArr","dm1FieldStoreFieldObj","dm2FieldStoreFieldObj","_colIdentifier","prepareDataHelper","dm","addData","hashData","schemaName","getFilteredValues","sum","filteredNumber","curr","avg","totalSum","isNaN","fnList","filteredValues","min","max","sqrt","mean","pow","num","defaultReducerName","ReducerStore","defReducer","entries","reducer","__unregister","Function","reducerStore","naturalJoinFilter","commonSchemaArr","retainTuple","internalValue","union","leftOuterJoin","dataModel1","dataModel2","rightOuterJoin","PartialField","_sanitize","Field","subtype","description","displayName","_params","_context","build","Dimension","_cachedDomain","calculateDataDomain","Measure","unit","defAggFn","numberFormat","FieldParser","CategoricalParser","isInvalid","getInvalidType","trim","Categorical","hash","Set","domain","add","TemporalParser","_dtf","calculateContinuousDomain","POSITIVE_INFINITY","NEGATIVE_INFINITY","Temporal","__proto__","getPrototypeOf","_cachedMinDiff","sortedData","arrLn","minDiff","prevDatum","nextDatum","processedCount","dataFormat","parsedDatum","BinnedParser","matched","parseFloat","Binned","binsArr","bins","ContinuousParser","Continuous","FieldTypeRegistry","_fieldType","dimension","fieldRegistry","registerDefaultFields","registerFieldType","createFields","dataColumn","headers","headersObj","header","BUILDER","ct","DataConverter","_type","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","columns","JSON","stringify","inferColumns","rows","columnSet","column","width","_t","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","N","I","eof","eol","j","preformatBody","formatValue","formatRow","formatDate","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","test","convert","concat","formatBody","formatRows","DSVArr","schemaFields","unitSchema","firstRowHeader","columnMajor","headerMap","h","schemaField","headIndex","DSVStr","fieldSeparator","dsv","d3Dsv","DSVStringConverter","FlatJSON","insertionIndex","schemaFieldsName","JSONConverter","DSVArrayConverter","AutoDataConverter","Auto","converters","DataConverterStore","_getDefaultConverters","converter","converterStore","resp","persistDerivations","sourceDm","model","operation","persistCurrentDerivation","criteriaFn","_derivation","Vt","op","meta","criteria","persistAncestorDerivation","newDm","_ancestorDerivation","selectModeMap","diffIndex","calcDiff","generateRowDiffset","lastInsertedValue","li","selectRowDiffsetIterator","checker","newRowDiffSet","rejRowDiffSet","Ut","shouldSelect","shouldReject","checkerResult","rejectRowDiffset","selectHelper","clonedDm","selectFn","cachedStore","cloneProvider","cachedValueObjects","_partialFieldspace","_cachedValueObjects","keyFn","rowId","domainChecker","some","dom","boundsChecker","filterPropagationModel","propModels","fns","filterByDim","filterByMeasure","clone","clonedModel","cloneWithAllFields","partialFieldspace","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","modelFieldsConfig","getFieldsConfig","identifiers","fieldNames","values","indices","dLen","def","valuesMap","rangeKeys","hasData","present","getKey","fn","every","isWithinDomain","fieldType","propModel","select","saveChild","addDiffsetToClonedDm","selectConfig","cloneWithProject","projField","allFields","cloned","projectionSet","actualProjField","sanitizeUnitSchema","sanitizeAndValidateSchema","updateData","relation","defaultConfig","dataHeader","fieldNameAs","as","nameSpace","valueObjects","rawFieldsData","formattedFieldsData","rawData","_","_dataFormat","applyExistingOperationOnModel","dataModel","selectionModel","getDerivations","derivation","params","groupByString","getRootGroupByModel","_parent","find","propagateToAllDataModels","rootModels","propagationInf","propagationNameSpace","propagateToSource","propagationSourceId","sourceId","addGroupedModel","conf","crit","groupedModel","criterias","actionCriterias","mutableActions","filteredCriteria","entry","excludeModels","sourceActionCriterias","actionInf","actionConf","applyOnSource","action","models","path","getPathToRootModel","propagationSource","rootModel","propConfig","sourceIdentifiers","inf","propagationModel","filteredModel","reverse","handlePropagation","propagateIdentifiers","propModelInf","_children","child","matchingCriteria","getNormalizedProFields","fieldConfig","normalizedProjField","constructor","search","Relation","source","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","updateFields","fieldStoreName","collID","partialFieldMap","newFields","coll","joinWith","unionWith","differenceWith","defConfig","cloneConfig","extraCloneDm","setOfRowDiffsets","setParent","_fieldConfig","fieldObj","removeChild","sibling","parent","_onPropagation","order","withUid","getAllFields","dataGenerated","fmtFieldIdx","elem","fIdx","fmtFn","datumIdx","ids","En","fill","fieldsArr","reducers","newDataModel","groupBy","existingDataModel","sFieldArr","dimensions","je","reducerObj","measures","defaultReducer","measureName","reducerFn","resolve","fieldStoreObj","dbName","dimensionArr","measureArr","rowCount","getData","dataInCSVArr","sortedDm","colData","rowsCount","serializedData","rowIdx","colIdx","fieldinst","dependency","replaceVar","fieldsConfig","depVars","retrieveFn","depFieldIndices","fieldSpec","fs","suppliedFields","computedValues","fieldsData","addField","addToNameSpace","isMutableAction","payload","getRootDataModel","groupByModel","addToPropNamespace","sourceNamespace","propagateImmutableActions","filterImmutableAction","criteriaModel","eventName","measureFieldName","binFieldName","measureField","buckets","binsCount","binSize","dMin","dMax","ceil","abs","generateBuckets","bucketRanges","binnedData","findBucketRange","leftIdx","rightIdx","midIdx","binField","serialize","getSchema","rowSplitDiffsetIterator","splitRowDiffset","dimensionMap","dimensionSet","clonedDMs","uniqueFields","commonFields","normalizedProjFieldSets","fieldSet","splitWithProject","projFieldSet","projFields","first","last","count","sd","std","Operators","compose","operations","currentDM","firstChild","derivations","dispose","bin","project","calculateVariable","naturalJoin","fullOuterJoin","version","Stats","FieldsUtility","enums","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","default","_lib2","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","height","_getWidthFn","contObj","_containerObj","svgText","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","x","minWidth","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","makeEntry","sCon","_classCallCheck","_set","set1","set2","filteredKeys","s1","s2","ForeignSet","isSimpleObject","reqAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","getTimeBasedId","__lastTime","__id","flat","res","scheduler","onFinishCallback","queue","animationFrame","listeners","tempQ","unique","fetch","namedNode","qualifiedName","seed","fetchAggregator","dependencies","getUpstreamNodes","list","rec","qname","placedIndex","preArr","postArr","outgoingEdges","resolver","accumulate","nodeDetails","identity","CustomResolver","utils_classCallCheck","dep","_dep","graph_node_classCallCheck","edges","_seed","requireResolve","retriever","history","electricEdges","_edges","_this","retrieveDetails","edge","head","hist","TypeError","electric_node_classCallCheck","nextFrame","currentFrame","lstnrs","nodes","nFn","_this2","qualifiedNodeMap","graph_node","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flushTarget","flush","mount","resolveReqList","objn","perv","addDependencies","_node","getDependencies","getResolvedList","props","fnSpec","eNode","_ref","electric_node","addEdges","addElectricNode","changedSet","upstreamNodes","upstreamNode","append","__execUniqueElectricEdges","cfLstnrs","nfLstnrs","toArray","_this3","repeatHead","resetPropagationOverride","qnames","_this4","update","resolved","resolveDependencyOrder","resolveMap","neighbour","isRoot","model_classCallCheck","_graph","graph","_lockFlag","_reqQ","mountPoint","_addPropInModel","calculationConfig","customResolver","varName","fetchFn","_customResolver","createNodesFrom","instantCall","_graph$stopPropagatio","propsArr","unsub","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","_graph$stopPropagatio2","setProp","getNodeValue","getNodeFromQualifiedName","Model","__webpack_exports__","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","each","remove","clear","empty","src_nest","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","keyValue","valuesByKey","createObject","setObject","createMap","setMap","sortKey","k","proto","implicit","ordinal","unknown","scale","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","side","highVal","d1","low","high","src_number","extend","definition","Color","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","exec","rgbn","Rgb","rgba","hsla","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","channels","displayable","formatHsl","color_formatHsl","brighter","darker","src_constant","linear","hue","constant","gamma","nogamma","exponential","src_rgb","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","numberArray","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","reA","reB","src_string","am","bm","bs","bi","lastIndex","q","one","zero","src_value","value_typeof","string","setTime","valueOf","src_round","d3_scale_src_constant","d3_scale_src_number","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","bisect","target","interpolate","clamp","continuous","piecewise","output","input","interpolateValue","deinterpolateClamp","reinterpolateClamp","interpolateRound","re","formatSpecifier","specifier","FormatSpecifier","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","formatDecimal","toExponential","coefficient","src_exponent","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","X","toUpperCase","src_identity","prefixes","src_locale","group","grouping","thousands","formatGroup","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","interval","x0","x1","pow10","powp","base","E","exp","logp","log10","log2","reflect","logs","pows","z","raise","thresholds","threshold","quantiles","quantize","t0","newInterval","floori","offseti","offset","previous","setMonth","setHours","setFullYear","setDate","durationMinute","durationWeek","weekday","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","hour","minute","second","millisecond","utcWeekday","setUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","localDate","L","utcDate","UTC","newDate","timeFormat","pads","-","0","numberRe","percentRe","requoteRe","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","formatWeekNumberISO","timeThursday","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","formatQuarter","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","formatUTCQuarter","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","newParse","week","utcFormat","utcParse","durationSecond","durationHour","durationDay","durationMonth","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","src_time","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds","src_colors","deg2rad","PI","rad2deg","C","D","ED","EB","BC_DA","cubehelix","cubehelixConvert","Cubehelix","bl","atan2","cubehelixGamma","colorCubehelix","cosh","cos","sinh","sin","cubehelixLong","interpolateCubehelixLong","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","src_ramp","scheme","interpolateRgbBasis","magma","inferno","plasma","warm","cool","sequential_multi_rainbow","ts","UNIT_GLOBAL_NAMESPACE","UNIT_LOCAL_NAMESPACE","LAYER_LOCAL_NAMESPACE","LAYER_GLOBAL_NAMESPACE","GROUP_GLOBAL_NAMESPACE","GROUP_LOCAL_NAMESPACE","CANVAS_LOCAL_NAMESPACE","CANVAS_GLOBAL_NAMESPACE","swap","tmp","defaultCompare","quickselect","quickselectStep","createNode","leaf","minX","minY","maxX","maxY","distBBox","toBBox","destNode","calcBBox","compareNodeMinX","compareNodeMinY","bboxArea","bboxMargin","enlargedArea","intersectionArea","contains","intersects","findItem","items","equalsFn","multiSelect","stack","all","nodesToSearch","_toConsumableArray","RTree","maxEntries","_maxEntries","_minEntries","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","childBBox","err","insert","splitRoot","tmpNode","insertSingleItem","goingUp","indexes","condense","N2","N1","compareMinX","right2","compareMinY","right3","level","minArea","minEnlargement","targetNode","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","area","enlargement","isNode","insertPath","chooseSubtree","adjustParentBoxes","chooseSplitAxis","splitIndex","chooseSplitIndex","newNode","minOverlap","bbox1","bbox2","overlap","allDistMargin","leftBBox","rightBBox","margin","siblings","ReservedFields","MEASURE_NAMES","CommonProps","ACTION_INF","ON_LAYER_DRAW","MATRIX_CREATED","COORD_TYPES","POLAR","CARTESIAN","DATA_TYPE","d3_axis_src_identity","bottom","epsilon","translateX","translateY","entering","__axis","axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","transform","spacing","range0","range1","center","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","transition","getAttribute","tickSize","pi","halfPi","tau","asin","symbol_circle","draw","moveTo","arc","symbol_cross","lineTo","closePath","tan30","tan30_2","diamond","square","rect","kr","kx","ky","star","wye","y0","y1","x2","y2","sqrt3","triangle","tauEpsilon","Path","_x0","_y0","_x1","_y1","quadraticCurveTo","bezierCurveTo","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","a0","ccw","dx","dy","cw","da","d3_shape_src_constant","none","series","order_ascending","sums","offset_none","s0","stackValue","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","Step","_x","_y","curve_step","stepBefore","stepAfter","that","_k","_x2","_y2","Cardinal","tension","custom","cardinal","CatmullRom","alpha","_alpha","_l01_a","_l12_a","_l23_a","_l01_2a","_l12_2a","_l23_2a","x23","y23","curve_catmullRom","catmullRom","src_line","pointX","pointY","defined","curve","curveLinear","buffer","defined0","src_descending","d3_shape_src_identity","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","colorHsl","hslLong","cubicInOut","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","elasticOut","elasticIn","amplitude","period","backInOut","elasticInOut","backIn","overshoot","backOut","polyInOut","polyIn","polyOut","d3_voronoi_src_constant","RedBlackTree","RedBlackNode","R","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","createEdge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","Selection","idGetter","selection_classCallCheck","_dataObjects","_updateData","_enterData","_exitData","_idGetter","newData","entryData","exitdata","tempMap","duplicateData","updatedData","newSelection","dataObjects","defaultValue","_mode","mergedObjects","mergedData","newdata","sortSel","sortSelection","kA","kB","selection_toConsumableArray","objects","dataSelect","idFn","STRING","FUNCTION","HTMLElement","common_utils_typeof","checkExistence","nonExistentKeys","sanitizeIP","typeObj","htmlElem","getMax","common_utils_toConsumableArray","getMin","getDomainFromData","domArr","_loop","_fields","_slicedToArray","field0","field1","arr0","firstMin","secondMin","firstMax","secondMax","sanitizeDomainWhenEqual","unionDomain","domains","_ref2","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getExtremePoint","points","compareValue","minOrMax","extremePoint","minOrMaxVal","getMinPoint","getMaxPoint","getNearestValue","filterData","getWindow","cancelAnimFrame","cancelAnimationFrame","capitalizeFirst","txt","vals","getMinDiff","uniqueVals","getQualifiedClassName","cls","getDependencyOrder","dependencyOrder","visited","visit","objectIterator","Voronoi","common_utils_classCallCheck","_voronoi","_voronoiFn","getObjProp","_len","_key","intSanitizer","generateGetterSetters","propInfo","_propInfo$","sanitization","preset","onset","typeChecker","getArraySum","total","arraysEqual","isEqual","oldVal","newVal","is","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","registerImmediateListener","_ref3","isHTMLElem","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","createSelection","sel","appendObj","mergedSelection","exitSelection","getObjects","inst","interpolateArray","fitCount","linearInterpolate","atPoint","springFactor","angleToRadian","angle","replaceCSSPrefix","numberInterpolator","interpolateNumber","colorInterpolator","interpolateRgb","hslInterpolator","interpolateHslLong","transformColors","piecewiseInterpolator","hue2rgb","hslToRgb","rgbToHsv","hsvToRgb","hexToHsv","hslaToRgb","_hslToRgb2","RGBAtoRGB","r2","g2","r3","g3","detectColor","col","assembleModelFromIdentifiers","fieldMap","_loop2","temp","cIdx","getDataModelFromRange","criteriaFields","selFields","selFn","fieldValue","getArrayIndexMap","getDataModelFromIdentifiers","hasBarLayer","filteredDataModel","dataArr","filteredSchema","include","propField","registerListeners","listenerMap","_len2","_key2","propListenerMap","namespace","mapObj","propType","listenerFn","listener","isValidValue","escapeHTML","htmlEscapes","&","<",">","\"","'","/","transposeArray","extendsClass","extendsFrom","found","concatModels","dataObj1","dataObj2","data1","data2","schema1","schema2","commonTuples","_loop3","row1","row2","dim1Values","dim2Values","dm1Key","dm2Key","commonSchema","getSymbol","stackOrders","_defineProperty","_stackOrders","stackOrderNone","stackOrderAscending","stackOffsets","_stackOffsets","yp","yn","stackOffsetNone","si","sij0","s3","sk","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","nestCollection","nestFn","getArrayDiff","el","pathInterpolators","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","pie","descending","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","scaleBand","getSmallestDiff","timeFormats","timeDurations","formatTemporal","nearestInterval","getNearestInterval","temporalFields","filteredFields","_ref5","_ref6","lookupWhat","lookupDetails","resolvable","lookupTarget","depArr","deps","nextAnimFrame","getValueParser","retrieveNearestGroupByReducers","_len3","measureFieldNames","_key3","filteredReducers","getAncestorDerivations","nearestReducers","derv","retrieveFieldDisplayName","nearestSortingDetails","nearestSortDerivation","sortingOrder","localeCompare","sortOrderMap","_sortOrderMap","firstVal","secondVal","sortCategoricalField","sortOrderType","_accessors","fn1","fn2","_accessors2","partition","mix","superclass","with","_with","_len4","mixins","_key4","mixin","componentRegistry","comps","reg","regObj","register","customKey","formalName","getReadableTicks","steps","orderedDomain","tempScale","scales","legendTicks","transformColor","rgbaValues","_ref7","_ref7$h","_ref7$s","_ref7$l","_RGBAToHSLA$code","RGBAToHSLA","cmin","cmax","delta","code","origH","origS","origL","origA","sanitizedA","newH","newS","newL","newA","pointWithinCircle","dmMultipleSelection","targetData","payloadMap","currentField","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","sparse","EnterNode","ownerDocument","namespaceURI","_next","__data__","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","xhtml","src_namespaces","xlink","xml","xmlns","src_namespace","namespaces","space","local","src_window","defaultView","styleValue","getPropertyValue","getComputedStyle","classArray","classList","ClassList","_names","classedAdd","classedRemove","textRemove","htmlRemove","nextSibling","lower","previousSibling","creator","fullname","creatorFixed","creatorInherit","uri","documentElement","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","on","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_select","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","noop","Dispatch","T","types","current","mouse","changedTouches","src_touch","touches","identifier","touch","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","maxTouchPoints","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","taskHead","taskTail","frame","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","self","tween","state","duration","ease","schedule","cssNode","cssRoot","cssView","svgNode","degrees","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","tweenValue","_id","transition_interpolate","interpolateString","Transition","_name","newId","selection_prototype","inherit","id0","id1","onFunction","on0","on1","sit","attrTween","string00","string10","interpolate0","string0","string1","value1","attrTweenNS","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleMaybeRemove","listener0","styleInterpolate","textTween","textInterpolate","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Promise","reject","cancel","interrupt","defaultTiming","easeCubicInOut","selectElement","element","makeElement","elemType","callbacks","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","applyStyle","appendElement","element1","element2","setElementAttrs","attrs","setAttrs","addClass","removeClass","setStyles","styles","createElements","clipElement","measurement","clipPathElement","getMousePos","boundingClientRect","getClientPoint","pos","clientPoint","tag","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","initProp","fetchPropValues","propNames","setContexts","contexts","propObj","contextMap","depProps","registerListener","propList","callBack","_options$","namespaceInf","callbackFn","namespaceVal","commits","_savedCommits","_propListenerMap","listenersObj","_registeredListeners","_contextMap","contextsObj","commitsObj","subNamespaces","propDeps","nm","fnInf","store_toConsumableArray","registerPropInMaps","registeredListeners","subNamespace","allProps","_fnCount","addListenerToNamespace","_listeners","namespaceListeners","listenerTypes","removePropValue","propInf","sns","Store","store_classCallCheck","_commits","_queuedProps","_locked","store_createClass","lockModel","lock","unlockModel","unlock","lockCommits","locked","unlockCommits","queuedProps","store_slicedToArray","propName","_params2","commit","addSubNamespace","propFns","nsObj","retrieveNamespaces","disableListener","sanitizedVal","savedCommits","disabled","registerChangeListener","computed","calculatedProp","_this$model","unsubscribeAll","unsubscribe","listenersMap","removeSubNamespace","snsMap","transactor","holder","stateProps","nameSpaceProp","nsProp","_len5","_key5","_ref$takesMultiplePar","takesMultipleParams","prevVal","typeCheck","typeExpected","oldValues","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","_preparePromises","promise","_makeNotifierPromise","createPromise","then","prm","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","CLASSPREFIX","STACK","GROUP","IDENTITY","ANGLE","RADIUS","SIZE","COLOR","SHAPE","TEXT","OUTER_RADIUS_VALUE","TEXT_ANCHOR_MIDDLE","ENCODING","X0","Y0","RADIUS0","ANGLE0","STROKE_DASHARRAY","ASCENDING","AGG_FN_SUM","AREA_LAYER","ARC_LAYER","LINE_LAYER","TEXT_LAYER","POINT_LAYER","BAR_LAYER","TICK_LAYER","SIMPLE_LAYER","BASE_LAYER","SimpleLayer","DATA","CONFIG","MEASUREMENT","DOMAIN","MOUNT","props_defineProperty","_props","axes","metaInf","valueParser","coord","PROPS","_customConfig","newConf","defaultPolicy","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","AxisOrientation","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","SEQUENTIAL","THRESHOLD","CONTINOUS","DISCRETE","HIDDEN","DEFAULT_ANGLE_DOMAIN","scaleLinear","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","ScaleType","createScale","scaleFactory","adjustRange","axisName","defClassName","axisNamePadding","classPrefix","fixedBaseline","labels","rotation","smartTicks","orientation","numberOfTicks","show","showAxisName","showInnerTicks","showOuterTicks","xOffset","yOffset","defaultSort","changeTickOrientation","selectContainer","axisInstance","_smartTicks","renderConfig","labelManager","isSmartTicks","tickText","registerAnimationDoneHook","rotateAxis","instance","getTickSize","yShift","xShift","tickLabelDim","quadrant","rotationNormalizer","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","availableSpace","longestWord","quarter","halfYearly","mintues","getTickIntervalFnBasedOnNumberOfTicks","possibleTickLevelIndex","maxPossibleTicks","tickIntervalLevelInfo","tickIntervalInfo","numOfPossibleTicks","getActualTickInterval","noOfTicks","minWidthBetweenTicks","_minTickDistance","getTickIntervalBasedOnCurrentLevel","_dependencies","longestWordType","applyTickSkipping","minTickDistance","minTickSpace","_minTickSpace","minTickWidth","maxTicks","getSkippedTicks","actualNumberOfTicks","_minDiff","millisecondInterval","numOfTicksAccordingToMinDiff","adjustHorizontalRange","adjustVerticalRange","rangeAdjustmentMap","space_setter_defineProperty","_rangeAdjustmentMap","setAxisRange","rangeBounds","getAdjustedRange","getAxisOffset","timeDiff","avWidth","bars","spaceSetter","spaceConfig","heightForTicks","_context$availableSpa2","availWidth","availHeight","isOffset","_context$renderConfig2","_context$getAxisDimen","getAxisDimensions","tickDimensions","allTickDimensions","axisNameDimensions","tickDimHeight","tickDimWidth","namePadding","labelConfig","minTickHeight","getTickValues","tickShifter","maxTickSpaces","widthForTicks","totalTickWidth","getRotatedSpaces","rotatedHeight","rotatedWidth","setOffset","logicalSpace","getAxisComponentDimensions","axisTicks","largestTick","largestTickDimensions","smartTick","_context$renderConfig","labelFunc","_tickLabelStyle","originalLabel","getFormattedText","_axisNameStyle","getHorizontalAxisSpace","axisDimensions","_context$config2","axisDimHeight","minTickDiff","getMinTickDifference","helper_toConsumableArray","getVerticalAxisSpace","_context$config3","calculateBandSpace","largestDimHeight","_getHorizontalAxisSpa","_getVerticalAxisSpace","getValidDomain","userDom","setContinousAxisDomain","_domain","axisComponentDimensions","oldConfig","_config","mockedOldConfig","shouldAxesScaleUpdate","hasAxesConfigChanged","properties","tickFormatter","sanitizeTickFormatter","_scale","_axis","createAxis","_tickFormatter","resetRenderConfig","_renderConfig","_maxTickSpaces","SimpleAxis","simple_axis_classCallCheck","_mount","_range","_domainLock","_axisDimensions","defCon","simpleConfig","bodyElem","dist","_animationDonePromises","domainValue","setAxisComponentDimensions","smartAxisName","axisClass","_objectSpread","setTickConfig","setSmartAxisName","_this$config2","dimType","widthDim","getSmartAxisName","oriSize","domainVal","computeAxisDimensions","_getAxisComponentDime","labelHeight","labelWidth","calculateContinousSpace","_context$renderConfig6","axisNameWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","renderAxis","labelProps","tickLabelStyle","axisTickFormatter","labelOffset","tickData","allTicks","elementToBeModified","elementNotToBeModified","tickValue","_getRawTickValue","selectionSet","rejectionSet","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","InterpolatorCls","_interpolator","getScaleValue","_this$renderConfig","sanitizeDomain","_get2","_get","_this$renderConfig2","newTickValues","tickSpace","getNumberOfTicks","labelDim","numberOfValues","tickLength","_this$smartTicks$","BandAxis","_this$maxTickSpaces","_getRotatedSpaces","paddingNormalized","formatTickValue","TimeAxis","_getPrototypeOf2","time_axis_classCallCheck","time_axis_possibleConstructorReturn","time_axis_getPrototypeOf","time_axis_get","rawTicks","resetTickInterval","_context$config8","_context$availableSpa","adjustedRange","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","stops","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","props_toConsumableArray","newConfig","uniqueValues","treatNullMeasures","scaledVal","minDomainScaledVal","resolveAxisConfig","propVal","defaultVal","sanitiseConfigIntervals","intervals","getStops","newStops","color_strategy_toConsumableArray","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","rangeStops","newStopsLength","newRange","continousSteppedDomain","_getStops2","uniqueRange","indexedRange","numVal","normalRange","strategyGetter","domainType","rangeType","schemeType","strategies","color_strategy_defineProperty","domainRange","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","colorSchemes","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","size_strategy_defineProperty","_strategies","pieceWiseRange","size_strategy_toConsumableArray","newIntervals","discreteRange","_userRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","strategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","createAngleValues","angleData","_angleFn","_angleValues","AngleAxis","angle_axis_classCallCheck","customDomain","customRange","_this$_range","angle_axis_slicedToArray","WIDTH","HEIGHT","MIN_UNIT_WIDTH","MIN_UNIT_HEIGHT","DIMENSIONS","MEASURES","PIVOT","FORMAT","HAS_DATA_UPDATED","ROWS","COLUMNS","COL","ROW","COLUMN","DETAIL","LAYERS","TRANSFORM","RETINAL","CELL","X_AXES","Y_AXES","ENTRY_CELLS","INITIALIZED","EXIT_CELLS","AXIS","UNIT","UPDATED","BEFORE_UPDATE","VALUE_MATRIX","FACET_HEADERS","ARC","BAR","LINE","POINT","PRIMARY","SECONDARY","BOTH","INTERACTION","GRID_LINES","GRID_BANDS","HEADER","FACET","DEFAULT","DESCENDING","DARK","NONE","DARKER","adjustDomain","minOuterRadius","RadiusAxis","radius_axis_classCallCheck","_radiusFactor","sanitizedRange","rangeVal","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","stackData","seriesData","transformFactory","colorAxis","styleType","intensity","interactionType","stateColor","currentState","originalState","colorInfo","applyInteractionStyle","interactionStyles","elements","getPlotElementsFromSet","reset","applyLayerStyle","retrieveEncodingInf","encoding","encodingNames","encodingInf","encodingFieldInfRetriever","helpers_defineProperty","_encodingFieldInfRetr","setNullsInStack","transformedData","setNulls","transformData","transformType","encodingFieldInf","setNullData","connectNullData","xField","yField","xFieldType","yFieldType","getIndividualClassName","individualClassName","classNameStr","dataNormalizers","_dataNormalizers","radiusFieldIndex","angleFieldIndex","radius0FieldIndex","angle0FieldIndex","fieldsLen","pointObj","radius0","angle0","enc","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","getNormalizedData","transformedDataArr","encodingFieldsInf","domainCalculator","_domainCalculator","layerInst","angleValues","radius0Field","xFieldSubType","yFieldSubType","x0Field","y0Field","yEnc","xEnc","defFn","_d$update","attachDataToVoronoi","accessor","helpers_toConsumableArray","_accessor","updateStyle","animateGroup","groupTransition","groupAnimateStyle","effect","positionPoints","positioner","encodingTransform","getGroupSpan","getUnitWidth","getPlotMeasurement","dimensionalValues","fieldInfo","bandScale","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","timeDiffs","innerPadding","isAxisBandScale","axisPadding","groupPadding","renderLayer","render","throwback","parentNamespace","resolveInvalidTransformType","transformResolverPredicates","groupByField","dimensionField","getValidTransform","getValidTransformForAggFn","resolvedInvalidTransformType","_context$encodingFiel","isCustomTransformTypeProvided","getMarkId","resolveEncodingValues","transformedValues","getColorMetaInf","initialStyle","originalStyle","getCoordValue","trig","coordValueGetter","toCartesianCoordinates","rangePlot","_point$update","_coordValueGetter","axisArr","getBoundBoxes","_point$update2","getDataFromEvent","dataPoint","getIdentifiersFromData","layerId","localOptions","local_options_defineProperty","STATE_NAMESPACES","listener_map_slicedToArray","prevData","dataDidSet","getPreviousStyle","stylesForCurrentLevel","getLastItemInMap","strokeProps","stroke-width","stroke","stroke-opacity","parseStyle","datumStyle","applyStylesOnInteraction","_datum$meta","applicableStyles","strokePosition","applicableStrokePos","sanitizedStyles","parsedStyleVal","currentStyle","styleKeys","_partition2","helper_slicedToArray","strokeStyles","otherStyles","applyStyles","layerNs","groupNs","BaseLayerMixin","_superclass","_class","base_mixin_classCallCheck","base_mixin_possibleConstructorReturn","base_mixin_getPrototypeOf","base_mixin_assertThisInitialized","getterSetters","alias","_points","_cachedData","_measurement","_graphicElems","base_mixin_inherits","base_mixin_createClass","_store","_this$metaInf2","_alias","enableCaching","_cacheEnabled","clearCaching","getTransformedData","calculateDomainFromData","isEmpty","getDataDomain","encodingType","_this$metaInf3","getUidsFromPayload","currentSetIds","getUids","uidMap","getNearestPoint","interactionConfig","interaction","resolveTransformType","_transformType","_this$metaInf4","unitDom","cachePoint","pointMap","_pointMap","getInteractionStyles","addOverlayPath","removeOverlayPath","interactionFn","allMeasures","_identifiers$","_identifiers$2","hasPlotSpan","getPlotSpan","getPlotPadding","getPointsFromIdentifiers","getAllAttrs","filteredPoints","base_mixin_toConsumableArray","sizeVal","getTransformedDataFromIdentifiers","measureIndex","_identifiers$getData","identifierData","identifierSchema","_normalizedData","_this$encodingFieldsI","layerName","tupleArr","transformedVal","graphicElems","elems","animationDone","base_mixin_slicedToArray","encodingValue","retrieveEncodingFields","_transformedData","calculateDomain","applyElementStyles","getState","getListeners","getRenderProps","_context$metaInf","unitRowIndex","unitColIndex","base_mixin_defineProperty","getQualifiedStateProps","_construct","userConf","shouldDrawAnchors","BaseLayer","containsNull","getborderIndexes","prevOfNull","nextOfNull","settIndexPrevOrNext","indexesObj","prevContainsNull","nextContainsNull","getElementsForLine","layer","strokeStyle","linepath","updateFns","drawLine","containerSelection","nullDataLineStyle","nullDataLineClass","curveInterpolatorFn","dd","elementWithNullData","sanitizeNullConfig","makeStartEndPair","borderIndexes","pairArray","pair","prevValue","nextValue","fade","focus","brushStroke","crossline","nearestPointThreshold","strokeOpacity","fillOpacity","strokeWidth","LineLayerMixin","line_mixin_classCallCheck","line_mixin_possibleConstructorReturn","line_mixin_getPrototypeOf","line_mixin_inherits","line_mixin_createClass","getDrawFn","translatePoints","xAxis","yAxis","isXDim","isYDim","xPx","yPx","getColor","resolvedEncodings","getTranslatedData","colorValFn","colorFieldIndex","colorVal","getPathStyle","qualifiedClassName","colorField","translatedPoints","seriesClassName","searchRadius","_point$data$data","line_mixin_toConsumableArray","line_mixin_get","drawArea","easeEffect","_map2","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayerMixin","area_mixin_classCallCheck","area_mixin_possibleConstructorReturn","area_mixin_getPrototypeOf","area_mixin_inherits","area_mixin_createClass","area_mixin_get","nearestPoint","dimValue","pointArr","_pointArr$i$update","pointY0","classNameFn","minYVal","basePos","y0Px","invalidY","invalidY0","resolvedValues","AreaLayer","highlight","stroke-linejoin","shape","states","fadeout","selected","ArcLayerMixin","arc_mixin_classCallCheck","arc_mixin_possibleConstructorReturn","arc_mixin_getPrototypeOf","_prevPieData","arc_mixin_inherits","arc_mixin_createClass","_this$axes","radiusAxis","pieIndex","angleV","angles","_angles","uid","getOuterRadius","getInnerRadius","startAngle0","endAngle0","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_context$axes$angle$r2","arc_helper_slicedToArray","_this$config","qualClassName","_arcFn","consecutiveExits","exitCounter","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","ArcLayer","LineLayer","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","alignment-baseline","defaultEncoding","alignmentBaseLine","defRotation","pointTranslators","polar","textEncoding","angleAxis","textFormatter","backgroundEncoding","backgroundValue","text_mixin_objectSpread","cartesian","textField","textFieldIndex","textValue","text_mixin_slicedToArray","TextLayerMixin","text_mixin_classCallCheck","text_mixin_possibleConstructorReturn","text_mixin_getPrototypeOf","text_mixin_inherits","text_mixin_createClass","getPointTranslator","text-anchor","TextLayer","drawSymbols","createShape","groupElement","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","pathEl","exitGroup","defColorStyle","focusStroke","commonDoubleStroke","doubleStroke","anchors","persistent-anchors","brush-anchors","shapes","sizes","prepareDrawingInf","shapeAxis","sizeAxis","getShape","getSize","layerEncoding","helper_defineProperty","_config$offset","offsetX","offsetY","point_helper_slicedToArray","measure","getStrokeWidthByPosition","inside","outside","PointLayerMixin","point_mixin_classCallCheck","point_mixin_possibleConstructorReturn","point_mixin_getPrototypeOf","_overlayPath","formattedUids","point_mixin_inherits","point_mixin_createClass","maxSize","generateDataPoints","point_mixin_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement2","point_mixin_slicedToArray","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","refElement","pathElement","parentElement","styleVal","currentPath","point_mixin_get","PointLayer","drawRects","barEnterFn","transitionBars","selTransition","positionRetriever","isNegativeVal","barBasePos","resolveDimByField","axesInfo","spaceType","sizeEncoding","sizeConfig","sizeValue","enterSpace","minVal","maxVal","diffPx","minDomVal","endPos","_positionRetriever$ty2","bar_helper_slicedToArray","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayerMixin","bar_mixin_classCallCheck","bar_mixin_possibleConstructorReturn","bar_mixin_getPrototypeOf","_plotPadding","_plotSpan","bar_mixin_inherits","bar_mixin_createClass","bar_mixin_get","getTranslatedPoints","normalizedDataArr","barContainer","bar_mixin_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","pathGroup","_strokeWidthPositionM","strokeWidthPositionMap","L1","L2","L3","BarLayer","tick_renderer","pathElem","angle0Axis","angle0V","angles0","_angles2","tick_mixin_objectSpread","_layerInst$encodingFi","_config$span","xSpan","ySpan","x0Px","TickLayerMixin","tick_mixin_classCallCheck","tick_mixin_possibleConstructorReturn","tick_mixin_getPrototypeOf","tick_mixin_inherits","tick_mixin_createClass","offsetM","offsetL","_ref$position","drawTicks","TickLayer","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","_layerRegistry","getSerializedConf","mark","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","propValue","layer_factory_toConsumableArray","getLayerInstance","layerRegistry","instances","layerObj","layerConstructor","getLayerClass","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","LAYER_TYPES","layer_registry","layers","helpers","commonHelpers","pointLayerHelpers","layerMixins","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","sizeField","shapeField","_retinalEncodingsAndM","src_helper_toConsumableArray","transformDataModels","dataModels","transformVal","getLayerFromDef","existingLayer","rowIndex","colIndex","instanceArr","_timeDiffs","resolveEncodingTransform","sanitizeLayerDef","sanitizedDefs","sConf","attachDataToLayers","transformedDataModels","dataSource","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","axisIndex","getLayerAxisIndex","_layer$config","specificField","encodingField","fieldInst","getMembers","unionDomainFromLayers","axisFields","domainValues","layerDomain","fieldDomain","encodingDomain","fieldStr","domain1","renderLayers","_lifeCycleManager","notify","orderedLayers","layerParentGroup","layerDepOrder","_layerDepOrder","getNearestDimensionalValue","entryVal","getLayersBy","searchBy","removeLayersBy","createSideEffectGroup","createRenderPromise","_renderedPromise","_renderedResolve","getRadiusRange","radiusAxes","isXandYMeasures","_context$fields","src_helper_slicedToArray","xMeasures","yMeasures","getValuesMap","idValuesMap","valuesIdMap","_model$getData","fieldIndices","getSelectionRejectionModel","propValuesMap","rejectionModel","_propModel$getData","entryRowIds","exitRowIds","rowIdsObj","createRTree","interactive","rtree","load","AXES","LAYERDEFS","TRANSFORMEDDATA","DATADOMAIN","FIELDS","LAYERAXISINDEX","IDFIELD","GRID_LINE_PARENT_GROUP_CLASS","GRID_BAND_PARENT_GROUP_CLASS","GRID_PARENT_GROUP","TICK","GRID_BAND","GRID_LINE","CONSOLIDATED","FRAGMENTED","FACET_BY_FIELDS","RETINAL_FIELDS","PARENT_ALIAS","CACHED_DATA","STORE","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","SelectionSet","_volatile","selection_set_classCallCheck","completeSet","_uidMap","_measureNames","_dimVals","measureNames","dims","_completeSetCount","_lockedSelection","_fieldIndices","_resetted","entrySet","exitSet","mergedEnter","mergedExit","dimVals","_config$keepDims","keepDims","_config$dimensions","measureNamesArr","selection_set_toConsumableArray","addSet","removeSet","updateSet","raw","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","muze_firebolt_src_helper_toConsumableArray","getSideEffects","behaviour","behaviourEffectMap","behaviours","effects","unionSets","firebolt","combinedSet","uidSet","entryExitSet","_entryExitSet","_entryExitSet$type","existingModel","cloneObj","clonedVal","getKeysFromCriteria","_firebolt$_metaData","_metaData","dimensionsMap","dimArr","firebolt_defineProperty","dimKey","firebolt_toConsumableArray","Firebolt","actions","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_sourceSelectionSet","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sideEffectPolicies","_propagationBehaviourMap","_behaviourPolicies","_actionBehaviourMap","_behaviourEffectMap","_actionHistory","_queuedSideEffects","_handlers","_payloadGenerators","_payloads","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","setSideEffectConfig","sideEffect","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","initializeSideEffects","sideEffectStore","actionHistory","queuedSideEffects","mergeSelectionSets","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","setTransform","propagationInfo","sanitizePayload","propagate","shouldApplySideEffects","propagationIdentifiers","applicableSideEffects","getApplicableSideEffects","applySideEffects","getEntryExitSet","sourceSelectionSet","behaviourConditions","sideEffectConditions","physicalAction","actionBehaviourMap","behaviourMap","mapActionsAndBehaviour","handler","onDataModelPropagation","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","sideEffectsMap","SideEffect","initedActions","initializePhysicalActions","physicalActions","phyAction","initedPhysicalActions","getDefaultTargetContainer","bindActionWithBehaviour","registerPhysicalActionHandlers","targets","behaviourList","applicableSelectionSets","handlers","genericHandlers","onPhysicalAction","beh","_this$context","getRangeFromIdentifiers","defaultFn","__default","GenericBehaviour","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_this$getAddSetFromCr","getAddSetFromCriteria","getPropagationInf","_payload","setSelectionSet","_this$firebolt","_selectionSet$getSets","getSets","getSetInfo","getSourceFields","setFields","setKeys","aggFns","propData","propagationFields","resetted","otherFields","generic_slicedToArray","generic_toConsumableArray","_propagationIdentifiers","VolatileBehaviour","existingAddSet","SELECTION","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","HighlightBehaviour","BrushBehaviour","BEHAVIOURNAMES","FilterBehaviour","PersistentBehaviour","updateEntry","SelectBehaviour","mergedExitSet","completeSetCount","dragCriteriaRetriever","drag_action_config_defineProperty","_dragCriteriaRetrieve","sourceInfo","startPos","ranges","getRangeFromPositions","getDragActionConfig","getSourceInfo","coordType","attachDragEvent","targetEl","drawingInf","touchStart","d3Drag","getDrawingContext","newStartPos","newEndPos","dragging","dragDiff","triggerPhysicalAction","dragEnd","hover","tooltip","svgContainer","getAllPoints","showInPosition","ACTION_NAMES","generatePayloadFromEvent","click","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","ANCHORS","BRUSH_ANCHORS","PERSISTENT_ANCHORS","HIGHLIGHTER","CROSSLINE","FRAGMENTED_TOOLTIP","AXIS_LABEL_HIGHLIGHTER","GenericSideEffect","generic_sideeffect_classCallCheck","_strategy","plotPointsFromIdentifiers","_this$firebolt$contex","getPlotPointsFromIdentifiers","_sourceInfo","_layers","_plotPointsFromIdentifiers","SurrogateSideEffect","_config$reset","layerFields","filteredUids","_ref2$","surrogate_slicedToArray","SpawnableSideEffect","_drawingContext","changeVisibility","sideEffectGroup","visible","SelectionBox","boxConf","box","drawingContext","unitWidth","unitHeight","selectionGroupClassName","persistent","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","xRange","yRange","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort2","selection_box_helper_slicedToArray","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort4","_xDim","_yDim","direction","selectionBox","selectiondrag","BEHAVIOURS","selectionBoxDrag","onDrag","ACTIONS","boxClassName","parentClassName","connectorClassName","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","arrow","Content","content_classCallCheck","_model","_formatter","ctx","displayFormat","table","tbody","elemData","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","defConf","contentConfig","specificClass","reorderContainers","contentConf","_target","tooltipPos","_orientation","connector","_offset","dim","_extent","contentContainer","topSpace","dimX","rightSpace","leftSpace","bottomSpace","arrowSize","tooltipHeight","tooltipWidth","spaces","positionHorizontal","positionVal","positionVertical","hMax","vMax","_position","HIGHLIGHT_SUMMARY","defNumberFormat","formatters","strategies_defineProperty","isSingleValue","dataLen","stackedSum","getStackedKeyValue","getKeyValue","isSelected","removeKey","isStackedBar","stackedValue","keyObj","valueObj","stackedValueObj","margin-left","getStackedSum","generateRetinalFieldsValues","valueArr","retinalFields","dimensionMeasureMap","fieldInf","retField","retIndex","retinalFieldValue","measuresArr","icon","_fieldInf$retField","formattedRetinalValue","hasMultipleMeasures","_fieldInf$measure","dName","formatterFn","currentMeasureValue","strategies_toConsumableArray","buildTooltipData","nestedDataObj","fieldValues","_dataModel$getData","fieldspace","_context$retinalField","detailFields","_ref2$showStackSum","showStackSum","_context$payload$sele","selectedMeasures","containsDetailField","getFieldInf","defFormatter","nf","getTabularData","strategies_construct","isStacked","isStackedChart","isStackedBarChart","filteredMeasures","generateTooltipContent","nestedData","_nestedData$i","_fieldInf$field","len2","_fieldInf$name","strategies_strategies","showMultipleMeasures","entryUids","fieldsConf","aggregatedValues","getAggregatedValues","dimsMap","groupedDm","dmFields","_values$0$data","_fieldsConf$measure$d","rowValues","configResolvers","tooltip_defineProperty","_configResolvers","specificConf","_default","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","tooltip_getPrototypeOf","_tooltips","sanitizeConfig","strategyObj","sanitizedConf","createTooltip","tooltips","positionRelativeTo","sourceFields","tooltip_get","plotDim","_config$strategy","projectFields","dataTransform","strategyFn","dt","layoutContainer","parentContainerDimensions","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","highlightSummary","selectionSummary","FragmentedTooltip","totalHeight","totalWidth","boundBox","showVertically","boxes","fragmented_tooltip_toConsumableArray","fragmented_tooltip_get","fragmented_tooltip_getPrototypeOf","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","repositionArrow","Crossline","bandWidth","px","bandClass","lineClass","isEmptyDataModel","plotWidth","crossline_toConsumableArray","startPx","endPx","parentGroup","getFormattedSet","selectedPointsId","formattedSet","helper_objectSpread","fadeFn","fadeOnBrush","fadeOnBrushFn","getPayload","actualPoint","commonSet","excludeSetIds","currentHighlightedSet","selectEntrySet","diffSet","pseudoFocus","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","plot_highlighter_getPrototypeOf","excludeSet","selectedPointsIds","plot_highlighter_toConsumableArray","currentStrategy","getExcludeSetIds","plot_highlighter_objectSpread","FilterEffect","entryModel","resetData","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","anchors_getPrototypeOf","_layersMap","addAnchorLayers","addLayer","layerCls","depLayerEncoding","defaultSizeValue","commonName","layerOwner","defaultClassName","groupId","getTransitionConfig","owner","registry","upperAnchors","lowerAnchors","targetObj","anchors_toConsumableArray","layerConfig","linkedLayer","getLayerByName","linkedLayerName","isUpperAnchor","_linkedLayer$getTrans2","anchors_slicedToArray","dmFromPayload","_linkedLayer$getTrans4","transformedDataModel","anchorSizeConfig","getAnchorSizeOnInteraction","getAnchorStroke","PersistentAnchors","anchor","defaultInteractionLayerEncoding","BrushAnchors","AxisLabelHighLighter","selectedData","selectedDataValues","_context$axes","_context$axes$x","_context$axes$y","axis_labels_highlighter_toConsumableArray","fieldMeta","selData","_axis$getTicksBasedOn","getTicksBasedOnData","selectedElements","nullDataTooltipMap","bar","applySideEffectOnEmptyTarget","behaviour_effect_map_defineProperty","brush","brushEntrySet","unionedSet","highlightUids","SIDE_EFFECTS","convertToObj","payloadGenerator","selectionDataModel","facetByFields","propPayload","getRangeFromData","_propConfig$includeMe","includeMeasures","selectionDataFields","measureNamesIdx","excludeSelectedMeasures","payload_generator_defineProperty","selectionSetFields","_facetByFields","payload_generator_slicedToArray","_facetByFields$","facetFields","_facetByFields$2","facetValues","facetIndices","identifierIdxMap","sourceIdentifierFields","identifierMap","payload_generator_toConsumableArray","pseudoSelect","isSideEffectEnabled","se","sideEffectPolicies","sideEffectCheckers","propagationData","prepareSelectionSetMap","maps","getUniqueKeys","_ref2$keys","_ref2$dimensionsMap","mKey","firebolt_helper_toConsumableArray","sanitizePayloadCriteria","propFields","_ref4","dimsMapGetter","firebolt_helper_defineProperty","fieldIndexMap","dataWithFacets","measureNameField","propDims","origRow","rowVal","newRowVal","createMapByDimensions","cacheMap","_cacheMap","sideEffectPolicy","hasCommonCanvas","sourceCanvas","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","firebolt_getPrototypeOf","_connectedBehaviours","payloadGenerators","changeSideEffectStateOnPropagation","unitId","aliasName","parentAlias","propagationSourceCanvas","sourceUnitId","sourceUnit","sideEffectInstances","actionOnSource","mappedEffects","applySideEffect","_this$_metaData","_dimsMapGetter","enabledFn","enabled","getPayloadGeneratorFor","payloadFn","behaviourPolicies","dispatchSecondaryActions","secAction","generatedPayload","payloadGeneratorFn","firebolt_get","cachedData","action_behaviour_map_defineProperty","UnitBrushBehaviour","dragStart","brush_get","behaviours_brush_getPrototypeOf","getGridLayerDefinitions","axisType","getDefaultVisibilty","getLayerDefinition","_definition","_axes","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","dimensionSubTypes","getValidSubtype","attachDataToGridLineLayers","_gridLines","_gridBands","gridLayerData","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_toConsumableArray","src_listener_map_slicedToArray","fieldsVal","removeExitLayers","layersMap","markSet","queuedLayerDefs","_queuedLayerDefs","layerDefArr","listener_map_toConsumableArray","timeDiffsByField","minimumConsecutiveDifference","_ref8","_timeDiffsByField","originalData","_prepareSelectionSetD","prepareSelectionSetData","_prepareSelectionSetM","createSelectionSet","attachPropagationListener","_ref9","createGridLineLayer","vuConf","atomicDef","_ref11","_ref12","_ref15","_ref16","layerAxisIndexVal","_layerAxisIndex","axesVal","_dimensionMeasureMap","src_props_defineProperty","_PROPS","facets","facetKeys","facetFieldsMap","trackerClassName","arcLayerClassName","sideEffectClassName","local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$TRA","_cachedValuesMap","local_options_toConsumableArray","oldData","PseudoSelectBehaviour","unitNs","VisualUnit","visual_unit_classCallCheck","lifeCycleManager","_gridLinesSelection","_gridBandsSelection","createFireboltInstance","_Object$assign","interactions","fireboltDeps","Cls","getFireboltCls","visual_unit_defineProperty","getActionBehaviourMap","getBehaviourEffectMap","_firebolt","createRootContainers","_rootSvg","_sideEffectGroup","initSideEffects","class","renderGridLineLayers","gridLineParentGroup","_entry","grid_lines_slicedToArray","parentGroupClass","rootSvg","_this$parentContainer","parentContainerInf","layerDefinition","layerDefinitions","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","visual_unit_toConsumableArray","layerdeps","_this$_dependencies","parentModel","REACTIVE_PROPS","pointInf","getMarkInfFromLayers","visual_unit_objectSpread","markInf","parsedIdentifiers","_this$fields","xdom","ydom","_rtree","localNs","dataDomain","visual_unit_slicedToArray","dispatchQueuedSideEffects","clearActionHistory","visual_unit_construct","Variable","ComposedVars","composed_vars_classCallCheck","composed_vars_possibleConstructorReturn","composed_vars_getPrototypeOf","vars","_vars","_data","member","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","simple_var_getPrototypeOf","oneVar","_oneVar","dtFormat","dateFormat","fieldDef","varInst","convertToVar","datamodel","transformFields","field_sanitizer_slicedToArray","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","BORDER_WIDTH","facet","handleBlankCell","externalClassname","sanitiseHeaderMatrix","matrices","sanitiseFacetValues","blankCell","normal","latestSource","lastSource","initStore","group_utils_defineProperty","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","getAxisKey","getCellKey","columnId","extractUnitConfig","unitConfig","hasOneField","getHeaderText","rowLength","headerCreator","fieldHeaders","TextCell","findInGroup","variable","channel","group_utils_this","facetType","projType","getAxisType","retriveDomainFromData","mutateAxesFromMap","cacheMaps","xAxes","yAxes","xAxisSet","yAxisSet","axisId","getEncoder","encoder","CartesianEncoder","layerConf","hasPolarEncodings","PolarEncoder","getHeaderAxisFrom","userAxisFromConfig","axisFrom","headerFrom","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","projections","getBorders","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","getFieldsFromSuppliedLayers","suppliedLayerConfig","encodingArr","group_utils_typeof","extractFields","facetsAndProjections","flattenArray","sortFacetFields","facetNames","sortInfo","sortConfig","facetSortConfig","getSchemaDef","removeExitCells","exitCells","qualifiedStateProps","placeholder","globalConfig","VisualEncoder","visual_encoder_classCallCheck","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom4","colHeader","colAxis","scaleMaps","getFieldNames","fieldVar","matrix_model_toConsumableArray","prepareHashMaps","rowKey","joinedRowKey","createJoinedKeys","keyArr","joinedKey","formatKeys","formatterList","formattedKeys","rKeys","rIdx","createColumnDataModels","colContext","sourceDM","rowFacets","colFacets","rowKeyArr","colKeyObj","newRowIndex","splitModelsHashMap","currentColumnIndex","colKeyArr","colKey","hashMapKey","splitByColumn","optionalProjections","facetInfo","projectionInfo","geomCellCreator","_indices$i","projectionIndexObject","columnIndex","matrix_model_objectSpread","getMatrixModel","currentRowIndex","prepareProjectionInfo","colProjections","rowProjections","rowProj","rIndex","newRIndex","colProj","cIndex","newCIndex","newRowProj","newColProj","rowFields","columnFields","prepareFacetInfo","rowFacetNames","colFacetNames","allFacets","_getSplitModelHashMap","getSplitModelHashMap","splitModels","rowKeyHashMap","colKeyHashMap","rowKeys","colKeys","splitContext","splitByRow","setDefaultConfigForFacet","facetsUserConfig","border","isBorderPresent","isGridLinePresent","gridLinesShowLength","borderWidth","generalContext","rowKeyObj","createRowDataModels","rowContext","rowIndexForCurrentKey","_createColumnDataMode","_createColumnDataMode2","_createColumnDataMode3","_createColumnDataMode4","formattedColKeys","facetField","rawFormat","columnKeys","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","sortedFields","layerConfigArr","getLayerConfig","retinalConfig","axesCreators","normalizedColumns","normalizedRows","cell_creator_toConsumableArray","geomCellKey","geomCell","updateCells","facetKey","extractAxisIndex","createAxisCells","currObj","axisInst","_axisInst$config","AxisCell","BlankCell","extractFacetIndex","headerPlaceholderGn","selectionObj","counter","selectionKeys","keySet","textCells","createTextCells","textCell","generatePlaceholders","encoders","valuesMatrix","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","rowsSecondary","rowSec","columnsPrimary","colPrime","columnsSecondary","colSec","_selectionObj","section","hContext","getAxisFields","fieldHolder","ac","transformDataModel","resolvedData","newFieldsConfig","aggregationFns","nearestAggFns","resolvedAggFns","sortDmTemporalFields","computeMatrices","resolverConfig","otherEncodings","isProjection","isFacet","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","cellCreator","valueCellsCreator","valueMatrixInfo","_mutateAxesFromMap","createUnits","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","_map4","leftFacets","rightFacets","rowPriority","colPriority","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","sanitiseBorderMatrix","bottomBorderObj","sanitiseGeomMatrix","RESOLVER_PROPS","units","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_fireboltDeps","_placeholderInfo","matrix_resolver_toConsumableArray","getProjectionFields","_horizontalAxis","_verticalAxis","matrixType","matrix_resolver_defineProperty","_this5","_this$dependencies","autoGroupBy","_this$getAllFields","retContext","getRetinalFieldsDomain","getRetinalAxes","retinalEncoder","setCommonDomain","retinalAxes","updateVisualUnit","placeholders","bottomLeft","bottomRight","_this$dependencies2","showHeaders","_this$registry$cells","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","footers","topLeft","topRight","updateModel","dataTypeScaleMap","src_data_type_scale_map_defineProperty","data_type_scale_map_dataTypeScaleMap","getAdjustedDomain","y1ratio","y2ratio","allSameSign","generateAxisFromMap","axisKey","groupAxes","currentAxes","commonAxisKey","axisConfig","getAxisConfig","axisInfo","axisOrientation","rawUserAxisConfig","userAxisConfig","_rotationLock","createSimpleAxis","sanitizeIndividualLayerConfig","encodingConfigs","getDefaultMark","colFieldType","rowFieldType","createRetinalAxis","fieldProps","getIndex","arrIndex","getLayerConfFromFields","colFields","userLayerConfig","encoder_helper_toConsumableArray","xFields","yFields","colFieldExist","rowFieldExist","resolverAxes","axesArr","userConfig","getSortingConfig","currentFieldName","axesConfig","lastSortConfig","geomCellAxes","1","unitsArr","encodingDomains","axisTypeIndex","typeOfField","_resolver$axes","adjustedDomain","typeOfAxis","alignZeroLine","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","existIndex","axisFromIndex","cartesian_encoder_get","cartesian_encoder_getPrototypeOf","encodingObj","layerArray","serializedLayers","colField","colFieldName","rowField","configs","rowFieldName","defConfigs","layerConfigs","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","axesCls","polar_encoder_defineProperty","_axesCls","pieAxes","varInstances","encType","domainProps","matrixInstance","unitDomains","setRadiusFactor","sizeFieldIndex","sizeMultiplier","getSizeMultiplier","sizeAxisDomain","encodingFields","sanitizedRows","sanitizedColumns","polar_encoder_get","polar_encoder_getPrototypeOf","sanitizedFields","typeIndex","polar_encoder_toConsumableArray","sanitizedConfig","angleField","angle0Field","RetinalEncoder","newAxes","visual_group_local_options","visual_group_local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","cellValue","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","getLogicalSpace","rowHeight","currentRowHeight","setMatrixInstances","_composition","updateChecker","option","hasValue","hasOneValue","createMatrices","groupConfig","matrixConfig","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setRetinalAxisDomain","cornerMatrices","createHeaders","metaData","unionUnitDomains","registerDomainChangeListener","visual_group_props_defineProperty","visual_group_props_PROPS","groupType","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","visual_group_getPrototypeOf","componentSubRegistry","visual_group_assertThisInitialized","_selection","createMatrixResolver","initializeGlobalState","globalState","createUnitState","_VisualUnit$getState2","visual_group_helper_slicedToArray","localState","createLayerState","_BaseLayer$getState2","setupChangeListeners","stores","_context$registry","comp","storeInst","listenerInf","getSimpleAxes","_this$resolver$getAll","visual_group_defineProperty","sanitizedValue","shouldRender","localFields","initializeFields","unsubscribeChangeListeners","sanitizeRetinalConfig","retinalConf","confValue","createEncoderInstance","fieldSanitizer","setAxisAndHeaders","resolverFields","initializeResolverFields","hasMandatoryFields","info","existingRemoveSet","select_toConsumableArray","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","propagationBehaviourMap","_propagationBehaviour","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","src_firebolt_helper_toConsumableArray","DEFAULTICONSIZE","SCALE_FUNCTIONS","HORIZONTAL","VALUE","POSITION_ALIGNMENT_MAP","constants_defineProperty","_POSITION_ALIGNMENT_M","OPPOSITE_POSITION","_OPPOSITE_POSITION","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_getPrototypeOf","legend_firebolt_inherits","legend_firebolt_createClass","getPropagationSelectionSet","behaviourName","canvasAlias","legend_firebolt_toConsumableArray","getFullData","getCriteriaFromData","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","ALIGN","DEFAULT_MEASUREMENT","marginHorizontal","paddingRight","LEGEND_TITLE","_buffer","legend_defaults_defineProperty","borderStyle","borderColor","bounds","upper","tempConfig","STEP_DEFAULT_CONFIG","ICON_MAP","LEGEND_MARKER_PROPS","side_effects_selection_box_classCallCheck","side_effects_selection_box_possibleConstructorReturn","side_effects_selection_box_getPrototypeOf","gradientDimension","legendGradContainer","legendSelGroup","selBox","enterFn","selection_box_drag_defineProperty","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_highlighter_getPrototypeOf","SYMBOL_PADDING","LegendMarker","legend_marker_classCallCheck","legend_marker_possibleConstructorReturn","legend_marker_getPrototypeOf","_graphicElements","markerElement","legendmarkerTextContainer","legendmarkerText","rotateAngle","lableConfig","labelText","_getRelativePosition","getRelativePosition","canvas","legendContainer","_canvasMount","_labelManager$getSmar","MARKER_BUFFER","legendmarkerGroup","textElement","createTextCell","labelManagerRef","maxLines","_minTickDiff","_cells","resetLogicalSpace","title","_title","getScaleInfo","scaleType","scaleFn","getInterpolatedArrayData","domainForLegend","scaleParams","requiredWidth","requiredHeight","upperBound","maxTickDiff","alignment","smartLabelCalc","minimumTickSize","_smartLabelCalc$getOr","isInteger","getcomputedArray","computationhelper","requiredMeasure","availableMeasure","currentTickValue","nextTickValue","measureParam","pixelPerTick","getInterpolatedData","recomputeSteps","getTickMeasure","_scaleParams$measures","getItemMeasures","_labelManager","_labelManager$getOriS","calculateTitleWidth","titleWidth","maxItemSpaces","itemSpaces","localBuffer","cur","SimpleLegend","simple_legend_classCallCheck","_fieldName","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","_this$measurement","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","textOrientation","iconSpaces","maxIconWidth","labelSpace","itemSpace","iconSpace","newLabelWidth","titleSpaces","_this$measurement2","_this$config3","titleCreator","textAlign","titleContainer","marginPosition","_this$config4","_this$measurement3","widthBox","renderTitle","rawVal","simple_legend_defineProperty","idRangeMap","canvasRoot","legendOrientation","position_config_defineProperty","_legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","_context$config","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","transalate","defaultIcon","defaultIconSize","DiscreteLegend","_getScaleInfo","_field$schema","discrete_legend_toConsumableArray","ele","nextVal","discrete_legend_defineProperty","discrete_legend_get","discrete_legend_getPrototypeOf","renderDiscreteItem","_context$measurement2","_item$icon","text-align","marginVerticalBuffer","allSelections","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","legendRect","GradientLegend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","getScaleFactor","newAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","gradient_legend_getPrototypeOf","renderGradient","_createLegendSkeleton","StepLegend","domainLeg","isFraction","step_legend_toConsumableArray","numRight","step_legend_defineProperty","stepData","step_legend_get","step_legend_getPrototypeOf","renderStepItem","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","IS_POINT_MAP","true","false","LEGEND_TYPE_MAP","src_constants_defineProperty","_LEGEND_TYPE_MAP","HORIZONTAL_CENTER","VERTICAL_CENTER","share","operators_construct","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","canvasIterator","canvases","iteratorFn","cFn","visualGroup","_throwback","registerActions","fnName","_registrableComponents","setFireboltDependencies","actionModel","ActionModel","action_model_classCallCheck","registerPropagationBehaviourMap","dissociateBehaviour","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","*","propagationPayload","propagationCanvas","crossInteractionPolicy","TITLE_CONFIG","SUB_TITLE_CONFIG","MESSAGE_CONFIG","baseFontLimit","upperFontLimit","baseSizeLimit","upperSizeLimit","fractionImage","fractionChild","canvas_local_options_defineProperty","_localOptions","canvasOptions","_canvasOptions","local_options_slicedToArray","arg1","arg2","local_options_typeof","titleConfig","subtitle","subtitleConfig","sub","LayoutComponent","layoutComponent_classCallCheck","_boundBox","_renderAt","_alignWith","_alignment","_componentName","_className","DummyComponent","newDimensions","renderAt","component","componentName","pagination","scrollBar","thickness","speed","legend","minHeight","minCharacters","verticalAlign","collapse","invalidValues","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_CLASS_NAME","NODE_PREFIX","DefinitionModel","definitionModel_classCallCheck","_host","host","_cut","cut","_ratioWeight","ratioWeight","_preferred","preferred","_lanes","lanes","_remainingHeight","_remainingWidth","remainingHeight","remainingWidth","getNodeId","_uid","yExtraSpace","smallestHeight","getCutType","smallestExtraHeightHorizontally","MAX_SAFE_INTEGER","containerHeight","hostHeight","xExtraSpace","smallestWidth","smallestExtraWidthVertically","containerWidth","hostWidth","createPlaceHolderComponent","placeComponent","definitionModel","leftOvercomponentRationWidth","isPreferred","isGridComponent","componentRatioWidth","leftHeight","leftWidth","_component$getLogical","componentHeight","componentWidth","firstLaneConfig","firstLane","secondLane","tree_classCallCheck","_parentCut","_this$_children","tree_toConsumableArray","parentCut","bound","nodeconfig","searchNode","childNode","nodeId","deleteSearchNode","LayoutModel","measurements","layout_model_classCallCheck","_measurements","_root","createTree","setBoundBox","addChildren","lane","allocateBoundingBox","totalWeight","carry","lastSibling","ratio","setHostSpatialConfig","setHostPosition","negotiateDimension","alteredDim","nonAlteredDim","cumultiveExtraSpaceAmt","childrenLength","extraSpaceAmt","computePosition","determineBoundBox","bb","_lastSibling$boundBox","_top","_left","_height","_width","_instance$parent$boun","setSpatialConfig","VIEW_INDEX","ROW_MATRIX_INDEX","2","COLUMN_MATRIX_INDEX","ROW_ROOT","COLUMN_ROOT","VERTICAL","Utils","utils_createClass","isDOMElement","getID","getElement","findContainer","coordinate","removeDiv","divId","DataPoint","data_point_classCallCheck","DataParser","data_parser_classCallCheck","data_parser_createClass","defaultDataPointLogic","nodepoints","getnodePoints","datapoint","HTMLDataAdapter","_DataParser","html_data_classCallCheck","html_data_possibleConstructorReturn","html_data_getPrototypeOf","html_data_inherits","html_data_createClass","getCoordinates","html_data_get","Renderer","renderer_classCallCheck","renderer_createClass","initRenderer","__logicalTree","HTMLRenderer","_Renderer","html_renderer_classCallCheck","html_renderer_possibleConstructorReturn","html_renderer_getPrototypeOf","_coordinates","html_renderer_inherits","html_renderer_createClass","createhtml","mainDiv","html_renderer_get","parentDiv","createAndCustomiseParent","hasHost","createAndPositionDiv","html_renderer_objectSpread","div","coordinates","findNode","nodeID","renderer","drawLayout","renderHTML","resolveAligment","componentData","alignWith","componentToAlign","componentMap","refNode","newNodeConfig","setAlignConfig","DrawingManager","drawing_manager_classCallCheck","_componentMap","_layoutClassName","layoutClassName","_renderer","drawing_manager_createClass","drawComponent","DefinitionManager","definition_manager_classCallCheck","_prioritySequence","_totalHeight","_totalWidth","_targetComponentMap","prepareTargetComponentMap","targetComponentMap","canvasComponent","tempDefModel","componentRef","getComponent","placeGridComponent","gridComponents","iscolumnPreffered","_placeComponent","rowpreffred","LayoutDef","layout_def_classCallCheck","_layoutDefinition","layout_def_createClass","addComponent","layoutDefinition","addMultipleComponent","componentArray","sanitizedDefinition","hostObj","hostID","childHost","resetComponentMap","LayoutManager","layout_manager_classCallCheck","_dimension","_skeletonType","skeletonType","_layoutDef","_drawingManager","_rootNodeID","con","resetNode","updateNode","compute","_layout","calLayOutDef","_context$dimension","layoutDef","prioritySequence","generateConfigModel","negotiate","broadcast","layoutComponents","componentArr","compo","elementName","removeElement","elemID","co","deleteElement","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","nameSpaceProps","equalityChecker","dispatchProps","sanitizedData","getMandatoryFields","_cachedProps","notifyAnimationEnd","viewInfo","layout","centerMatrix","viewMatricesInfo","promises","cellArr","lifeCycle","animDonePromises","applyPropagationPolicy","changeBehaviourStateOnPropagation","isMeasure","applyInteractionPolicy","splom","isSplom","interactionPolicy","_interactionPolicy","_crossInteractionPolicy","unitFireBolt","canvas_helper_defineProperty","canvas_helper_objectSpread","createLayoutManager","src_options","minUnitWidth","minUnitHeight","options_slicedToArray","_auxConfig$reset","oldConf","facetDefaultConfig","fixFacetConfig","fixScrollBarConfig","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_DEFAULT_CONFIGURATIO","_FieldNames$BORDER","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","rowData","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","minSecondMeasure","createMatrixEachLevel","_arr$i","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_layoutMatrix","_tree","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistributeSpaces","childDepth","createMatrixInstances","matrixInfo","breakPointer","_breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","RowVisualMatrix","row_matrix_classCallCheck","row_matrix_possibleConstructorReturn","row_matrix_getPrototypeOf","maxHeights","maxWidths","matrixInst","cellDimOptions","matrixIndex","_this2$getCellDimensi","getCellDimensions","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","remainingAvailWidth","cWidths","conditions","maxPrioritySpace","availableWidth","currentWidth","prioritySpace","logicalWidths","getPriorityDistribution","mWidth","mHeight","redistributeViewSpaces","computeViewableSpaces","rHeights","gutter","spaceTakenByColumn","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","colHeight","colWidth","heights","ColumnVisualMatrix","column_matrix_classCallCheck","column_matrix_possibleConstructorReturn","column_matrix_getPrototypeOf","heightDist","divider","condition","spaceTakenByRow","getDistributedWidth","layoutConfig","distWidth","rowLen","oldLogicalSpace","heightDistribution","getMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","paginationDetailsMap","scrollType","paginationMeasureGetter","relatedMaxMeasure","getMatrixMeasureForPagination","measureDetails","actualMeasure","scrollInfo","getMatrixHeightDetails","columnMatrixWidth","_getHeightRequiredByC","getHeightRequiredByColMatrix","maxColumnMatrixHeight","columnViewSpace","getViewableSpaces","columnPointer","columnMatrixHeight","maxHeightAvailableForRowMatrix","rowMatrixHeight","bufferCondition","isScroll","getActualBufferFromConfig","computations_slicedToArray","getBufferFromCondition","currentBufferType","horizontalBuffer","verticalBuffer","computeLayoutMeasurements","_getMatrixWidthDetail","getMatrixWidthDetails","_layout$config3","rowMatrixWidth","maxRowMatrixWidth","maxWidthAvailableForColumnMatrix","_getMatrixHeightDetai","_getActualBufferFromC","rowViewableSpaces","columnViewableSpaces","setValueMatrixMeasurements","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnHeightsPrimary","columnHeightsSecondary","measureSum","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","layout_getPrototypeOf","_layoutId","_scrollInfo","generateVisualMatrices","begColCells","endColCells","gutterSpace","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","RowMatrix","ColumnMatrix","layout_get","_computeLayoutMeasure","setViewInformation","pageNumber","pageType","totalPages","layout_defineProperty","renderGrid","currentPage","_viewInfo","maxRowHeight","maxColWidth","rowPointer","getViewMatrices","rowMatrices","getViewableMatrices","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$config","rowSpaces","colSpaces","rightWidth","topHeight","bottomHeight","centerHeight","centerWidth","viewWidth","viewHeight","actualCenterMeasures","totalMeasures","unitHeights","unitWidths","specificBorderApplier","borderTypes","showBorders","borderInfo","borderType","applySpecificBorder","applyBorders","borderApplierFn","borderApplier","border_helper_defineProperty","borderMapVal","borderMap","orderMaker","nestByStack","updateArr","optionalParams","currStack","prevStack","arrVal","stackVal","currElemIndex","newElem","arrElem","returnArr","spanCalculator","isNull","maskCreator","_nestByStack","viewMatrix","hierarchy","_nestByStack2","spanGenerator","spans","ridx","currSpan","getOrder","matrixSpanGeneratorMap","span_maker_defineProperty","_matrixSpanGeneratorM","orderGetter","viewMatrixMaker","spanMaker","matrixSpanGenerator","spanApplier","cellCounter","spaceAllocationDueToSpan","primaryUnitWidth","cumulativeWidth","spanApplierMap","_spanApplierMap","TransactionSupport","INTERFACE_IMPl","LAYER_DEF","DETAIL_FIELDS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_DEFAULT_CONFIG","_CONSTANTS$MARGIN","CONSTANTS","_CONSTANTS$PADDING","_CONSTANTS$HEADER_PAD","_CONSTANTS$TITLE_PADD","DEFAULT_PROPS","minSpacing","visual_cell_src_props_defineProperty","visual_cell_src_props_PROPS","caption","smartText","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","axis_cell_getPrototypeOf","_availHeight","_availWidth","axis_cell_assertThisInitialized","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","actualWidth","actualHeight","_axis$config2","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","blank_cell_getPrototypeOf","blank_cell_assertThisInitialized","setSmartText","_context$minSpacing","minHeightSpace","minWidthSpace","paddedHeight","paddedWidth","isTitleSubtitle","subType","returnVal","computeTextSpace","_context$minSpacing2","minText","_minTextSpace","smartSpace","smHeight","smWidth","headerPadding","text_cell_classCallCheck","text_cell_possibleConstructorReturn","text_cell_getPrototypeOf","text_cell_assertThisInitialized","titlePadding","vAlign","_this$smartText","translation","middle","setPadding","localPadding","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","geom_cell_getPrototypeOf","_unit","_datamodel","_transform","_caption","geom_cell_assertThisInitialized","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","resolveTitleSubTitleContent","rawContent","createHeading","prevCell","cellType","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","interactionRegistry","dataInfo","legendMeasures","titleText","legendIconShapeMapper","layerMarks","includes","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","setParentInfo","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","_this$params$componen","updateWrapper","_this$params$componen2","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","childHeight","message","imageNode","messageNode","formatFontSize","_params$config","headerCell","configType","headerAlignmentMap","component_wrapper_maker_defineProperty","_headerAlignmentMap","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","wrapperParams","component_wrapper_maker_objectSpread","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","_i","_headerValues","defaultDimensions","canvasHeight","canvasWidth","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","addFacetDataAndMeasureNames","facetData","facetVals","canvas_firebolt_helper_defineProperty","hasMeasureNameField","canvas_firebolt_helper_toConsumableArray","measureNameArr","isDimension","isCrosstab","dispatchBehaviours","_firebolt$context$con2","behaviourConfs","unitFirebolt","targetFirebolt","propagationDataSource","getPropagationSource","defaultCrossInteractionPolicy","propagationCanvasAlias","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","defaultInteractionPolicy","tooltipSideEffect","unitDimsMap","unitDims","group_firebolt_toConsumableArray","groupDataMap","facetMap","unitFieldsConfig","linkedRows","linkedRow","handleDataModelPropagation","attachBehaviours","crosstab","_this$context$config$","_ref$instance","findPlaceHolderById","addSelectedMeasuresInPayload","groupFields","_unit$fields","handlePhysicalAction","resetSelectAction","group_firebolt_get","auxConfig","propagateValues","sourceCanvasId","sideEfffects","propagationBehaviour","sourceBehaviour","propagationConf","propConf","behaviourInstance","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setComponentInfo","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","default_registry_defineProperty","_COMPONENTS","SUBREGISTRIES","utils","Smartlabel","globalCache","defaultRegistry","globalRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","Components","VisualLayer","unitHelpers","unitEnums","Encoders","encoderHelpers","groupUtils","groupEnums","SideEffects","standards","Behaviours","pkg","operators"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","import { getNumberFormattedVal } from './helper';\n\n/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (value, rawValue, field) {\n const formattedValue = getNumberFormattedVal(field, value);\n\n Object.defineProperties(this, {\n _value: {\n enumerable: false,\n configurable: false,\n writable: false,\n value\n },\n _formattedValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: formattedValue\n },\n _internalValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: rawValue\n }\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Returns the parsed value of field\n */\n get formattedValue () {\n return this._formattedValue;\n }\n\n /**\n * Returns the internal value of field\n */\n get internalValue () {\n return this._internalValue;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[i],\n formattedValue: field.formattedData()[i],\n };\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[ii],\n formattedValue: field.formattedData()[ii],\n };\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray } from '../utils';\n\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType) {\n let retFunc;\n\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'asc') {\n retFunc = (a, b) => a - b;\n } else {\n retFunc = (a, b) => b - a;\n }\n break;\n default:\n if (sortType === 'asc') {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? 1 : -1;\n };\n } else {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? -1 : 1;\n };\n }\n }\n\n return retFunc;\n}\n\n/**\n * Resolves the actual sorting function based on sorting string value.\n *\n * @param {Object} fDetails - The target field info.\n * @param {string} strSortOrder - The sort order value.\n * @return {Function} Returns the sorting function.\n */\nfunction resolveStrSortOrder (fDetails, strSortOrder) {\n const sortOrder = String(strSortOrder).toLowerCase() === 'desc' ? 'desc' : 'asc';\n return getSortFn(fDetails.type, sortOrder);\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData (data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg (groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data by applying the standard sorting mechanism.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction applyStandardSort (data, schema, sortingDetails) {\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n const sortFn = resolveStrSortOrder(fDetails, sortMeta);\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortFn(a[fDetails.index], b[fDetails.index]));\n }\n }\n}\n\n/**\n * Creates a map based on grouping.\n *\n * @param {Array} depColumns - The dependency columns' info.\n * @param {Array} data - The input data.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - The sorting details for standard sorting.\n * @return {Map} Returns a map.\n */\nconst makeGroupMapAndSort = (depColumns, data, schema, sortingDetails) => {\n if (depColumns.length === 0) { return data; }\n\n const targetCol = depColumns[0];\n const map = new Map();\n\n data.reduce((acc, currRow) => {\n const fVal = currRow[targetCol.index];\n if (acc.has(fVal)) {\n acc.get(fVal).push(currRow);\n } else {\n acc.set(fVal, [currRow]);\n }\n return acc;\n }, map);\n\n for (let [key, val] of map) {\n const nMap = makeGroupMapAndSort(depColumns.slice(1), val, schema, sortingDetails);\n map.set(key, nMap);\n if (Array.isArray(nMap)) {\n applyStandardSort(nMap, schema, sortingDetails);\n }\n }\n\n return map;\n};\n\n/**\n * Sorts the data by retaining the position/order of a particular field.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n * @param {Array} depColumns - The dependency column list.\n * @return {Array} Returns the sorted data.\n */\nfunction applyGroupSort (data, schema, sortingDetails, depColumns) {\n sortingDetails = sortingDetails.filter((detail) => {\n if (detail[1] === null) {\n depColumns.push(detail[0]);\n return false;\n }\n return true;\n });\n if (sortingDetails.length === 0) { return data; }\n\n depColumns = depColumns.map(c => fieldInSchema(schema, c));\n\n const sortedGroupMap = makeGroupMapAndSort(depColumns, data, schema, sortingDetails);\n return data.map((row) => {\n let i = 0;\n let nextMap = sortedGroupMap;\n\n while (!Array.isArray(nextMap)) {\n nextMap = nextMap.get(row[depColumns[i++].index]);\n }\n\n return nextMap.shift();\n });\n}\n\n/**\n * Sorts the data.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nexport function sortData (dataObj, sortingDetails) {\n let { schema, data } = dataObj;\n\n sortingDetails = sortingDetails.filter(sDetial => !!fieldInSchema(schema, sDetial[0]));\n if (sortingDetails.length === 0) { return; }\n\n let groupSortingIdx = sortingDetails.findIndex(sDetial => sDetial[1] === null);\n groupSortingIdx = groupSortingIdx !== -1 ? groupSortingIdx : sortingDetails.length;\n\n const standardSortingDetails = sortingDetails.slice(0, groupSortingIdx);\n const groupSortingDetails = sortingDetails.slice(groupSortingIdx);\n\n applyStandardSort(data, schema, standardSortingDetails);\n data = applyGroupSort(data, schema, groupSortingDetails, standardSortingDetails.map(detail => detail[0]));\n\n dataObj.uids = data.map(row => row.pop());\n dataObj.data = data;\n}\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport { sortData } from './sort';\nimport { FieldType } from '../enums';\nimport { ROW_ID } from '../constants';\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: ROW_ID,\n type: FieldType.DIMENSION\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].internalValue ===\n dm2Fields[fieldName].internalValue && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum, { format: this.schema.format }));\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport PartialField from '../partial-field';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n static parser() {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n\n static get BUILDER() {\n const builder = {\n _params: {},\n _context: this,\n fieldName(name) {\n this._params.name = name;\n return this;\n },\n schema(schema) {\n this._params.schema = schema;\n return this;\n },\n data(data) {\n this._params.data = data;\n return this;\n },\n partialField(partialField) {\n this._params.partialField = partialField;\n return this;\n },\n rowDiffset(rowDiffset) {\n this._params.rowDiffset = rowDiffset;\n return this;\n },\n build() {\n let partialField = null;\n if (this._params.partialField instanceof PartialField) {\n partialField = this._params.partialField;\n } else if (this._params.schema && this._params.data) {\n partialField = new PartialField(this._params.name,\n this._params.data,\n this._params.schema,\n this._context.parser());\n }\n else {\n throw new Error('Invalid Field parameters');\n }\n return new this._context(partialField, this._params.rowDiffset);\n }\n };\n return builder;\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\nimport CategoricalParser from '../parsers/categorical-parser';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n\n static parser() {\n return new CategoricalParser();\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val, { format }) {\n let result;\n // check if invalid date value\n if (!this._dtf) {\n this._dtf = new DateTimeFormatter(format);\n }\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { rowDiffsetIterator } from '../operator/row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nexport const calculateContinuousDomain = (data, rowDiffset) => {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n};\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\nimport TemporalParser from '../parsers/temporal-parser';\nimport { calculateContinuousDomain } from '../helper';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n return calculateContinuousDomain(this.partialField.data, this.rowDiffset);\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data\n * If data is of type invalid or has missing format use the raw value\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n const dataFormat = this.format();\n\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n // If value is of invalid type or format is missing\n if (InvalidAwareTypes.isInvalid(datum) || (!dataFormat && Number.isFinite(datum))) {\n // Use the invalid map value or the raw value\n const parsedDatum = InvalidAwareTypes.getInvalidType(datum) || datum;\n data.push(parsedDatum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, dataFormat));\n }\n });\n return data;\n }\n\n static parser() {\n return new TemporalParser();\n }\n}\n\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import Dimension from '../dimension';\nimport BinnedParser from '../parsers/binned-parser';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n\n static parser() {\n return new BinnedParser();\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport ContinuousParser from '../parsers/continuous-parser';\nimport { calculateContinuousDomain } from '../helper';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n return calculateContinuousDomain(this.partialField.data, this.rowDiffset);\n }\n\n static parser() {\n return new ContinuousParser();\n }\n}\n","import Categorical from './categorical';\nimport Temporal from './temporal';\nimport Binned from './binned';\nimport Continuous from './continuous';\nimport { DimensionSubtype, MeasureSubtype } from '../enums';\n\n\nclass FieldTypeRegistry {\n constructor() {\n this._fieldType = new Map();\n }\n\n registerFieldType(subtype, dimension) {\n this._fieldType.set(subtype, dimension);\n return this;\n }\n\n has(type) {\n return this._fieldType.has(type);\n }\n\n get(type) {\n return this._fieldType.get(type);\n }\n}\n\nconst registerDefaultFields = (store) => {\n store\n .registerFieldType(DimensionSubtype.CATEGORICAL, Categorical)\n .registerFieldType(DimensionSubtype.TEMPORAL, Temporal)\n .registerFieldType(DimensionSubtype.BINNED, Binned)\n .registerFieldType(MeasureSubtype.CONTINUOUS, Continuous);\n};\n\nconst fieldRegistry = (function () {\n let store = null;\n function getStore () {\n store = new FieldTypeRegistry();\n registerDefaultFields(store);\n return store;\n }\n return store || getStore();\n}());\n\nexport default fieldRegistry;\n\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport { fieldRegistry } from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n\n if (fieldRegistry.has(schema.subtype)) {\n return fieldRegistry.get(schema.subtype)\n .BUILDER\n .fieldName(schema.name)\n .schema(schema)\n .data(data)\n .rowDiffset(`0-${data.length - 1}`)\n .build();\n }\n return fieldRegistry\n .get(schema.type === FieldType.MEASURE ? MeasureSubtype.CONTINUOUS : DimensionSubtype.CATEGORICAL)\n .BUILDER\n .fieldName(schema.name)\n .schema(schema)\n .data(data)\n .rowDiffset(`0-${data.length - 1}`)\n .build();\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n if (fieldRegistry.has(schema.subtype)) {\n return fieldRegistry.get(schema.subtype)\n .BUILDER\n .partialField(partialField)\n .rowDiffset(rowDiffset)\n .build();\n }\n return fieldRegistry\n .get(schema.type === FieldType.MEASURE ? MeasureSubtype.CONTINUOUS : DimensionSubtype.CATEGORICAL)\n .BUILDER\n .partialField(partialField)\n .rowDiffset(rowDiffset)\n .build();\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","/**\n * Interface for all data converters\n */\nexport default class DataConverter {\n constructor(type) {\n this._type = type;\n }\n\n get type() {\n return this._type;\n }\n\n convert() {\n throw new Error('Convert method not implemented.');\n }\n\n}\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import { columnMajor } from '../../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr(arr, schema, options) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n const defaultOption = {\n firstRowHeader: true,\n };\n const schemaFields = schema.map(unitSchema => unitSchema.name);\n options = Object.assign({}, defaultOption, options);\n\n const columns = [];\n const push = columnMajor(columns);\n\n let headers = schemaFields;\n if (options.firstRowHeader) {\n // If header present then remove the first header row.\n // Do in-place mutation to save space.\n headers = arr.splice(0, 1)[0];\n }\n // create a map of the headers\n const headerMap = headers.reduce((acc, h, i) => (\n Object.assign(acc, { [h]: i })\n ), {});\n\n arr.forEach((fields) => {\n const field = [];\n schemaFields.forEach((schemaField) => {\n const headIndex = headerMap[schemaField];\n field.push(fields[headIndex]);\n });\n return push(...field);\n });\n return [schemaFields, columns];\n}\n\nexport default DSVArr;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, schema, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), schema, options);\n}\n\nexport default DSVStr;\n","import DataConverter from '../model/dataConverter';\nimport DSVStr from '../utils/dsv-str';\nimport DataFormat from '../../enums/data-format';\n\nexport default class DSVStringConverter extends DataConverter {\n constructor() {\n super(DataFormat.DSV_STR);\n }\n\n convert(data, schema, options) {\n return DSVStr(data, schema, options);\n }\n}\n","import { columnMajor } from '../../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr, schema) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n const schemaFieldsName = schema.map(unitSchema => unitSchema.name);\n\n arr.forEach((item) => {\n const fields = [];\n schemaFieldsName.forEach((unitSchema) => {\n if (unitSchema in header) {\n insertionIndex = header[unitSchema];\n } else {\n header[unitSchema] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[unitSchema];\n });\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import DataConverter from '../model/dataConverter';\nimport FlatJSON from '../utils/flat-json';\nimport DataFormat from '../../enums/data-format';\n\nexport default class JSONConverter extends DataConverter {\n constructor() {\n super(DataFormat.FLAT_JSON);\n }\n\n convert(data, schema, options) {\n return FlatJSON(data, schema, options);\n }\n}\n","import DataConverter from '../model/dataConverter';\nimport DSVArr from '../utils/dsv-arr';\nimport DataFormat from '../../enums/data-format';\n\nexport default class DSVArrayConverter extends DataConverter {\n constructor() {\n super(DataFormat.DSV_ARR);\n }\n\n convert(data, schema, options) {\n return DSVArr(data, schema, options);\n }\n}\n","import DataConverter from '../model/dataConverter';\nimport AUTO from '../utils/auto-resolver';\nimport DataFormat from '../../enums/data-format';\n\nexport default class AutoDataConverter extends DataConverter {\n constructor() {\n super(DataFormat.AUTO);\n }\n\n convert(data, schema, options) {\n return AUTO(data, schema, options);\n }\n}\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, schema, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, schema, options);\n}\n\nexport default Auto;\n","import DataConverter from './model/dataConverter';\nimport { DSVStringConverter, DSVArrayConverter, JSONConverter, AutoDataConverter } from './defaultConverters';\n\nclass DataConverterStore {\n constructor() {\n this.store = new Map();\n this.converters(this._getDefaultConverters());\n }\n\n _getDefaultConverters() {\n return [\n new DSVStringConverter(),\n new DSVArrayConverter(),\n new JSONConverter(),\n new AutoDataConverter()\n ];\n }\n\n /**\n * Sets the given converters in the store and returns the store\n * @param {Array} converters : contains array of converter instance\n * @return { Map }\n */\n converters(converters = []) {\n converters.forEach(converter => this.store.set(converter.type, converter));\n return this.store;\n }\n\n /**\n * Registers a Converter of type DataConverter\n * @param {DataConverter} converter : converter Instance\n * @returns self\n */\n register(converter) {\n if (converter instanceof DataConverter) {\n this.store.set(converter.type, converter);\n return this;\n }\n return null;\n }\n\n /**\n * Rempves a converter from store\n * @param {DataConverter} converter : converter Instance\n * @returns self\n */\n\n unregister(converter) {\n this.store.delete(converter.type);\n return this;\n }\n\n get(name) {\n if (this.store.has(name)) {\n return this.store.get(name);\n }\n return null;\n }\n\n}\n\nconst converterStore = (function () {\n let store = null;\n\n function getStore () {\n store = new DataConverterStore();\n return store;\n }\n return store || getStore();\n}());\n\nexport default converterStore;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS, ROW_ID } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport { converterStore } from './converter';\nimport { fieldRegistry } from './fields';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, formattedData, rawData, i) {\n const resp = {};\n\n for (const [key, field] of fields.entries()) {\n resp[field.name()] = new Value(formattedData[key][i], rawData[key][i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n\n for (const key in fields) {\n resp[key] = new Value(fields[key].formattedValue, fields[key].rawValue, key);\n }\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nconst selectModeMap = {\n [FilteringMode.NORMAL]: {\n diffIndex: ['rowDiffset'],\n calcDiff: [true, false]\n },\n [FilteringMode.INVERSE]: {\n diffIndex: ['rejectRowDiffset'],\n calcDiff: [false, true]\n },\n [FilteringMode.ALL]: {\n diffIndex: ['rowDiffset', 'rejectRowDiffset'],\n calcDiff: [true, true]\n }\n};\n\nconst generateRowDiffset = (rowDiffset, i, lastInsertedValue) => {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n const li = rowDiffset.length - 1;\n\n rowDiffset[li] = `${rowDiffset[li].split('-')[0]}-${i}`;\n } else {\n rowDiffset.push(`${i}`);\n }\n};\n\nexport const selectRowDiffsetIterator = (rowDiffset, checker, mode) => {\n let lastInsertedValueSel = -1;\n let lastInsertedValueRej = -1;\n const newRowDiffSet = [];\n const rejRowDiffSet = [];\n\n const [shouldSelect, shouldReject] = selectModeMap[mode].calcDiff;\n\n rowDiffsetIterator(rowDiffset, (i) => {\n const checkerResult = checker(i);\n checkerResult && shouldSelect && generateRowDiffset(newRowDiffSet, i, lastInsertedValueSel);\n !checkerResult && shouldReject && generateRowDiffset(rejRowDiffSet, i, lastInsertedValueRej);\n });\n return {\n rowDiffset: newRowDiffSet.join(','),\n rejectRowDiffset: rejRowDiffSet.join(',')\n };\n};\n\n\nexport const rowSplitDiffsetIterator = (rowDiffset, checker, mode, dimensionArr, fieldStoreObj) => {\n let lastInsertedValue = {};\n const splitRowDiffset = {};\n const dimensionMap = {};\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n let hash = '';\n\n let dimensionSet = { keys: {} };\n\n dimensionArr.forEach((_) => {\n const data = fieldStoreObj[_].partialField.data[i];\n hash = `${hash}-${data}`;\n dimensionSet.keys[_] = data;\n });\n\n if (splitRowDiffset[hash] === undefined) {\n splitRowDiffset[hash] = [];\n lastInsertedValue[hash] = -1;\n dimensionMap[hash] = dimensionSet;\n }\n\n generateRowDiffset(splitRowDiffset[hash], i, lastInsertedValue[hash]);\n lastInsertedValue[hash] = i;\n }\n });\n\n return {\n splitRowDiffset,\n dimensionMap\n };\n};\n\n\nexport const selectHelper = (clonedDm, selectFn, config, sourceDm, iterator) => {\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const { mode } = config;\n const rowDiffset = clonedDm._rowDiffset;\n const cachedValueObjects = clonedDm._partialFieldspace._cachedValueObjects;\n\n const selectorHelperFn = index => selectFn(\n cachedValueObjects[index],\n index,\n cloneProvider,\n cachedStore\n );\n\n return iterator(rowDiffset, selectorHelperFn, mode);\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nconst getKey = (arr, data, fn, rowId) => {\n let key = fn(arr, data, 0, rowId);\n\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${fn(arr, data, i, rowId)}`;\n }\n return key;\n};\n\nconst keyFn = (arr, fields, idx, rowId) => {\n const field = arr[idx];\n const val = field === ROW_ID ? rowId : fields[field].internalValue;\n return val;\n};\n\nconst domainChecker = (val, domain) => {\n const domainArr = domain[0] instanceof Array ? domain : [domain];\n return domainArr.some(dom => val >= dom[0] && val <= dom[1]);\n};\n\nconst boundsChecker = {\n [MeasureSubtype.CONTINUOUS]: domainChecker,\n [DimensionSubtype.TEMPORAL]: domainChecker\n};\n\nconst isWithinDomain = (value, domain, fieldType) => boundsChecker[fieldType](value, domain);\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n let fns = [];\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const { filterByDim = true, filterByMeasure = false, clone = true } = config;\n const clonedModel = clone ? cloneWithAllFields(model) : model;\n const modelFieldsConfig = clonedModel.getFieldsConfig();\n\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => (({ criteria = {} }) => {\n const { identifiers = [[], []], range } = criteria;\n let [fieldNames = [], values = []] = identifiers;\n const indices = fieldNames.reduce((map, name, i) => {\n map[name] = i;\n return map;\n }, {});\n fieldNames = fieldNames.filter(field => (field in modelFieldsConfig &&\n modelFieldsConfig[field].def.type === FieldType.DIMENSION) || field === ROW_ID);\n const dLen = fieldNames.length;\n const valuesMap = {};\n\n if (dLen) {\n for (let i = 1, len = identifiers.length; i < len; i++) {\n const row = identifiers[i];\n const key = `${fieldNames.map((field) => {\n const idx = indices[field];\n return row[idx];\n })}`;\n valuesMap[key] = 1;\n }\n }\n let rangeKeys = Object.keys(range || {}).filter(field => field in modelFieldsConfig);\n const hasData = values.length || rangeKeys.length;\n\n if (!filterByMeasure) {\n rangeKeys = rangeKeys.filter(field => modelFieldsConfig[field].def.type !== FieldType.MEASURE);\n }\n\n if (!filterByDim) {\n rangeKeys = rangeKeys.filter(field => modelFieldsConfig[field].def.type !== FieldType.DIMENSION);\n }\n\n return hasData ? (fields, i) => {\n let present = true;\n if (filterByDim) {\n present = dLen ? valuesMap[getKey(fieldNames, fields, keyFn, i)] : true;\n }\n\n return rangeKeys.every((field) => {\n const val = fields[field].internalValue;\n return isWithinDomain(val, range[field], modelFieldsConfig[field].def.subtype);\n }) && present;\n } : () => false;\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = clonedModel.select((fields, i) => fns.every(fn => fn(fields, i)), {\n saveChild: false\n });\n } else {\n filteredModel = clonedModel.select((fields, i) => fns.some(fn => fn(fields, i)), {\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\n\nexport const splitWithSelect = (sourceDm, dimensionArr, reducerFn = val => val, config) => {\n const {\n saveChild,\n } = config;\n const fieldStoreObj = sourceDm.getFieldspace().fieldsObj();\n\n const {\n splitRowDiffset,\n dimensionMap\n } = selectHelper(\n sourceDm.clone(saveChild),\n reducerFn,\n config,\n sourceDm,\n (...params) => rowSplitDiffsetIterator(...params, dimensionArr, fieldStoreObj)\n );\n\n const clonedDMs = [];\n Object.keys(splitRowDiffset).sort().forEach((e) => {\n if (splitRowDiffset[e]) {\n const cloned = sourceDm.clone(saveChild);\n const derivation = dimensionMap[e];\n cloned._rowDiffset = splitRowDiffset[e].join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n const derivationFormula = fields => dimensionArr.every(_ => fields[_].internalValue === derivation.keys[_]);\n // Store reference to child model and selector function\n if (saveChild) {\n persistDerivations(sourceDm, cloned, DM_DERIVATIVES.SELECT, config, derivationFormula);\n }\n cloned._derivation[cloned._derivation.length - 1].meta = dimensionMap[e];\n\n clonedDMs.push(cloned);\n }\n });\n\n\n return clonedDMs;\n};\nexport const addDiffsetToClonedDm = (clonedDm, rowDiffset, sourceDm, selectConfig, selectFn) => {\n clonedDm._rowDiffset = rowDiffset;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n persistDerivations(\n sourceDm,\n clonedDm,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n};\n\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n let extraCloneDm = {};\n\n let { mode } = selectConfig;\n\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const setOfRowDiffsets = selectHelper(\n cloned,\n selectFn,\n selectConfig,\n sourceDm,\n selectRowDiffsetIterator\n );\n const diffIndex = selectModeMap[mode].diffIndex;\n\n addDiffsetToClonedDm(cloned, setOfRowDiffsets[diffIndex[0]], sourceDm, selectConfig, selectFn);\n\n if (diffIndex.length > 1) {\n extraCloneDm = sourceDm.clone(cloneConfig.saveChild);\n addDiffsetToClonedDm(extraCloneDm, setOfRowDiffsets[diffIndex[1]], sourceDm, selectConfig, selectFn);\n return [cloned, extraCloneDm];\n }\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\n\nexport const splitWithProject = (sourceDm, projFieldSet, config, allFields) =>\n projFieldSet.map(projFields =>\n cloneWithProject(sourceDm, projFields, config, allFields));\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const { type, subtype, name } = unitSchema;\n if (type === FieldType.DIMENSION || type === FieldType.MEASURE) {\n if (!fieldRegistry.has(subtype)) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n } else {\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converter = converterStore.get(options.dataFormat);\n\n\n if (!converter) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converter.convert(data, schema, options);\n resolveFieldName(schema, header);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n\n // This stores the value objects which is passed to the filter method when selection operation is done.\n const valueObjects = [];\n const { fields } = nameSpace;\n const rawFieldsData = fields.map(field => field.data());\n const formattedFieldsData = fields.map(field => field.formattedData());\n rowDiffsetIterator(relation._rowDiffset, (i) => {\n valueObjects[i] = prepareSelectionData(fields, formattedFieldsData, rawFieldsData, i);\n });\n nameSpace._cachedValueObjects = valueObjects;\n\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n name: field,\n type: schema[i].subtype || schema[i].type,\n index: i,\n };\n }\n }\n return null;\n};\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.SORT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel;\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return selectionModel;\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const excludeModels = propModelInf.excludeModels || [];\n const criterias = propModelInf.criteria;\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n const matchingCriteria = criterias.filter(val => val.groupedModel === child);\n let selectionModel = applyExistingOperationOnModel(propModel, child);\n\n if (matchingCriteria.length) {\n selectionModel = filterPropagationModel(selectionModel, matchingCriteria, {\n filterByDim: false,\n filterByMeasure: true,\n clone: false\n });\n }\n propagateIdentifiers(child, selectionModel, config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n const addGroupedModel = ({ config: conf, model }) => {\n const { criteria: crit } = conf;\n let groupedModel;\n\n if (crit !== null && crit.fields.some(d => d.type === FieldType.MEASURE)) {\n groupedModel = getRootGroupByModel(model);\n }\n return Object.assign({}, conf, {\n groupedModel\n });\n };\n\n let criterias = [];\n\n if (identifiers === null) {\n criterias = [{\n criteria: []\n }];\n criteria = [];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(addGroupedModel);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria.map(addGroupedModel), {\n criteria: identifiers,\n groupedModel: identifiers !== null && identifiers.fields.some(d => d.type === FieldType.MEASURE) ?\n getRootGroupByModel(propagationInf.propagationSource) : null\n }]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n criterias.forEach((inf) => {\n const { criteria: crit } = inf;\n const propagationModel = filterPropagationModel(rootModel, crit, {\n filterByMeasure: !!crit.find(d => d.groupedModel === rootModel)\n });\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n criteria: crit\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModel, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, {\n model: rootModel,\n groupByModel: getRootGroupByModel(actionInf.model)\n }, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId,\n propagationSource: actionInf.model\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n\n\nexport const getNormalizedProFields = (projField, allFields, fieldConfig) => {\n const normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n return Array.from(new Set(normalizedProjField)).map(field => field.trim());\n};\n\n/**\n * Get the numberFormatted value if numberFormat present,\n * else returns the supplied value.\n * @param {Object} field Field Instance\n * @param {Number|String} value\n * @return {Number|String}\n */\nexport const getNumberFormattedVal = (field, value) => {\n if (field.numberFormat) {\n return field.numberFormat()(value);\n }\n return value;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport {\n updateFields,\n cloneWithSelect,\n cloneWithProject,\n updateData,\n getNormalizedProFields\n} from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n config.mode = config.mode || defConfig.mode;\n\n const cloneConfig = { saveChild: config.saveChild };\n return cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n const normalizedProjField = getNormalizedProFields(projField, allFields, fieldConfig);\n\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat, FilteringMode } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema,\n splitWithSelect,\n splitWithProject,\n getNormalizedProFields\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport Value from './value';\nimport { converterStore } from './converter';\nimport { fieldRegistry } from './fields';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Converters are functions that transforms data in various format tpo datamodel consumabe format.\n */\n static get Converters() {\n return converterStore;\n }\n\n /**\n * Register new type of fields\n */\n static get FieldTypes() {\n return fieldRegistry;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Returns the unique ids in an array.\n *\n * @return {Array} Returns an array of ids.\n */\n getUids () {\n const rowDiffset = this._rowDiffset;\n const ids = [];\n\n if (rowDiffset.length) {\n const diffSets = rowDiffset.split(',');\n\n diffSets.forEach((set) => {\n let [start, end] = set.split('-').map(Number);\n\n end = end !== undefined ? end : start;\n ids.push(...Array(end - start + 1).fill().map((_, idx) => start + idx));\n });\n }\n\n return ids;\n }\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n const cachedValueObjects = partialFieldspace._cachedValueObjects;\n const formattedData = field.formattedData();\n const rawData = field.partialField.data;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n cachedValueObjects.forEach((obj, i) => {\n obj[field.name()] = new Value(formattedData[i], rawData[i], field);\n });\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace,\n sourceId: propagationSourceId,\n propagationSource: this },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModel, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of rows in the source {@link DataModel}\n * instance based on a set of dimensions.\n *\n * For each unique dimensional value, a new split is created which creates a unique {@link DataModel} instance for\n * that split\n *\n * If multiple dimensions are provided, it splits the source {@link DataModel} instance with all possible\n * combinations of the dimensional values for all the dimensions provided\n *\n * Additionally, it also accepts a predicate function to reduce the set of rows provided. A\n * {@link link_to_selection | Selection} is performed on all the split {@link DataModel} instances based on\n * the predicate function\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByRow(['Origin'])\n * console.log(splitDt));\n * // This should give three unique DataModel instances, one each having rows only for 'USA',\n * // 'Europe' and 'Japan' respectively\n *\n * @example\n * // without predicate function:\n * const splitDtMulti = dt.splitByRow(['Origin', 'Cylinders'])\n * console.log(splitDtMulti));\n * // This should give DataModel instances for all unique combinations of Origin and Cylinder values\n *\n * @example\n * // with predicate function:\n * const splitWithPredDt = dt.select(['Origin'], fields => fields.Origin.value === \"USA\")\n * console.log(splitWithPredDt);\n * // This should not include the DataModel for the Origin : 'USA'\n *\n *\n * @public\n *\n * @param {Array} dimensionArr - Set of dimensions based on which the split should occur\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByRow (dimensionArr, reducerFn, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n dimensionArr.forEach((fieldName) => {\n if (!fieldsConfig[fieldName]) {\n throw new Error(`Field ${fieldName} doesn't exist in the schema`);\n }\n });\n\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n\n config = Object.assign({}, defConfig, config);\n\n return splitWithSelect(this, dimensionArr, reducerFn, config);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of fields in the source {@link DataModel}\n * instance based on a set of common and unique field names provided.\n *\n * Each DataModel created contains a set of fields which are common to all and a set of unique fields.\n * It also accepts configurations such as saveChild and mode(inverse or normal) to include/exclude the respective\n * fields\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByColumn( [['Acceleration'], ['Horsepower']], ['Origin'])\n * console.log(splitDt));\n * // This should give two unique DataModel instances, both having the field 'Origin' and\n * // one each having 'Acceleration' and 'Horsepower' fields respectively\n *\n * @example\n * // without predicate function:\n * const splitDtInv = dt.splitByColumn( [['Acceleration'], ['Horsepower'],['Origin', 'Cylinders'],\n * {mode: 'inverse'})\n * console.log(splitDtInv));\n * // This should give DataModel instances in the following way:\n * // All DataModel Instances do not have the fields 'Origin' and 'Cylinders'\n * // One DataModel Instance has rest of the fields except 'Acceleration' and the other DataModel instance\n * // has rest of the fields except 'Horsepower'\n *\n *\n *\n * @public\n *\n * @param {Array} uniqueFields - Set of unique fields included in each datamModel instance\n * @param {Array} commonFields - Set of common fields included in all datamModel instances\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByColumn (uniqueFields = [], commonFields = [], config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const normalizedProjFieldSets = [[commonFields]];\n\n config = Object.assign({}, defConfig, config);\n uniqueFields = uniqueFields.length ? uniqueFields : [[]];\n\n\n uniqueFields.forEach((fieldSet, i) => {\n normalizedProjFieldSets[i] = getNormalizedProFields(\n [...fieldSet, ...commonFields],\n allFields,\n fieldConfig);\n });\n\n return splitWithProject(this, normalizedProjFieldSets, config, allFields);\n }\n\n\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union,\n rowDiffsetIterator\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DataConverter } from './converter';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\nimport * as FieldsUtility from './fields';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union,\n rowDiffsetIterator\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version,\n DataConverter,\n FieldsUtility\n}, enums);\n\nexport default DataModel;\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n },\n minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\n","const swap = (arr, i, j) => {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n};\n\nconst defaultCompare = (a, b) => {\n if (a > b) {\n return -1;\n }\n return a > b ? 1 : 0;\n};\n\nconst quickselectStep = (arr, k, left, right, compare) => {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n};\n\n/**\n * Rearranges items so that all items in the [left, k] are the smallest. The k-th element will have the\n * (k - left + 1)-th smallest value in [left, right].\n * array: the array to partially sort (in place)\n * k: middle index for partial sorting (as defined above)\n * left: left index of the range to sort (0 by default)\n * right: right index (last index of the array by default)\n * compareFn: compare function\n *\n * Ref: https://github.com/mourner/quickselect\n * Example:\n * var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];\n * quickselect(arr, 8);\n * arr is [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]\n * ^^ middle index\n * @param {Array} arr the array to partially sort (in place)\n * @param {Number} k middle index for partial sorting (as defined above)\n * @param {Number} left left index of the range to sort (0 by default)\n * @param {Number} right right index (last index of the array by default)\n * @param {Function} compare compare function\n */\nconst quickselect = (arr, k, left, right, compare) => {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n};\n\nexport default quickselect;\n","import quickselect from './quick-select';\n\nconst createNode = children => ({\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n});\n\nconst extend = (a, b) => {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n};\n\n// min bounding rectangle of node children from k to p-1\nconst distBBox = (node, k, p, toBBox, destNode) => {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n};\n\n// calculate node's bbox from bboxes of its children\nconst calcBBox = (node, toBBox) => {\n distBBox(node, 0, node.children.length, toBBox, node);\n};\n\nconst compareNodeMinX = (a, b) => a.minX - b.minX;\nconst compareNodeMinY = (a, b) => a.minY - b.minY;\n\nconst bboxArea = a => (a.maxX - a.minX) * (a.maxY - a.minY);\n\nconst bboxMargin = a => (a.maxX - a.minX) + (a.maxY - a.minY);\n\nconst enlargedArea = (a, b) => (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n\nconst intersectionArea = (a, b) => {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n};\n\nconst contains = (a, b) => a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n\nconst intersects = (a, b) => b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n\nconst findItem = (item, items, equalsFn) => {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n};\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nconst multiSelect = (arr, left, right, n, compare) => {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n};\n\nconst all = (node, result) => {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n};\n\nexport default class RTree {\n constructor (maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all () {\n return all(this.data, []);\n }\n\n search (bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (const child of node.children) {\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) all(child, result);\n else nodesToSearch.push(child);\n }\n }\n\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n load (data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this.build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this.splitRoot(this.data, node);\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this.insertSingleItem(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert (item) {\n if (item) this.insertSingleItem(item, this.data.height - 1);\n return this;\n }\n\n clear () {\n this.data = createNode([]);\n return this;\n }\n\n remove (item, equalsFn) {\n if (!item) return this;\n\n let i;\n let parent;\n let goingUp;\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this.condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toJSON () { return this.data; }\n\n fromJSON (data) {\n this.data = data;\n return this;\n }\n\n toBBox (item) { return item; }\n\n compareMinX (a, b) { return a.minX - b.minX; }\n compareMinY (a, b) { return a.minY - b.minY; }\n\n build (items, left, right, height) {\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / (M ** (height - 1)));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this.build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n chooseSubtree (bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (const child of node.children) {\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n insertSingleItem (item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this.chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this.split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this.adjustParentBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n split (insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this.chooseSplitAxis(node, m, M);\n\n const splitIndex = this.chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this.splitRoot(node, newNode);\n }\n\n splitRoot (node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n chooseSplitIndex (node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n chooseSplitAxis (node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this.allDistMargin(node, m, M, compareMinX);\n const yMargin = this.allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n allDistMargin (node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n adjustParentBoxes (bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n condense (path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n } else this.clear();\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n","const ReservedFields = {\n ROW_ID: '__id__',\n MEASURE_NAMES: '__measure_names__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onLayerDraw',\n MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export var slice = Array.prototype.slice;\n","import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\n\n/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\n\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (idFn) {\n return new Selection(idFn);\n}\n\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } from 'datamodel';\n\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport { dataSelect } from './DataSystem';\nimport * as scales from './scales';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING, ReservedFields } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain = [];\n domains = domains.filter(dom => dom && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = (arr, fn = d => d) => {\n const vals = arr.reduce((acc, v) => {\n acc[fn(v)] = v;\n return acc;\n }, {});\n return Object.values(vals);\n};\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data = []) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n *\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel\n .registerImmediateListener(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n/**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n/**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\n};\n\nconst RGBAtoRGB = (r, g, b, a, r2 = 255, g2 = 255, b2 = 255) => {\n const r3 = Math.round(((1 - a) * r2) + (a * r));\n const g3 = Math.round(((1 - a) * g2) + (a * g));\n const b3 = Math.round(((1 - a) * b2) + (a * b));\n return `rgb(${r3},${g3},${b3})`;\n};\n\nconst hslaToRgb = (h, s, l, a) => {\n const [r, g, b, a1] = hslToRgb(h, s, l, a);\n return RGBAtoRGB(r, g, b, a1);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\(([\\d.]+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\nfunction RGBAToHexA (rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n for (const R in rgba) {\n const r = rgba[R];\n if (r.indexOf('%') > -1) {\n const p = r.substr(0, r.length - 1) / 100;\n\n if (R < 3) {\n rgba[R] = Math.round(p * 255);\n } else {\n rgba[R] = p;\n }\n }\n }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = `0${r}`; }\n if (g.length === 1) { g = `0${g}`; }\n if (b.length === 1) { b = `0${b}`; }\n if (a.length === 1) { a = `0${a}`; }\n\n return `#${r}${g}${b}${a}`;\n}\n\nconst transformToHex = (datumStyle, colorType) => {\n if (colorType === 'rgb') {\n const [r, g, b, a] = datumStyle.replace(/[^\\d,]/g, '').split(',');\n const aa = a || 1;\n\n const rgbaString = `rgba(${r}, ${g}, ${b}, ${aa})`;\n return RGBAToHexA(rgbaString);\n }\n // Add methods to handle hsl and hex conversion\n return null;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n *\n */\nconst getDataModelFromRange = (dataModel, criteria, mode, criteriaFields) => {\n if (criteria === null) return null;\n const fieldsConfig = dataModel.getFieldsConfig();\n const selFields = criteriaFields || Object.keys(criteria).filter(d => d in fieldsConfig);\n const selFn = fields => selFields.every((field) => {\n const fieldValue = fields[field].internalValue;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n\n if (typeof range[0] === STRING) {\n return range.find(d => d === fieldValue) !== undefined;\n }\n\n if (range) {\n // Check if the selected bar value lies insid e the selection box\n return fieldValue >= range[0] && fieldValue <= range[1];\n }\n\n return false;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\nconst getArrayIndexMap = arr => arr.reduce((acc, value, i) => {\n acc[value] = i;\n return acc;\n}, {});\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n *\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode, hasBarLayer) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig || d === ReservedFields.ROW_ID);\n filteredDataModel = dataModel.select((fields, rowId) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = propField === ReservedFields.ROW_ID ? rowId : fields[propField].internalValue;\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n } else {\n filteredDataModel = dataModel.select(() => false, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode, hasBarLayer);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key]) {\n !commonTuples[dm1Key] && (commonTuples[dm1Key] = {});\n row1.forEach((value, idx) => {\n commonTuples[dm1Key][schema1[idx].name] = value;\n });\n }\n if (!commonTuples[dm2Key]) {\n !commonTuples[dm2Key] && (commonTuples[dm2Key] = {});\n row2.forEach((value, idx) => {\n commonTuples[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\n/**\n * Returns array difference, elements in array A, not in Array B\n * @param { Array. } arr Data which needs to be grouped\n * @param { Array. } arr1 Field indices by which the data will be grouped\n * @return { Array. } Returns the array difference (A - B)\n */\nconst getArrayDiff = (arr, arr1) => arr.filter(el => arr1.indexOf(el) < 0);\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nconst getValueParser = config => (val) => {\n if (InvalidAwareTypes.getInvalidType(val)) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\nconst sortingOrder = (a, b) => {\n const sortOrder = !(a instanceof InvalidAwareTypes || a instanceof InvalidAwareTypes)\n ? a.localeCompare(b)\n : 1;\n return sortOrder;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => sortingOrder(firstVal, secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => sortingOrder(secondVal, firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position|null if sort order is invalid\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n if (!sortOrderMap[sortOrder]) return null;\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nconst difference = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => !set.has(fn1(value)));\n};\n\nconst partition = (array, filterFn) => array.reduce((acc, v, i) => {\n const pass = filterFn(v, i, array);\n\n pass ? acc[0].push(v) : acc[1].push(v);\n return acc;\n}, [[], []]);\n\nconst mix = superclass => ({\n with: (...mixins) => mixins.reduce((cls, mixin) => mixin(cls), superclass)\n});\n\nconst componentRegistry = (comps) => {\n const reg = Object.assign({}, comps);\n const regObj = {\n register: (def, customKey) => {\n const key = customKey || def.formalName();\n\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n\n return regObj;\n};\n\nconst getReadableTicks = (domain, steps) => {\n // scaling the axis based on steps provided\n const orderedDomain = [Math.min(...domain), Math.max(...domain)];\n if (steps < 3) {\n return orderedDomain;\n }\n\n const tempScale = scales.scaleQuantize().domain(orderedDomain).nice();\n let tempAxis = null;\n let legendTicks = null;\n\n tempAxis = Symbols.axisBottom().scale(tempScale);\n\n legendTicks = tempAxis.scale().ticks(steps);\n\n if (Math.max(...legendTicks) < orderedDomain[1]) {\n // legendTicks.pop();\n legendTicks.push(orderedDomain[1]);\n }\n if (Math.min(...legendTicks) > orderedDomain[0]) {\n // legendTicks.shift();\n legendTicks.unshift(orderedDomain[0]);\n }\n return legendTicks;\n};\n\nconst RGBAToHSLA = (r, g, b, a = 1) => {\n // Make r, g, and b fractions of 1\n r /= 255;\n g /= 255;\n b /= 255;\n\n // Find greatest and smallest channel values\n const cmin = Math.min(r, g, b);\n const cmax = Math.max(r, g, b);\n const delta = cmax - cmin;\n let h = 0;\n let s = 0;\n let l = 0;\n\n // Calculate hue\n // No difference\n if (delta === 0) {\n h = 0;\n } else if (cmax === r) {\n // Red is max\n h = ((g - b) / delta) % 6;\n } else if (cmax === g) {\n // Green is max\n h = (b - r) / delta + 2;\n } else {\n // Blue is max\n h = (r - g) / delta + 4;\n }\n h = Math.round(h * 60);\n\n // Make negative hues positive behind 360°\n if (h < 0) { h += 360; }\n // Calculate lightness\n l = (cmax + cmin) / 2;\n // Calculate saturation\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n // Multiply l and s by 100\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n\n return {\n color: `hsla(${h},${s}%,${l}%,${a})`,\n code: [h, s, l, a]\n };\n};\n\nconst transformColor = (rgbaValues, { h = 0, s = 0, l = 0, a }, datum, apply) => {\n const [origH, origS, origL, origA] = RGBAToHSLA(...rgbaValues).code;\n const sanitizedA = parseFloat(a || origA, 10);\n const newH = origH + h;\n const newS = origS + s;\n const newL = origL + l;\n let newA = sanitizedA + 1;\n\n if (!apply) {\n newA = sanitizedA - 1;\n }\n\n const finalcolor = {\n color: `hsla(${newH},${newS}%,${newL}%,${newA})`,\n hsla: [newH, newS, newL, newA]\n };\n return finalcolor;\n};\n\nconst pointWithinCircle = (c, point) => {\n const { x: cx, y: cy, r } = c;\n const { x, y } = point;\n\n const dist = Math.sqrt((cx - x) ** 2 + (cy - y) ** 2);\n return dist <= r;\n};\n\n/**\n * Generates a function which performs an intersection (dataModel select)\n * operation for multiple fields\n * @param {Array} targetData - Nested array with field and values in the format:\n * [\n * [field1, field2]\n * [val1, val2]\n * ]\n * @param {Object} dm - The dataModel instance\n * @return {Function} filter function\n */\nconst dmMultipleSelection = (targetData, dm) => {\n const targetFields = targetData[0];\n const targetVals = targetData.slice(1, targetData.length);\n const payloadMap = targetVals.reduce((acc, v) => {\n acc[v] = v;\n return acc;\n }, {});\n const measures = Object.keys(dm.getFieldspace().getMeasure());\n\n const filterFn = (fields, i) => {\n const row = `${targetFields.map((field) => {\n let val;\n if (field === ReservedFields.MEASURE_NAMES) {\n val = measures;\n } else if (field === ReservedFields.ROW_ID) {\n val = i;\n } else {\n const currentField = fields[field];\n const isFieldInvalid = currentField instanceof InvalidAwareTypes;\n\n val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue;\n }\n return val;\n })}`;\n return row in payloadMap;\n };\n return filterFn;\n};\n\nexport {\n arraysEqual,\n componentRegistry,\n mix,\n partition,\n getArrayIndexMap,\n getValueParser,\n require,\n intersect,\n difference,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getArrayDiff,\n getSymbol,\n transformColor,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n transformToHex,\n hsvToRgb,\n hslaToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n unique,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff,\n getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n getReadableTicks,\n dmMultipleSelection,\n pointWithinCircle\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n const sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","import Model from 'hyperdis';\nimport { defaultValue, getObjProp, toArray } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\n }\n};\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nexport class Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (...params) {\n registerListener(this, 'on', ...params);\n }\n\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\n}\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitization: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n const paramsLen = params.length;\n if (paramsLen) {\n const { takesMultipleParams = false } = meta || {};\n // If parameters are passed then it's a setter\n let val = takesMultipleParams ? params : params[0];\n\n if (meta) {\n let values;\n const prevVal = context.get(nsProp, subNamespace);\n const { sanitization, typeCheck, typeExpected } = meta;\n if (typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n const typeCheckResult = typeCheck(val);\n\n if (typeCheckResult) {\n values = val;\n }\n } else if (typeof typeCheck === 'string' && typeCheck === 'constructor') {\n if (val && val.constructor.name === typeExpected) {\n values = val;\n }\n } else {\n values = val;\n }\n\n const preset = meta.preset;\n const oldValues = toArray(context.get(nsProp, subNamespace));\n preset && preset(values, holder);\n if (takesMultipleParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values && context.commit(nsProp, values, subNamespace);\n } else {\n context.commit(nsProp, val, subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, Array.isArray(conf.value));\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = resolver(resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\nimport RTree from './r-tree';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColor,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n hslaToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect,\n partition,\n mix,\n componentRegistry,\n getArrayDiff,\n difference,\n getArrayIndexMap,\n arraysEqual,\n getReadableTicks,\n unique,\n dmMultipleSelection,\n pointWithinCircle\n} from './common-utils';\n\nexport {\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint,\n hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\nexport {\n RTree\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const TEXT = 'text';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0',\n RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0',\n COLOR: 'color',\n SHAPE: 'shape',\n SIZE: 'size',\n TEXT: 'text'\n};\n\nexport const STROKE_DASHARRAY = 'stroke-dasharray';\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\n","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n },\n encodingTransform: {},\n encodingFieldsInf: {},\n dependencies: {},\n dataProps: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n *\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n *\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n adjustRange: false,\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 7,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0,\n defaultSort: 'asc'\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n // selectElement(this).transition()\n // .duration(1000).text(datum);\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const renderConfig = axisInstance.renderConfig();\n const config = axisInstance.config();\n\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\n const mount = axisInstance.mount();\n\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n\n let availableSpace;\n let labelProps;\n let tickSize;\n if (axisInstance.domain().length > 0) {\n const labelManager = axisInstance.dependencies().labelManager;\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n\n const {\n _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n\n tickSize = axisInstance.getTickSize();\n\n // Set style for tick labels\n labelManager.setStyle(tickLabelStyle);\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\n\n // Get range(length of range)\n availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n labelProps = axisInstance.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n setFixedBaseline(axisInstance);\n if (!labels.rotation && labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .call(axis);\n } else {\n selectContainer.call(axis);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n }\n\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n }\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = Math.min(minTickSpace.width, tickDimWidth);\n const minTickHeight = Math.min(minTickSpace.height, tickDimHeight);\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n\n if (heightForTicks < minTickWidth) {\n context.renderConfig({ showAxisName: false });\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimHeight / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\n\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n\n context.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return {\n allTickDimensions,\n tickSize: 0,\n tickDimensions: { height: 0, width: 0 },\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n height = ((max - min) / Math.abs(minTickDiff)) * tickDimHeight;\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + (tickValues ? axisNamePadding : 0);\n\n return {\n height,\n width\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._axisDimensions = {};\n this._smartTicks = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n resetDomain () {\n this._domain = [];\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (value) {\n return this.scale().invert(value);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n\n /**\n * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n _getRawTickValue (data) {\n return data;\n }\n\n getTicksBasedOnData (tickData) {\n const allTicks = selectElement(this.mount()).selectAll('.tick');\n let elementToBeModified = null;\n let elementNotToBeModified = null;\n if (tickData) {\n elementToBeModified = allTicks.filter(tickValue => tickData === this._getRawTickValue(tickValue));\n elementNotToBeModified = allTicks.filter(tickValue => !(tickData === this._getRawTickValue(tickValue)));\n }\n return {\n selectionSet: elementToBeModified,\n rejectionSet: elementNotToBeModified || allTicks\n };\n }\n}\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return tickValues;\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.renderConfig().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation\n } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n *\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\n }\n _getRawTickValue (data) {\n return (new Date(data)).getTime();\n }\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#1f77b4',\n '#ff7f0e',\n '#2ca02c',\n '#d62728',\n '#9467bd',\n '#8c564b',\n '#e377c2',\n '#7f7f7f',\n '#bcbd22',\n '#17becf'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv, defaultValue } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR, DEFAULT_CONFIG } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, defaultValue(Number(color[3]), 1)];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops ?\n config.stops :\n config.range && config.range.length > 2 ?\n config.range.length :\n DEFAULT_CONFIG.stops;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n\nexport const sanitiseConfigIntervals = (intervals) => {\n if (intervals) {\n return intervals;\n }\n return 5;\n};\n","import { piecewiseInterpolator,\n hslInterpolator,\n sanitizeDomainWhenEqual, getReadableTicks } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n newStops = getReadableTicks(domain, stops);\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n*\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n *\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(sanitizeDomainWhenEqual(domain), range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType) =>\n strategies()[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv, defaultValue } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString, getActualHslColor } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n if (color) {\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = Math.min(defaultValue(color[3], 0), 1);\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = Math.min(a + transformationArr[3] || 0, 1);\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n getHslArray (color) {\n return getActualHslColor(color);\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 51,\n range: [51, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator, getReadableTicks } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n // const interpolator = numberInterpolator()(...domain);\n // for (let i = 0; i < intervals; i++) {\n // newIntervals[i] = interpolator(i / (intervals - 1));\n // }\n newIntervals = getReadableTicks(domain, intervals);\n }\n // if (newIntervals[0] < domain[0]) {\n // newIntervals.shift();\n // }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => {\n context._userRange = value.range;\n return mergeRecursive(context._config || {}, value);\n }\n },\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\nimport { sanitiseConfigIntervals } from '../helper';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this.config(this.constructor.defaultConfig());\n this.config(config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n\n this._config.range = this._userRange ? this._userRange : this._config.range;\n\n this._config.stops = sanitiseConfigIntervals(this._config.stops);\n this._rangeType = this._config.type === 'linear' && !!this._config.stops ? DISCRETE : CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().stops);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive, InvalidAwareTypes } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n *\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\n}\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing data\n */\nexport const DATA = 'data';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n\nexport const ANGLE0 = 'angle0';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\nexport const DEFAULT = 'default';\n/**\n * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\n\nexport const DARK = 'dark';\nexport const NONE = 'none';\nexport const NORMAL = 'normal';\nexport const DARKER = 'darker';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack, InvalidAwareTypes } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n if (row[valueFieldIndex] instanceof InvalidAwareTypes) {\n row[valueFieldIndex] = null;\n }\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const { uniqueField, value: valueField, groupBy } = config;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype,\n retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps,\n defaultValue,\n InvalidAwareTypes,\n isSimpleObject\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nexport const transformColor = (colorAxis, datum, styleType, intensity, interactionType) => {\n const meta = datum.meta;\n const stateColor = defaultValue(meta.currentState[interactionType][styleType], meta.originalState[styleType]);\n const colorInfo = colorAxis.transformColor(stateColor, intensity);\n\n // meta.stateColor[styleType] = colorInfo.hsla;\n meta.currentState[interactionType][styleType] = colorInfo.hsla;\n return colorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const { apply, interactionType, reset } = config;\n const mountPoint = selectElement(context.mount()).select('.muze-overlay-paths').node();\n\n elements.forEach((elem) => {\n const options = { mountPoint, apply, reset };\n context.applyLayerStyle(elem, interactionType, interactionStyles, options);\n\n // const interactionStylesEntries = Object.entries(interactionStyles.style);\n\n // for (const [type, value] of interactionStylesEntries) {\n // const style = { type, value };\n // const options = { mountPoint, apply, reset };\n // context.applyLayerStyle(elem, interactionType, style, options);\n // }\n });\n};\n\nexport const retrieveEncodingInf = (encoding, fieldsConfig, encodingNames) => {\n const encodingInf = {};\n\n encodingNames\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n return encodingInf;\n};\n\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const fields = [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT];\n return retrieveEncodingInf(encoding, fieldsConfig, fields);\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const fields = [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT];\n return retrieveEncodingInf(encoding, fieldsConfig, fields);\n }\n};\n\nexport const setNullsInStack = (transformedData, schema, value, setNulls) => {\n const uniqueFieldIndex = schema.findIndex(d => d.name === value);\n transformedData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n if (dataObj.data[uniqueFieldIndex] === null && !setNulls) {\n dataObj[0] = null;\n dataObj[1] = null;\n }\n });\n });\n return transformedData;\n};\nexport const setNulls = (transformedData, val) => transformedData.map((seriesData) => {\n if (val && (seriesData[val.index] instanceof InvalidAwareTypes)) {\n seriesData[val.index] = null;\n }\n return seriesData;\n});\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const { transform, connectNullData: setNullData } = config;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n const value = yFieldType === FieldType.MEASURE ? yField : xField;\n let transformedData = transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value\n }, data.uids);\n\n if (transformType === STACK) {\n transformedData = setNullsInStack(transformedData, schema, value, setNullData);\n } else {\n transformedData = setNulls(transformedData, dataModel.getFieldsConfig()[value]);\n }\n return transformedData;\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\nexport const dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsArr = Object.keys(fieldsConfig);\n const fieldsLen = fieldsArr.length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n const source = pointObj.source;\n pointObj.dataObj = fieldsArr.reduce((acc, name) => {\n acc[name] = source[fieldsConfig[name].index];\n return acc;\n }, {});\n return pointObj;\n });\n }).filter(d => d.length);\n }\n};\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n }\n};\n\nconst defFn = (d) => {\n const { x, y } = d.update;\n return {\n x,\n y\n };\n};\n\nexport const attachDataToVoronoi = (voronoi, points, accessor = defFn) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== undefined).map((d) => {\n const { x, y } = accessor(d);\n return {\n x,\n y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n const { xField, yField, xFieldType, yFieldType } = encodingFieldInf;\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n\n return [\n !xField,\n !yField,\n !groupByField,\n getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE,\n xFieldType === FieldType.DIMENSION && yFieldType === FieldType.DIMENSION,\n dimensionField && encodingFieldInf[dimensionField] === groupByField\n ];\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates(encodingFieldInf, context, groupByField).some(value => value)) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (initialStyle, conf = {}) => ({\n originalStyle: Object.assign({}, {\n styles: initialStyle\n }, conf),\n currentState: new Map()\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n\nexport const getBoundBoxes = points => points.map((point) => {\n const { x, y } = point.update;\n const data = point.data;\n return {\n minX: x,\n maxX: x,\n minY: y,\n maxY: y,\n data\n };\n});\n\nexport const getDataFromEvent = (context, event) => {\n const dataPoint = selectElement(event.target).data()[0];\n if (isSimpleObject(dataPoint) && getObjProp(dataPoint, 'meta', 'layerId') === context.id()) {\n const values = dataPoint && dataPoint.source;\n let identifiers = null;\n if (values) {\n identifiers = context.getIdentifiersFromData(values, dataPoint.rowId);\n }\n return {\n dimensions: [dataPoint],\n id: identifiers,\n layerId: context.id()\n };\n }\n return null;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [prevData, data]) => {\n context.dataDidSet([prevData, data]);\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import { partition } from 'muze-utils';\n\nconst getLastItemInMap = map => Array.from(map)[map.size - 1];\n\nconst getPreviousStyle = (meta, interactionType) => {\n const { originalStyle, currentState } = meta;\n let stylesForCurrentLevel = Object.assign({}, originalStyle);\n\n if (currentState.size > 0) {\n interactionType = getLastItemInMap(currentState)[0];\n stylesForCurrentLevel = currentState.get(interactionType) || {};\n // const elemFill = elem.style('fill');\n // const newStyle = Object.assign({}, stylesForCurrentLevel, { fill: elemFill });\n }\n return stylesForCurrentLevel;\n};\n\nconst strokeProps = {\n 'stroke-width': 1,\n stroke: 1,\n 'stroke-opacity': 1\n};\n\nconst parseStyle = (value, { datum, datumStyle }, apply) => {\n if (typeof value === 'function') {\n if (isNaN(datumStyle)) {\n // const colorType = detectColor(datumStyle);\n const rgbaValues = datumStyle.replace(/[^\\d,.]/g, '').split(',').map(s => Number(s));\n value = value(rgbaValues, datum, apply);\n } else {\n const numValue = parseFloat(datumStyle, 10);\n value = value(numValue, datum, apply);\n }\n return value;\n }\n return value;\n};\n\nexport const applyStylesOnInteraction = (context, elem, interactionType, conf, options) => {\n const { mountPoint, apply, reset } = options;\n\n const d = elem.data()[0];\n let datum;\n\n if (Array.isArray(d)) {\n datum = d[0];\n } else {\n datum = Array.isArray(d.data) ? d.data[0] : d;\n }\n const { currentState, originalStyle } = datum.meta;\n\n let applicableStyles = {};\n\n const { style: styles, strokePosition } = conf;\n let applicableStrokePos = strokePosition;\n\n if (reset) {\n currentState.clear();\n }\n\n let applyStyle = true;\n\n if (apply) {\n const sanitizedStyles = {\n styles: {},\n strokePosition\n };\n for (const type in styles) {\n const parsedStyleVal = parseStyle(styles[type], {\n datum,\n datumStyle: elem.style(type)\n }, apply);\n\n sanitizedStyles.styles[type] = parsedStyleVal;\n }\n currentState.set(interactionType, sanitizedStyles);\n applicableStyles = sanitizedStyles.styles;\n } else if (!currentState.has(interactionType) && !reset) {\n applyStyle = false;\n } else {\n currentState.delete(interactionType);\n const currentStyle = getPreviousStyle(datum.meta, interactionType);\n applicableStyles = Object.assign({}, originalStyle.styles, currentStyle.styles);\n applicableStrokePos = currentStyle.strokePosition || originalStyle.strokePosition;\n }\n\n const styleKeys = Object.keys(applicableStyles);\n const [strokeStyles, otherStyles] = partition(styleKeys, v => v in strokeProps);\n\n applyStyle && context.applyStyles({\n strokeStyles,\n otherStyles,\n styleObj: applicableStyles,\n elem,\n datum,\n applicableStrokePos,\n mountPoint\n });\n};\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n transactor,\n defaultValue,\n getObjProp,\n InvalidAwareTypes\n} from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer,\n encodingFieldInfRetriever\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\nimport { BASE_LAYER, AREA_LAYER } from '../enums/constants';\nimport { applyStylesOnInteraction } from './helper';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\nexport const BaseLayerMixin = superclass => class extends superclass {\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a\n * layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.size Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor () {\n super();\n\n generateGetterSetters(this, this.constructor.getterSetters());\n this.axes({});\n this.alias(this.constructor.formalName() + getUniqueId());\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(this.localOptions()).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: this.getRenderProps(),\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = this.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BASE_LAYER, this);\n\n transactor(this, this.constructor.localOptions(), store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n static getterSetters () {\n return props;\n }\n\n static localOptions () {\n return localOptions;\n }\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among\n * multiple layers of same type if one layer has to be referred, alias is used. If no alias is given then\n * `formalName` is set as the alias name.\n *\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a categorical field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n getUidsFromPayload ({ model, uids }, targetData) {\n const targetFields = targetData[0];\n const targetVals = targetData.slice(1, targetData.length);\n const payloadMap = targetVals.reduce((acc, v) => {\n acc[v] = v;\n return acc;\n }, {});\n const measures = Object.keys(this.data().getFieldspace().getMeasure());\n\n const filterFn = (fields, i) => {\n const row = `${targetFields.map((field) => {\n let val;\n if (field === ReservedFields.MEASURE_NAMES) {\n val = measures;\n } else if (field === ReservedFields.ROW_ID) {\n val = i;\n } else {\n const currentField = fields[field];\n const isFieldInvalid = currentField instanceof InvalidAwareTypes;\n\n val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue;\n }\n return val;\n })}`;\n return row in payloadMap;\n };\n\n const dm = model.select(filterFn, {});\n\n // Need to find a better way to do this instead of iterating the full data\n const currentSetIds = this.data().select(filterFn, {\n saveChild: false\n }).getUids();\n\n const uidMap = currentSetIds.reduce((acc, v) => {\n acc[v] = true;\n return acc;\n }, {});\n\n return {\n model: dm,\n uids: uids.filter(d => uidMap[d[0]]),\n length: currentSetIds.length\n };\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the\n * data // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, options) {\n const interactionConfig = this.config().interaction || {};\n const { apply, styles, reset } = options;\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType,\n reset\n });\n }\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BASE_LAYER);\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n getInteractionStyles () {\n return applyStylesOnInteraction;\n }\n\n addOverlayPath () {\n return null;\n }\n\n removeOverlayPath () {\n return null;\n }\n\n applyLayerStyle (elem, interactionType, style, options) {\n const interactionFn = this.getInteractionStyles();\n return interactionFn(this, elem, interactionType, style, options);\n }\n\n getIdentifiersFromData (data, rowId) {\n const schema = this.data().getSchema();\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n\n const allMeasures = schema.every(field => field.type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n const { type } = fieldsConfig[name].def;\n if (type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n const measures = schema.filter(d => d.type === FieldType.MEASURE).map(d => d.name);\n if (measures.length) {\n identifiers[0].push(ReservedFields.MEASURE_NAMES);\n identifiers[1].push(measures.join());\n }\n\n if (allMeasures) {\n identifiers[0].push(...[ReservedFields.ROW_ID]);\n identifiers[1].push(...[rowId]);\n }\n\n return identifiers;\n }\n\n hasPlotSpan () {\n return false;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n * Returns the information of the marks corresponding to the supplied identifiers.\n * Identifiers are a set of field names and their corresponding values in an array.\n * It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { source, rowId } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers, idx = 0) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this._normalizedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n const layerName = this.constructor.formalName();\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n if (layerName === AREA_LAYER) {\n enc = (idx % 2 === 0) ? 'y' : 'y0';\n }\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj.source;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc] || 0;\n const row = dataObj.source;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids,\n * it returns all the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n /**\n * Called when the layer datamodel is set.\n *\n * @param {Array} arr Old and new datamodel instance.\n * @param {DataModel} arr[0] Previous datamodel instance.\n * @param {DataModel} arr[1] Current datamodel instance.\n *\n * @return {BaseLayer} Instance of layer.\n */\n dataDidSet ([, data]) {\n const config = this.config();\n\n if (data && config) {\n if (this._cacheEnabled) {\n this._cachedData.push(data);\n } else {\n this._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = this.retrieveEncodingFields(encodingValue, this.coord(), data);\n this.encodingFieldsInf(encodingFieldsInf);\n this.resolveTransformType();\n this._transformedData = this.getTransformedData(data, config,\n this.transformType(), encodingFieldsInf);\n this._normalizedData = this.getNormalizedData(this._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = this.calculateDomainFromData(this._normalizedData,\n this.encodingFieldsInf(), this.data().getFieldsConfig());\n this.domain(domain);\n }\n }\n }\n return this;\n }\n\n retrieveEncodingFields (encoding, coord, data) {\n const fieldsConfig = data.getFieldsConfig();\n\n return encodingFieldInfRetriever[coord](encoding, fieldsConfig);\n }\n\n static getRenderProps () {\n return [`${layerNs[1]}.${PROPS.DATA}`, ...['x', 'y', 'radius'].map(type =>\n `${groupNs}.domain.${type}`)];\n }\n\n applyStyles ({ strokeStyles, otherStyles, styleObj, elem, mountPoint, applicableStrokePos, datum }) {\n strokeStyles.forEach((type) => {\n this.addOverlayPath(\n elem.node(),\n datum,\n { type, value: styleObj[type] },\n applicableStrokePos,\n mountPoint\n );\n });\n\n this.applyElementStyles(elem, otherStyles, styleObj);\n }\n\n applyElementStyles (elem, styles, styleObj) {\n styles.forEach((type) => {\n elem.style(type, styleObj[type]);\n });\n }\n\n getBoundBoxes () {\n return null;\n }\n};\n","import {\n mix\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport { BaseLayerMixin } from './base-mixin';\nimport { BASE_LAYER } from '../enums/constants';\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @module BaseLayer\n */\nexport default class BaseLayer extends mix(SimpleLayer).with(BaseLayerMixin) {\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return BASE_LAYER;\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols,\n setStyles\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\n\nconst containsNull = (elem) => {\n const { x, y } = elem ? elem.update : {};\n if (x === null || y === null) {\n return true;\n }\n return false;\n};\n\nconst settIndexPrevOrNext = (arr, index, indexesObj) => {\n const prevContainsNull = containsNull(arr[index - 1], index - 1);\n const nextContainsNull = containsNull(arr[index + 1], index + 1);\n\n !prevContainsNull && indexesObj.prevOfNull.push(index - 1);\n !nextContainsNull && indexesObj.nextOfNull.push(index + 1);\n};\n\nconst getborderIndexes = (arr) => {\n const indexes = {\n prevOfNull: [],\n nextOfNull: []\n };\n arr.forEach((value, index) => {\n const { update } = value;\n if (update.y === null || update.x === null) {\n settIndexPrevOrNext(arr, index, indexes);\n }\n });\n return indexes;\n};\n\nconst makeStartEndPair = (arr, borderIndexes) => {\n const pairArray = [];\n const { prevOfNull, nextOfNull } = borderIndexes;\n const length = prevOfNull.length;\n if (!length) {\n return pairArray;\n }\n\n for (let i = 0; i < length; i++) {\n const pair = [];\n const prevValue = arr[prevOfNull[i]];\n const nextValue = arr[nextOfNull[i]];\n if (prevValue) {\n pair.push(prevValue);\n }\n if (nextValue) {\n pair.push(nextValue);\n }\n pairArray.push(pair);\n }\n return pairArray;\n};\n\nconst sanitizeNullConfig = (arr) => {\n const borderIndexes = getborderIndexes(arr);\n return makeStartEndPair(arr, borderIndexes);\n};\n\nconst getElementsForLine = (params) => {\n const { mount, data, className, layer, strokeStyle, linepath, transition, updateFns } = params;\n let element = makeElement(mount, 'path', data.length ? [data] : [], className, updateFns);\n element.attr('class', (d, i) => d[i].className);\n setStyles(element, strokeStyle);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n element.attr('d', linepath(data))\n .style('fill-opacity', 0);\n return element;\n};\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n const { layer, container, points, interpolate, connectNullData, className, style, transition } = context;\n const containerSelection = selectElement(container);\n const strokeStyle = layer.config().nullDataLineStyle;\n const nullDataLineClass = layer.config().nullDataLineClass;\n const mount = containerSelection.attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(filterFn);\n\n const graphicElems = layer._graphicElems;\n const updateFns = {\n update: (group, d) => {\n d.forEach((dd) => {\n graphicElems[dd.rowId] = containerSelection;\n });\n }\n };\n\n updateStyle(mount, style);\n\n const elementWithNullData = getElementsForLine({\n mount,\n data: points,\n strokeStyle: undefined,\n layer,\n linepath,\n transition,\n updateFns\n });\n const sanitizedPoints = sanitizeNullConfig(points);\n\n sanitizedPoints.map((d) => {\n if (connectNullData && d.length > 1) {\n getElementsForLine({\n mount,\n data: d,\n strokeStyle,\n className: `.${className}-${nullDataLineClass}`,\n layer,\n linepath,\n transition,\n updateFns\n });\n }\n return null;\n });\n return elementWithNullData;\n};\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n fade: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n focus: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n brushStroke: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n crossline: true,\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n },\n fillOpacity: {\n value: 0\n },\n strokeWidth: {\n value: '2px'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false,\n nullDataLineStyle: {},\n nullDataLineClass: 'null'\n};\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n InvalidAwareTypes,\n getObjProp\n} from 'muze-utils';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData,\n getBoundBoxes\n} from '../../helpers';\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport const LineLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of LineLayer.\n *\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n static formalName () {\n return 'line';\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = super.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n static shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const axes = this.axes();\n const encoding = this.config().encoding;\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const style = {\n stroke: resolvedEncodings.color,\n 'fill-opacity': encoding.fillOpacity.value,\n 'stroke-width': encoding.strokeWidth.value\n };\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style,\n rowId: d.rowId,\n source: d.source,\n data: d.dataObj,\n meta: getColorMetaInf(style)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n getTranslatedData (normalizedData, colorValFn, colorFieldIndex, axes) {\n return normalizedData.map((data, i) => {\n let color;\n const colorVal = data.find(d => d.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(data, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n return {\n data: this.translatePoints(data),\n style: this.getPathStyle(color)\n };\n });\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n\n const colorValFn = encoding.color.value;\n const translatedPoints = this.getTranslatedData(normalizedData, colorValFn, colorFieldIndex, axes);\n\n makeElement(container, 'g', translatedPoints, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n const points = dataArr.data;\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n const style = dataArr.style;\n\n this._points.push(points);\n this.getDrawFn()({\n layer: this,\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d.data[0].source[colorFieldIndex] || d.data[0].rowId);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n\n applyStyles ({ strokeStyles, otherStyles, styleObj, elem }) {\n [...otherStyles, ...strokeStyles].forEach((type) => {\n elem.style(type, styleObj[type]);\n });\n }\n\n getBoundBoxes () {\n return getBoundBoxes(this._points.flat());\n }\n};\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n fade: {\n style: {\n 'fill-opacity': 0.7\n }\n },\n focus: {\n style: {\n 'fill-opacity': 0.7\n }\n },\n brushStroke: {\n style: {\n 'fill-opacity': 0.7\n }\n }\n },\n crossline: true,\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n },\n fillOpacity: {\n value: 0.3\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n const { layer, container, points, style, transition, className, interpolate, connectNullData } = params;\n\n const graphicElems = layer._graphicElems;\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data(points.length ? [points] : []);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== undefined));\n\n mount.attr('class', className);\n\n let filteredPoints = points;\n if (connectNullData) {\n filteredPoints = filteredPoints.filter(d => d.update.y !== undefined);\n }\n const selectionEnter = selection\n .enter()\n .append('path')\n .attr('d', enterAreaPath(filteredPoints))\n .each((d) => {\n d.forEach((dd) => {\n if (dd.rowId) {\n graphicElems[dd.rowId] = mount.select('path');\n }\n });\n });\n\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function () {\n const element = selectElement(this);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport {\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport const AreaLayerMixin = superclass => class extends superclass {\n\n /** Default configuration of area layer\n *\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n let point = this._voronoi.find(x, y, searchRadius);\n let index;\n let nearestPoint = null;\n\n if (!point && config.dimValue && this._pointMap) {\n const pointArr = this._pointMap[config.dimValue[1][0]] || [];\n\n for (let i = 0, len = pointArr.length; i < len; i++) {\n const { y: pointY, y0: pointY0 } = pointArr[i].update;\n if (pointY < y && y < pointY0) {\n index = i;\n nearestPoint = pointArr[i];\n break;\n }\n }\n\n // Index is a number(0 or more)\n if (index !== undefined) {\n point = {\n index,\n data: {\n x,\n y,\n data: nearestPoint\n }\n };\n }\n }\n\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y0: dimensions.y0,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.encodingFieldsInf();\n const { x: xAxis, y: yAxis } = axes;\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const style = {\n fill: color,\n 'fill-opacity': encoding.fillOpacity.value\n };\n\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n data: d.dataObj,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta: getColorMetaInf(style)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color,\n 'fill-opacity': 0.30\n };\n }\n};\n","import { mix } from 'muze-utils';\nimport { AREA_LAYER } from '../../enums/constants';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { LineLayerMixin } from '../line/line-mixin';\nimport { AreaLayerMixin } from './area-mixin';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport default class AreaLayer extends mix(BaseLayer).with(BaseLayerMixin, LineLayerMixin, AreaLayerMixin) {\n static formalName () {\n return AREA_LAYER;\n }\n}\n\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n interaction: {\n highlight: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.1\n }, data, apply).color\n }\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n height: 100,\n width: 100,\n sort: '',\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\nexport const ArcLayerMixin = superclass => class extends superclass {\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\n }\n\n getNearestPoint (x, y, config = {}) {\n return this.getDataFromEvent(config.event);\n }\n\n getDataFromEvent (event) {\n const dataPoint = selectElement(event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf({\n fill: color\n }),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\n\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n};\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayerMixin, BaseLayer } from '../../base-layer';\nimport { ArcLayerMixin } from './arc-mixin';\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\n */\nexport default class ArcLayer extends mix(BaseLayer).with(BaseLayerMixin, ArcLayerMixin) {\n static formalName () {\n return 'arc';\n }\n}\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { LineLayerMixin } from './line-mixin';\nimport { LINE_LAYER } from '../../enums/constants';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport default class LineLayer extends mix(BaseLayer).with(BaseLayerMixin, LineLayerMixin) {\n static formalName () {\n return LINE_LAYER;\n }\n}\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n graphicElems[dataObj.rowId] = element;\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: -15\n }, data, apply).color\n }\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n }\n },\n crossline: false,\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport {\n positionPoints,\n getIndividualClassName,\n resolveEncodingValues,\n getColorMetaInf,\n toCartesianCoordinates,\n getDataFromEvent\n} from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: { ...{ layerId: layerInst.id() },\n ...getColorMetaInf({\n fill: resolvedVal.color\n }) },\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d.source;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const color = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: { ...{ layerId: layerInst.id() },\n ...getColorMetaInf({\n fill: resolvedEncodings.color\n }) },\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport const TextLayerMixin = superclass => class extends superclass {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n getPointTranslator (val) {\n return pointTranslators[val];\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\n }\n });\n return this;\n }\n\n getNearestPoint (x, y, { event }) {\n if (!this.data()) {\n return null;\n }\n return this.getDataFromEvent(event);\n }\n\n getDataFromEvent (event) {\n return getDataFromEvent(this, event);\n }\n};\n\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { TextLayerMixin } from './text-mixin';\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport default class TextLayer extends mix(BaseLayer).with(BaseLayerMixin, TextLayerMixin) {\n static formalName () {\n return 'text';\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol,\n setStyles\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, groupElement) {\n const { shape, size, update, style } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n makeElement(groupElement, () => newShape, [1]);\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n const pathEl = makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n setStyles(pathEl, style);\n } else {\n d.shape = 'circle';\n createShape(d, groupElement);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\n};\n\nexport default drawSymbols;\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: {\n className: 'highlight-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n // fill: 'red'\n },\n strokePosition: 'center'\n },\n focusStroke: {\n className: 'focus-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n commonDoubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n brushStroke: {\n className: 'brush-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n // fill: 'blue'\n },\n strokePosition: 'outside'\n },\n doubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n innerPadding: 0.1,\n nearestPointThreshold: 5,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: {},\n stroke: {\n value: '#000'\n },\n 'stroke-width': {\n value: 0\n },\n fill: {},\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n 'stroke-opacity': {\n value: 1\n },\n 'fill-opacity': {\n value: 0.5\n },\n strokePosition: {\n value: 'center'\n },\n interaction: {\n anchors: 'highlight',\n 'persistent-anchors': 'focusStroke',\n 'brush-anchors': 'brushStroke'\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import { FieldType, COORD_TYPES } from 'muze-utils';\nimport { ENCODING } from '../../enums/constants';\nimport {\n getIndividualClassName,\n resolveEncodingValues,\n getColorMetaInf,\n positionPoints\n} from '../../helpers';\n\nexport const prepareDrawingInf = ({ data, datum, i, layerInst, xPx, yPx }) => {\n const axes = layerInst.axes();\n const { shape: shapeAxis, color: colorAxis, size: sizeAxis } = axes;\n let shape = shapeAxis.getShape(datum.shape);\n let size = sizeAxis.getSize(datum.size);\n let color = colorAxis.getColor(datum.color);\n const layerEncoding = layerInst.config().encoding;\n const stroke = layerEncoding.stroke.value;\n const strokeWidth = layerEncoding['stroke-width'].value;\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n stroke,\n 'stroke-width': strokeWidth,\n size,\n shape,\n data: datum\n },\n data: datum\n }, i, data, layerInst);\n const { rowId, source } = datum;\n ({ shape, size, color } = resolvedEncodings);\n const style = {\n fill: color,\n stroke: resolvedEncodings.stroke,\n 'stroke-width': resolvedEncodings['stroke-width']\n };\n const { x, y } = resolvedEncodings;\n const pos = { x, y };\n return {\n enter: pos,\n update: pos,\n shape,\n source,\n rowId,\n style,\n data: datum.dataObj,\n meta: Object.assign({\n layerId: layerInst.id()\n }, getColorMetaInf(style, {\n strokePosition: layerEncoding.strokePosition.value\n })),\n size\n };\n};\n\nexport const pointTranslators = {\n [COORD_TYPES.CARTESIAN]: (data, config, layerInst) => {\n let points = [];\n const encoding = layerInst.config().encoding;\n const axes = layerInst.axes();\n const { x, y } = encoding;\n const xField = x.field;\n const yField = y.field;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = prepareDrawingInf({\n data,\n datum: d,\n i,\n layerInst,\n xPx,\n yPx\n });\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\nexport const getStrokeWidthByPosition = (position, radius) => {\n const strokeWidthWithOffsetMap = {\n center: -radius,\n inside: -(radius * Math.PI),\n outside: +(radius * Math.PI)\n };\n return strokeWidthWithOffsetMap[position];\n};\n","import {\n Voronoi,\n Scales,\n makeElement,\n getQualifiedClassName,\n selectElement,\n appendElement,\n getSymbol,\n pointWithinCircle\n} from 'muze-utils';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport {\n attachDataToVoronoi,\n getPlotMeasurement,\n getMarkId,\n getBoundBoxes\n} from '../../helpers';\nimport './styles.scss';\nimport { pointTranslators, getStrokeWidthByPosition } from './helper';\n\nexport const PointLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n this._overlayPath = {};\n this.formattedUids = [];\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = super.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n this._graphicElems = {};\n\n const schema = this.data().getSchema();\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size || 0));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n this.attachDataToVoronoi(this._points);\n return this;\n }\n\n attachDataToVoronoi (points) {\n attachDataToVoronoi(this._voronoi, points);\n }\n\n generateDataPoints (normalizedData, keys) {\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const nearestPointThreshold = this.config().nearestPointThreshold;\n const distanceLimit = Math.max(this._maxSize, nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const insideShape = pointWithinCircle({\n x: dimensions.x,\n y: dimensions.y,\n r: radius + nearestPointThreshold\n }, { x, y });\n if (insideShape) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n }\n return null;\n }\n\n addOverlayPath (refElement, data, style, strokePosition) {\n const container = refElement.parentElement;\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n pathElement = makeElement(container, 'path', [data.update], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n if (style.type === 'stroke-width') {\n const position = strokePosition;\n // get radius as per stroke position\n let radius = Math.sqrt(data.size / Math.PI);\n radius = getStrokeWidthByPosition(position, radius);\n\n const size = data.size + radius;\n if (typeof data.shape === 'string') {\n const path = getSymbol(data.shape).size(size);\n pathElement.attr('d', path);\n }\n }\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(refElement, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n }\n }\n\n getBoundBoxes () {\n return getBoundBoxes(this._points.flat());\n }\n\n applyElementStyles (elem, styles, styleObj) {\n styles.forEach((type) => {\n elem.select('path').style(type, styleObj[type]);\n });\n }\n};\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { POINT_LAYER } from '../../enums/constants';\nimport { PointLayerMixin } from './point-mixin';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\n */\nexport default class PointLayer extends mix(BaseLayer).with(PointLayerMixin) {\n static formalName () {\n return POINT_LAYER;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { layer, points, container, keyFn, className } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) {\n barEnterFn(elem, d);\n },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\n };\n\n return makeElement(container, 'g', points, null, {\n update: (group, d) => {\n makeElement(group.node(), 'rect', data => [data], null, updateFns, keyFn);\n group.attr('class', `${className}-${d.rowId}`);\n group.classed(d.className, true);\n }\n }, keyFn);\n};\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: {\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'center'\n },\n focusStroke: {\n className: 'focus-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n brushStroke: {\n className: 'brush-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n doubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n commonDoubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.3\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {},\n stroke: {\n value: '#000'\n },\n strokeWidth: {\n value: '0px'\n },\n strokePosition: {\n value: 'center'\n }\n }\n};\n","import { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport {\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === MeasureSubtype.CONTINUOUS || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n *\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\nexport const strokeWidthPositionMap = ({ width, position }) => {\n const offset = width / 2;\n const strokeWidthWithOffsetMap = {\n center: {\n M: { x: 0, y: 0 },\n L1: { x: 0, y: 0 },\n L2: { x: 0, y: 0 },\n L3: { x: 0, y: 0 }\n },\n inside: {\n M: { x: +offset, y: +offset },\n L1: { x: -offset, y: +offset },\n L2: { x: -offset, y: -offset },\n L3: { x: +offset, y: -offset }\n },\n outside: {\n M: { x: -offset, y: -offset },\n L1: { x: +offset, y: -offset },\n L2: { x: +offset, y: +offset },\n L3: { x: -offset, y: +offset }\n }\n };\n return strokeWidthWithOffsetMap[position];\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.measurement();\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n // const layerEncoding = layerInst.config().encoding;\n\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n const style = {\n fill: color,\n stroke: encoding.stroke.value,\n 'stroke-width': encoding.strokeWidth.value\n };\n const conf = {\n strokePosition: encoding.strokePosition.value\n };\n\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n data: d.dataObj,\n style,\n meta: Object.assign({\n layerId: context.id()\n }, getColorMetaInf(style, conf))\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n FieldType,\n Scales,\n getObjProp,\n makeElement,\n appendElement\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn, getDataFromEvent } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints, strokeWidthPositionMap } from './bar-helper';\n\nconst { MEASURE } = FieldType;\n\nexport const BarLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = Scales.band();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n this._overlayPath = {};\n }\n\n elemType () {\n return 'rect';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n this._graphicElems = {};\n const paths = Object.keys(this._overlayPath);\n paths.forEach(path => this._overlayPath[path].remove());\n this._overlayPath = {};\n\n const barContainer = makeElement(containerSelection, 'g', [1], 'muze-layer-bars', {}, null);\n makeElement(containerSelection, 'g', [1], 'muze-overlay-paths', {}, null);\n createElements({\n data: this._points,\n container: barContainer.node(),\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, { event }) {\n if (!this.data()) {\n return null;\n }\n return this.getDataFromEvent(event);\n }\n\n getDataFromEvent (event) {\n return getDataFromEvent(this, event);\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n\n hasPlotSpan () {\n return true;\n }\n\n addOverlayPath (refElement, data, style, strokePosition, mountPoint) {\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n const pathGroup = makeElement(mountPoint, 'g', [1], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement = makeElement(pathGroup, 'path', [data], null, {}, d => `${d.update.x} ${data.rowId}`);\n\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n if (style.type === 'stroke-width') {\n const { L1, L2, L3, M } = strokeWidthPositionMap({\n width: parseInt(style.value, 10),\n position: strokePosition\n });\n\n pathElement.attr('d', d => `M ${d.update.x + M.x} ${d.update.y + M.y}\n L ${d.update.x + d.update.width + L1.x} ${d.update.y + L1.y}\n L ${d.update.x + d.update.width + L2.x} ${d.update.y + d.update.height + L2.y}\n L${d.update.x + L3.x} ${d.update.y + d.update.height + L3.y} Z`);\n }\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(mountPoint, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n\n // Apply the path shape get the correct path position\n currentPath.attr('d', d => `M ${d.update.x} ${d.update.y}\n L ${d.update.x + d.update.width} ${d.update.y}\n L ${d.update.x + d.update.width} ${d.update.y + d.update.height}\n L${d.update.x} ${d.update.y + d.update.height} Z`);\n }\n }\n\n getBoundBoxes () {\n const points = this._points.flat();\n\n return points.map((point) => {\n const { x, y, width, height } = point.update;\n const data = point.data;\n return {\n minX: x,\n maxX: x + width,\n minY: y,\n maxY: y + height,\n data\n };\n });\n }\n};\n\n","import { mix } from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { BAR_LAYER } from '../../enums/constants';\nimport { BarLayerMixin } from './bar-mixin';\nimport { BaseLayerMixin } from '../../base-layer/base-mixin';\nimport './styles.scss';\n\n/**\n * Bar layer creates rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\n */\nexport default class BarLayer extends mix(BaseLayer).with(BaseLayerMixin, BarLayerMixin) {\n static formalName () {\n return BAR_LAYER;\n }\n}\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n nearestPointThreshold: 10,\n interaction: {\n fade: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n }\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n\n","import {\n selectElement,\n Symbols,\n pathInterpolators,\n makeElement\n} from 'muze-utils';\n\nconst line = Symbols.line;\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className, interpolate, layer, transition } = params;\n const { disabled } = transition;\n\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && group.attr(attr[0], attr[1])));\n },\n update: (group, d) => {\n const pathElem = makeElement(group, 'path', [1]);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n group.attr('class', className);\n group.classed(d.className, true);\n\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n\n d.className && group.classed(d.className, true);\n pathElem.attr('d', linepath([[update.x, update.y], [x0, y0]]));\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n Object.entries(style).forEach(styleObj => group.style(styleObj[0], styleObj[1]));\n },\n exit: (exitGroup) => {\n exitGroup.remove();\n }\n }, keyFn);\n};\n","import { FieldType, makeElement, appendElement } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates, attachDataToVoronoi } from '../../helpers';\nimport { strokeWidthPositionMap } from './helper';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedVal.color\n };\n\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style,\n source: d.source,\n rowId: d.rowId,\n data: d,\n meta: { ...{ layerId: layerInst.id() }, ...getColorMetaInf(style) }\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { x: xAxis, y: yAxis } = axes;\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d.source;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedEncodings.color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style,\n source: row,\n rowId: d.rowId,\n data: d.dataObj,\n meta: { ...{ layerId: layerInst.id() }, ...getColorMetaInf(style) }\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport const TickLayerMixin = superclass => class extends superclass {\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'tick';\n }\n\n static drawFn () {\n return drawTicks;\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n attachDataToVoronoi (points) {\n attachDataToVoronoi(this._voronoi, points, (d) => {\n const { x, x0, y, y0 } = d.update;\n\n return {\n x: x + (x0 - x) / 2,\n y: y + (y0 - y) / 2\n };\n });\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n addOverlayPath (refElement, data, style, strokePosition) {\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n pathElement = makeElement(refElement, 'path', [data.update], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n let offsetM = { x: 0, y: 0 };\n let offsetL = { x: 0, y: 0 };\n\n if (style.type === 'stroke-width') {\n const { L, M } = strokeWidthPositionMap({\n width: parseInt(style.value, 10),\n position: strokePosition\n });\n offsetM = M;\n offsetL = L;\n }\n\n pathElement.attr('d', (d) => {\n if (d.update) {\n return `M ${d.update.x + offsetM.x} ${d.update.y + offsetM.y}\n L ${d.update.x0 + offsetL.x} ${d.update.y0 + offsetL.y}`;\n }\n return `M ${d.x + offsetM.x} ${d.y + offsetM.y}\n L ${d.x0 + offsetL.x} ${d.y0 + offsetL.y}`;\n });\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(refElement, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n }\n }\n};\n","export const strokeWidthPositionMap = ({ width, position = 'center' }) => {\n const offset = width ? width / 2 : 1;\n const strokeWidthWithOffsetMap = {\n center: {\n M: { x: 0, y: 0 },\n L: { x: 0, y: 0 }\n },\n inside: {\n M: { x: +offset, y: +offset },\n L: { x: -offset, y: +offset }\n },\n outside: {\n M: { x: -offset, y: -offset },\n L: { x: +offset, y: -offset }\n }\n };\n return strokeWidthWithOffsetMap[position];\n};\n","import { mix } from 'muze-utils';\nimport { PointLayerMixin } from '../point';\nimport { BaseLayerMixin, BaseLayer } from '../../base-layer';\nimport { TickLayerMixin } from './tick-mixin';\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends mix(BaseLayer).with(BaseLayerMixin, PointLayerMixin, TickLayerMixin) {\n static formalName () {\n return 'tick';\n }\n}\n","export const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef, ...params) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\n */\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import layerFactory from './layer-factory';\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default (layers = DEFAULT_LAYERS) => {\n const reg = Object.assign({}, layers);\n const regObj = {\n register: (def) => {\n const key = def.formalName();\n\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import { AreaLayer, AreaLayerMixin } from './layers/area';\nimport { ArcLayer, ArcLayerMixin } from './layers/arc';\nimport { LineLayer, LineLayerMixin } from './layers/line';\nimport { TextLayer, TextLayerMixin } from './layers/text';\nimport { PointLayer, PointLayerMixin } from './layers/point';\nimport { BarLayer, BarLayerMixin } from './layers/bar';\nimport { TickLayer, TickLayerMixin } from './layers/tick';\nimport { SimpleLayer } from './simple-layer';\nimport { BaseLayer, BaseLayerMixin } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport layerFactory from './layer-factory';\nimport layerRegistry from './layer-registry';\nimport { ENCODING } from './enums/constants';\nimport * as pointLayerHelpers from './layers/point/helper';\nimport * as commonHelpers from './helpers';\nimport * as enums from './enums';\n\nconst helpers = Object.assign(commonHelpers, {\n pointLayerHelpers\n});\n\nconst layerMixins = {\n BarLayerMixin,\n BaseLayerMixin,\n LineLayerMixin,\n AreaLayerMixin,\n PointLayerMixin,\n TextLayerMixin,\n TickLayerMixin,\n ArcLayerMixin\n};\n\nexport {\n BaseLayer,\n BarLayer,\n LineLayer,\n AreaLayer,\n PointLayer,\n ArcLayer,\n TextLayer,\n TickLayer,\n layerFactory,\n SimpleLayer,\n layerRegistry,\n LAYER_TYPES,\n ENCODING,\n helpers,\n enums,\n layerMixins\n};\n","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue,\n RTree\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) :\n (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n [X, Y, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n // const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = layers.sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]).filter(d => d !== undefined);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = getNearestValue(filterData, key);\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const isXandYMeasures = (context) => {\n const { x: xFields, y: yFields } = context.fields();\n const [xMeasures, yMeasures] = [xFields, yFields].map(fields => fields\n .every(field => field.type() === FieldType.MEASURE));\n return xMeasures && yMeasures;\n};\n\nconst getKey = (arr, row) => {\n let key = row[arr[0]];\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${row[arr[i]]}`;\n }\n return key;\n};\n\nexport const getValuesMap = (model, context) => {\n const idValuesMap = {};\n const valuesIdMap = {};\n const { data: dataArr, schema, uids } = model.getData();\n const fieldsConfig = model.getFieldsConfig();\n const fieldIndices = isXandYMeasures(context) ? schema.map((d, i) => i) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldsConfig[d].index);\n dataArr.forEach((row, i) => {\n const key = getKey(fieldIndices, row);\n valuesIdMap[key] = uids[i];\n idValuesMap[uids[i]] = row;\n });\n return { valuesIdMap, idValuesMap, fieldsConfig };\n};\n\nexport const getSelectionRejectionModel = (model, propModel, measures, propValuesMap) => {\n let rejectionModel;\n const { data, schema } = propModel.getData();\n const entryRowIds = [];\n const exitRowIds = [];\n\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n const { valuesIdMap } = propValuesMap;\n\n const rowIdsObj = {};\n const filteredSchema = measures ? schema.map((d, idx) => idx) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldMap[d].index);\n data.forEach((row) => {\n const key = getKey(filteredSchema, row);\n const id = valuesIdMap[key];\n if (key in valuesIdMap) {\n entryRowIds.push(id);\n rowIdsObj[id] = 1;\n }\n });\n rejectionModel = model.select((fields, i) => {\n if (!rowIdsObj[i]) {\n exitRowIds.push(i);\n return true;\n }\n return false;\n }, {\n saveChild: false\n });\n } else {\n rejectionModel = propModel;\n }\n\n return {\n model: [propModel, rejectionModel],\n entryRowIds,\n exitRowIds\n };\n};\n\nexport const createRTree = (context) => {\n const elements = [].concat(...context.layers().filter(layer => layer.config().interactive !== false)\n .map((layer) => {\n const points = layer.getBoundBoxes();\n return points;\n })).flat().filter(d => d !== null);\n\n const rtree = new RTree();\n rtree.load(elements);\n return rtree;\n};\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import SelectionSet from './selection-set';\n\nexport default SelectionSet;\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor ({ keys, fields }, _volatile) {\n this.completeSet = keys;\n this._set = {};\n this._uidMap = {};\n this._measureNames = {};\n this._dimVals = {};\n\n for (const key in keys) {\n this._set[key] = SELECTION_NULL;\n this._uidMap[key] = keys[key].uid;\n this._measureNames[key] = keys[key].measureNames;\n this._dimVals[key] = keys[key].dims;\n }\n\n this._volatile = _volatile;\n this._completeSetCount = Object.keys(keys).length;\n this._lockedSelection = {};\n this._fieldIndices = fields.reduce((acc, v, i) => {\n acc[v] = i;\n return acc;\n }, {});\n this._fields = fields;\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n if (i in set) {\n set[i] = SELECTION_NEW_ENTRY;\n }\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n if (i in set) {\n set[i] = SELECTION_OLD_ENTRY;\n }\n });\n\n return this;\n }\n\n /**\n * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n i in set && (set[i] = SELECTION_NEW_EXIT);\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets (config = {}) {\n const set = this._set;\n const uidMap = this._uidMap;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n mergedEnter: [],\n mergedExit: [],\n completeSet: []\n };\n const measureNames = this._measureNames;\n const dimVals = this._dimVals;\n const { keepDims = false, dimensions = this._fields } = config;\n const fieldIndices = this._fieldIndices;\n\n for (const key in set) {\n let val;\n const measureNamesArr = measureNames[key] || [];\n let dims = dimVals[key];\n\n if (keepDims) {\n if (measureNamesArr.length) {\n dims = dimensions.map(d => dims[fieldIndices[d]]);\n val = dims.length ? [...dims, `${measureNamesArr}`] : [uidMap[key], `${measureNamesArr}`];\n } else {\n val = dims.length ? [...dims] : [uidMap[key]];\n }\n } else {\n val = measureNamesArr.length ? [uidMap[key], measureNames[key], dims] : [uidMap[key]];\n }\n\n if (set[key] > 0) {\n [SELECTION_OLD_ENTRY, SELECTION_NEW_ENTRY].forEach((v, i) => {\n if (set[key] === v) {\n retObj.entrySet[i].push(val);\n }\n });\n if (set[key] === SELECTION_OLD_ENTRY || set[key] === SELECTION_NEW_ENTRY) {\n retObj.mergedEnter.push(val);\n }\n } else if (set[key] < 0) {\n [SELECTION_OLD_EXIT, SELECTION_NEW_EXIT].forEach((v, i) => {\n if (set[key] === v) {\n retObj.exitSet[i].push(val);\n }\n });\n if (set[key] === SELECTION_OLD_EXIT || set[key] === SELECTION_NEW_EXIT) {\n retObj.mergedExit.push(val);\n }\n }\n retObj.completeSet.push(val);\n }\n\n return retObj;\n }\n\n /**\n * Resets an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n i in set && (set[i] = SELECTION_NULL);\n });\n } else {\n for (const key in set) {\n set[key] = SELECTION_NULL;\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n *\n * @public\n *\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\n */\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the array of ids which are in the exit set.\n *\n * @public\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\n */\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getMergedEntrySet (raw) {\n const set = this._set;\n const mergedEnter = [];\n const uidMap = this._uidMap;\n const measureNames = this._measureNames;\n const dimVals = this._dimVals;\n\n for (const key in set) {\n const val = raw ? [...dimVals[key], `${measureNames[key]}`] :\n [uidMap[key], measureNames[key]];\n if (set[key] === SELECTION_NEW_ENTRY || set[key] === SELECTION_OLD_ENTRY) {\n mergedEnter.push(val);\n }\n }\n return mergedEnter;\n }\n\n getMergedExitSet (raw) {\n const set = this._set;\n const mergedExit = [];\n const uidMap = this._uidMap;\n const measureNames = this._measureNames;\n const dimVals = this._dimVals;\n\n for (const key in set) {\n const val = raw ? [...dimVals[key], `${measureNames[key]}`] :\n [uidMap[key], measureNames[key]];\n if (set[key] === SELECTION_NEW_EXIT || set[key] === SELECTION_OLD_EXIT) {\n mergedExit.push(val);\n }\n }\n return mergedExit;\n }\n}\n\nexport default SelectionSet;\n","import { clone, unique, intersect } from 'muze-utils';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const target = SideEffect.target();\n if (target === context.target() || target === 'all') {\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n }\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.fields.map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (firebolt, behaviours) => {\n let combinedSet = null;\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n const uidSet = {\n mergedEnter: [],\n mergedExit: []\n };\n\n behaviours.forEach((behaviour) => {\n const entryExitSet = firebolt._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet || {}, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const { model, uids } = entryExitSet[type];\n let existingModel = models[type];\n\n if (!existingModel) {\n existingModel = models[type] = model;\n uidSet[type] = uids;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n uidSet[type] = unique([...uidSet[type], ...uids]);\n models[type] = model.isEmpty() ? existingModel : existingModel.union(model);\n } else {\n existingModel = model;\n uidSet[type] = uids;\n }\n combinedSet[type].uids = uidSet[type];\n combinedSet[type].model = models[type];\n });\n }\n });\n\n return combinedSet;\n};\n\nexport const intersectSets = (firebolt, behaviours) => {\n let combinedSet = null;\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n const uidSet = {\n mergedEnter: [],\n mergedExit: []\n };\n\n behaviours.forEach((behaviour) => {\n const entryExitSet = firebolt._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet || {}, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const { model, uids } = entryExitSet[type];\n let existingModel = models[type];\n\n if (!existingModel) {\n existingModel = models[type] = model;\n uidSet[type] = uids;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n const commonSet = intersect(uidSet[type], uids, [id => id[0], id => id[0]]);\n uidSet[type] = [...commonSet];\n models[type] = model.isEmpty() ? existingModel : existingModel.union(model);\n }\n combinedSet[type].uids = unique(uidSet[type]);\n combinedSet[type].model = models[type];\n });\n }\n });\n\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n selectElement,\n isSimpleObject,\n getDataModelFromRange,\n ReservedFields,\n FieldType,\n defaultValue\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects,\n setSideEffectConfig\n} from './helper';\n\nconst cloneObj = (behaviourEffectMap) => {\n const keys = Object.keys(behaviourEffectMap);\n\n return keys.reduce((acc, key) => {\n const value = behaviourEffectMap[key];\n const cloned = value.map((d) => {\n let clonedVal = d;\n if (isSimpleObject(d)) {\n clonedVal = mergeRecursive({}, d);\n }\n return clonedVal;\n });\n acc[key] = cloned;\n return acc;\n }, {});\n};\n\nconst getKeysFromCriteria = (criteria, firebolt) => {\n if (criteria) {\n const data = firebolt.data();\n const { dimensionsMap, dimensions: dimArr } = firebolt._metaData;\n\n let values = [];\n if (isSimpleObject(criteria)) {\n const dm = getDataModelFromRange(data, criteria);\n const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(dm.getFieldsConfig()).length,\n def: {\n name: ReservedFields.ROW_ID,\n type: FieldType.DIMENSION\n }\n }\n });\n dm.getData({ withUid: true }).data.forEach((row) => {\n const dimKey = `${dimArr.map(d => row[fieldsConfig[d].index])}`;\n const measures = criteria[ReservedFields.MEASURE_NAMES] || dimensionsMap[dimKey] || [[]];\n measures.forEach((measureArr) => {\n values.push(`${[dimKey, ...measureArr]}`);\n });\n });\n } else {\n values = criteria.slice(1, criteria.length).map(d => `${d}`);\n }\n return values;\n }\n return null;\n};\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._sourceSelectionSet = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sideEffectPolicies = {};\n this._propagationBehaviourMap = {};\n this._behaviourPolicies = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._handlers = {};\n this._payloadGenerators = {};\n this._payloads = {};\n\n this.mapSideEffects(cloneObj(behaviourEffectMap));\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n effectNames = effectNames.map((effect) => {\n if (!isSimpleObject(effect)) {\n return {\n name: effect\n };\n }\n return effect;\n });\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n let combinedSet = this.mergeSelectionSets(behaviours);\n effects.forEach((effect) => {\n let options = {};\n let name;\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options || {};\n } else {\n name = effect;\n }\n const set = options.set;\n if (set) {\n combinedSet = this.mergeSelectionSets(set);\n }\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance && sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n const { setTransform } = options;\n selectionSet = setTransform ? setTransform(selectionSet, payload, sideEffect) : selectionSet;\n sideEffect.apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n payload = this.sanitizePayload(payload);\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n this._payloads[behaviour] = payload;\n\n if (action) {\n action.dispatch(payload);\n this._entryExitSet[behaviour] = action.entryExitSet();\n const shouldApplySideEffects = this.shouldApplySideEffects(propagationInfo);\n\n if (propagate) {\n this.propagate(behaviour, payload, action.propagationIdentifiers(), { sideEffects });\n }\n\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, this.getEntryExitSet(behaviour), payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value, key = 'default') {\n const behaviourConditions = this._behaviourPolicies[behaviour] || (this._behaviourPolicies[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sideEffectPolicies[sideEffect] ||\n (this._sideEffectPolicies[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sideEffectPolicies[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._behaviourPolicies[behaviour][key];\n return this;\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n this.mapActionsAndBehaviour(key);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel, handler = this.onDataModelPropagation()) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', handler);\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n this._entryExitSet[key] = null;\n }\n }\n\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n target () {\n return 'all';\n }\n\n registerPhysicalActions (actions, context = this) {\n const initedActions = initializePhysicalActions(context, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n this.registerPhysicalActionHandlers();\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (!nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n return {\n model: propagationInf.data ? propagationInf.data : null,\n uids: criteria ? getKeysFromCriteria(criteria, this) : null\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n\n mergeSelectionSets (behaviours) {\n return unionSets(this, behaviours);\n }\n\n data () {\n return this.context.data();\n }\n\n triggerPhysicalAction (event, payload) {\n const handlers = this._handlers[event] || [];\n const genericHandlers = this._handlers['*'];\n\n const allHandlers = [...Object.values(handlers), ...Object.values(genericHandlers)];\n allHandlers.forEach((fn) => {\n fn(event, payload);\n });\n\n return this;\n }\n\n onPhysicalAction (event, fn, namespace) {\n !this._handlers[event] && (this._handlers[event] = {});\n this._handlers[event][namespace] = fn;\n\n return this;\n }\n\n registerPhysicalActionHandlers () {\n this.onPhysicalAction('*', (event, payload) => {\n const { behaviours } = this._actionBehaviourMap[event];\n behaviours.forEach(beh => this.dispatchBehaviour(beh, payload));\n });\n }\n\n id () {\n return this.context.id();\n }\n\n getRangeFromIdentifiers (...params) {\n return this.context.getRangeFromIdentifiers(...params);\n }\n\n sanitizePayload (payload) {\n return payload;\n }\n\n payloadGenerators (...params) {\n if (params.length) {\n Object.assign(this._payloadGenerators, params[0]);\n }\n return this._payloadGenerators;\n }\n\n getPayloadGeneratorFor (action) {\n const defaultFn = this._payloadGenerators.__default;\n const fn = this._payloadGenerators[action];\n\n return defaultValue(fn, defaultFn);\n }\n\n getPayload (action) {\n return this._payloads[action];\n }\n\n actions () {\n return this._actions;\n }\n}\n","import {\n isSimpleObject,\n DimensionSubtype,\n partition,\n ReservedFields,\n retrieveNearestGroupByReducers\n} from 'muze-utils';\nimport { getMergedSet, getSourceFields } from '../../helper';\n\nexport const getIdentifiersFromSet = (set, context, { fields }) => {\n const data = [[]];\n\n if (fields.length) {\n data[0] = fields;\n set.forEach(id => data.push(id));\n }\n return data;\n};\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\n */\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n this._payload = payload;\n\n selectionSets.forEach((selectionSet) => {\n this.setSelectionSet(uids, selectionSet, {\n filteredDataModel,\n payload\n });\n\n selectionSet._volatile && this.propagationIdentifiers(selectionSet, payload);\n this.entryExitSet(selectionSet, filteredDataModel, payload);\n });\n }\n\n getAddSetFromCriteria (...params) {\n return this.firebolt.getAddSetFromCriteria(...params);\n }\n\n /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\n */\n setSelectionSet () {\n return this;\n }\n\n entryExitSet (...params) {\n if (params.length) {\n const [selectionSet, filteredDataModel, payload] = params;\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n\n this._entryExitSet = {\n entrySet: [this.getSetInfo('oldEntry', entrySet[0], filteredDataModel),\n this.getSetInfo('newEntry', entrySet[1], filteredDataModel)],\n exitSet: [this.getSetInfo('oldEntry', exitSet[0], filteredDataModel),\n this.getSetInfo('newExit', exitSet[1], filteredDataModel)],\n mergedEnter: this.getSetInfo('mergedEnter', getMergedSet(entrySet), filteredDataModel,\n selectionSet._fields),\n mergedExit: this.getSetInfo('mergedExit', getMergedSet(exitSet), filteredDataModel,\n selectionSet._fields),\n completeSet: this.getSetInfo('complete', completeSet, filteredDataModel, selectionSet._fields),\n fields: getSourceFields(propagationInf, payload.criteria)\n };\n\n return this;\n }\n return this._entryExitSet;\n }\n\n getSetInfo (type, set, filteredDataModel, setFields) {\n let model = null;\n const data = this.firebolt.data();\n\n if (type === 'mergedEnter') {\n model = filteredDataModel || null;\n } else if (type === 'mergedExit') {\n if (filteredDataModel) {\n const setKeys = new Set(set.map(d => d[0]));\n model = data.select((fields, i) => setKeys.has(setFields.map(field =>\n (field === ReservedFields.ROW_ID ? i : fields[field].value))), {\n saveChild: false\n });\n }\n model = filteredDataModel || null;\n }\n const aggFns = retrieveNearestGroupByReducers(model);\n\n return {\n uids: set,\n length: set.length,\n model,\n fields: setFields,\n aggFns\n };\n }\n\n propagationIdentifiers (...params) {\n if (params.length) {\n let propData = null;\n const [selectionSet, payload] = params;\n const fieldsConfig = this.firebolt.data().getFieldsConfig();\n const { criteria } = payload;\n const propagationFields = this._propagationFields;\n\n if (selectionSet.resetted() || criteria === null) {\n propData = null;\n } else if (isSimpleObject(criteria)) {\n const fields = Object.keys(criteria);\n const [, otherFields] =\n partition(fields, (d => (fieldsConfig[d] ? fieldsConfig[d].def.subtype ===\n DimensionSubtype.CATEGORICAL : d === ReservedFields.MEASURE_NAMES)));\n const allFields = selectionSet._fields.filter(d => d === ReservedFields.ROW_ID ||\n fieldsConfig[d].def.subtype ===\n DimensionSubtype.CATEGORICAL\n );\n const { mergedEnter } = selectionSet.getSets({ keepDims: true, dimensions: allFields });\n propData = {\n fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : {\n name: d\n })),\n range: this.firebolt.getRangeFromIdentifiers({\n criteria,\n entrySet: mergedEnter,\n fields: otherFields\n }),\n identifiers: [[...allFields, ReservedFields.MEASURE_NAMES], ...mergedEnter]\n };\n } else {\n const { mergedEnter } = selectionSet.getSets({ keepDims: true,\n dimensions: propagationFields });\n const fields = propagationFields ? [...propagationFields, ReservedFields.MEASURE_NAMES] :\n criteria[0];\n\n propData = {\n fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : {\n name: d\n })),\n identifiers: [fields, ...mergedEnter]\n };\n }\n this._propagationIdentifiers = propData;\n return this;\n }\n return this._propagationIdentifiers;\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n propagateWith (...params) {\n this._propagationFields = params[0];\n\n return this;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keepDims: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.sourceId) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keepDims: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\nimport { SELECTION } from '../..';\nimport { getMergedSet } from '../../helper';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.sourceId) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keepDims: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets({ keepDims: true });\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n\n","import { COORD_TYPES } from 'muze-utils';\n\nconst dragCriteriaRetriever = {\n [COORD_TYPES.CARTESIAN]: (firebolt, sourceInfo, { startPos, endPos }) => {\n if (startPos.x === endPos.x && startPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n const ranges = firebolt.context.getRangeFromPositions({\n startPos,\n endPos\n });\n const dimensions = {};\n dimensions.x = [startPos.x, endPos.x];\n dimensions.y = [startPos.y, endPos.y];\n return {\n criteria: ranges,\n dimensions\n };\n },\n [COORD_TYPES.POLAR]: () => ({\n criteria: null\n })\n};\n\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (firebolt, config) => {\n const context = firebolt.context;\n const sourceInfo = context.getSourceInfo();\n const coordType = context.coord();\n return dragCriteriaRetriever[coordType](firebolt, sourceInfo, config);\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n} from 'muze-utils';\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, action, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n const newStartPos = Object.assign({}, startPos);\n const newEndPos = Object.assign({}, endPos);\n if (startPos.x > endPos.x) {\n newStartPos.x = endPos.x;\n newEndPos.x = startPos.x;\n }\n\n if (startPos.y > endPos.y) {\n const y = startPos.y;\n newStartPos.y = endPos.y;\n newEndPos.y = y;\n }\n const payload = getDragActionConfig(firebolt, {\n startPos: newStartPos,\n endPos: newEndPos\n });\n payload.dragging = true;\n payload.dragDiff = Math.abs(startPos.x - endPos.x) + Math.abs(startPos.y - endPos.y);\n firebolt.triggerPhysicalAction(action, payload);\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n if (startPos.x > endPos.x) {\n const x = startPos.x;\n startPos.x = endPos.x;\n endPos.x = x;\n }\n\n if (startPos.y > endPos.y) {\n const y = startPos.y;\n startPos.y = endPos.y;\n endPos.y = y;\n }\n\n const payload = getDragActionConfig(firebolt, {\n startPos,\n endPos\n });\n payload.dragEnd = true;\n firebolt.triggerPhysicalAction(action, payload);\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: true,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n getAllPoints: false,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, payload);\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, {\n criteria: null\n });\n });\n};\n\nexport default hover;\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n firebolt.triggerPhysicalAction(ACTION_NAMES.CLICK, payload);\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTION_NAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTION_NAMES.DRAG]: drag,\n [ACTION_NAMES.HOVER]: hover,\n [ACTION_NAMES.CLICK]: click,\n [ACTION_NAMES.LONGTOUCH]: longtouch,\n [ACTION_NAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl) => {\n attachDragEvent(targetEl, ACTION_NAMES.DRAG, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport * as ACTION_NAMES from '../../enums/actions';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n firebolt.triggerPhysicalAction(ACTION_NAMES.LONGTOUCH, payload);\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n firebolt.triggerPhysicalAction(ACTION_NAMES.LONGTOUCH, {\n criteria: null\n });\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\nconst FRAGMENTED_TOOLTIP = 'fragmented-tooltip';\nconst AXIS_LABEL_HIGHLIGHTER = 'axis-label-highlighter';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP,\n FRAGMENTED_TOOLTIP,\n AXIS_LABEL_HIGHLIGHTER\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\n */\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n this.sourceInfo(() => this.firebolt.context.getSourceInfo());\n this.layers(() => this.firebolt.context.layers());\n this.plotPointsFromIdentifiers((...args) => this.firebolt.context.getPlotPointsFromIdentifiers(...args));\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\n */\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n\n sourceInfo (...sourceInfo) {\n if (sourceInfo.length) {\n this._sourceInfo = sourceInfo[0];\n return this;\n }\n return this._sourceInfo();\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers();\n }\n\n plotPointsFromIdentifiers (...params) {\n if (params.length && params[0] instanceof Function) {\n this._plotPointsFromIdentifiers = params[0];\n return this;\n }\n return this._plotPointsFromIdentifiers(...params);\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\n applyInteractionStyle (set, config = {}, layers) {\n const { interactionType, apply, reset = false } = config;\n const allLayers = layers || this.firebolt.context.layers();\n allLayers.forEach((layer) => {\n const { interactive } = layer.config();\n if (interactive !== false) {\n const layerFields = layer.data().getFieldsConfig();\n const filteredUids = set.uids.filter(([, measures = []]) => measures.every(m => m in layerFields))\n .map(d => d[0]);\n const options = { apply, reset, styles: null };\n layer.applyInteractionStyle(interactionType, filteredUids, options);\n }\n });\n return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\n * ```\n */\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const { x: xDim, y: yDim } = dimensions;\n\n if (!criteria) return null;\n\n if (axes.x && axes.y) {\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n\n if (xRange && xRange.length) {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val = xRange[0];\n let x2Val = xRange[xRange.length - 1];\n\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n }\n\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n\n if (yRange && yRange.length) {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val = yRange[0];\n let y2Val = yRange[yRange.length - 1];\n\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n }\n\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction: 'both'\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\nimport { BEHAVIOURS } from '../..';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n },\n persistent: false\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x = 0;\n let y = 0;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n width = unitWidth;\n height = unitHeight;\n\n // Hide selection-box on dragEnd or when criteria is empty\n if (!payload.criteria || (payload.dragEnd && !config.persistent)) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = this.sourceInfo();\n const { dimension, direction } =\n getBoxDimensionsFromPayload(payload, sourceInf.axes, sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both') {\n x = Math.min(dimension.x1, dimension.x2);\n y = Math.min(dimension.y1, dimension.y2);\n width = Math.abs(dimension.x2 - dimension.x1);\n height = Math.abs(dimension.y2 - dimension.y1);\n }\n\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n firebolt.registerPhysicalBehaviouralMap({\n selectiondrag: {\n behaviours: [BEHAVIOURS.BRUSH]\n }\n });\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\nimport { ACTIONS } from '../..';\n\nexport const selectionBoxDrag = firebolt => (targetEl) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n firebolt.triggerPhysicalAction(ACTIONS.SELECTIONDRAG, payload);\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(firebolt, {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n });\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(firebolt, {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n });\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const NULL = 'null';\nexport const UNDEFINED = 'undefined';\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n parentClassName: 'tooltip-parent-container',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n spacing: 5,\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '4px 0 4px 0',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\nexport const TABLE_FORMAT = 'table';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { TABLE_FORMAT } from './constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n const { classPrefix } = config;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n const mountHtmlTooltip = makeElement(mount, 'div', [1], `${classPrefix}-tooltip-html-container`);\n mountHtmlTooltip.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === TABLE_FORMAT) {\n const table = makeElement(body, 'table', [1], `${classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, '', {\n update: (elem, elemData) => elem.attr('class', elemData.className)\n });\n const cells = makeElement(rows, 'span', d => d.data, `${classPrefix}-tooltip-content`);\n cells.attr('class', `${classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block' // 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n makeElement,\n getMaxPoint\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM,\n TOOLTIP_TOP } from './constants';\nimport { defaultConfig } from './default-config';\nimport { reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class',\n `${classPrefix}-${tooltipConf.defClassName} ${classPrefix}-${contentClass}\n ${tooltipConf.className}`);\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.parentClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n this.addClass(qualifiedClassName.join(' '));\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = `${classPrefix}-${contentClass}-${name}`;\n const specificClass = `${classPrefix}-${contentConfig.className}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className} ${specificClass}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n\n if (target) {\n const node = this._tooltipContainer.node();\n const tooltipPos = this._orientation;\n const outsidePlot = tooltipPos === TOOLTIP_LEFT || tooltipPos === TOOLTIP_RIGHT ?\n (y + node.offsetHeight) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth) < target.x || x > (target.x + target.width);\n\n if (outsidePlot) {\n let path;\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (tooltipPos === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (tooltipPos === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (tooltipPos === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n const orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const contentContainer = this._contentContainer.node();\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px')\n .style('width', '2000px')\n .style('height', '2000px');\n\n const offsetWidth = contentContainer.offsetWidth + 4;\n const offsetHeight = contentContainer.offsetHeight + 4;\n const config = this._config;\n const offset = this._offset;\n const spacing = config.spacing;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const bottomSpace = extent.height - (dim.y + dim.height + offset.y);\n const arrowSize = spacing;\n const tooltipHeight = offsetHeight + arrowSize;\n const tooltipWidth = offsetWidth + arrowSize;\n\n const spaces = [{\n position: 'top',\n value: topSpace - tooltipHeight\n }, {\n position: 'right',\n value: rightSpace - tooltipWidth\n }, {\n position: 'left',\n value: leftSpace - tooltipWidth\n }, {\n position: 'bottom',\n value: bottomSpace - tooltipHeight\n }];\n\n const positionHorizontal = (positionVal) => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionVal === 'right') {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionVal === 'left') {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n }\n\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n return {\n position,\n x,\n y\n };\n };\n\n const positionVertical = (positionVal) => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionVal === 'top') {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n return {\n position,\n x,\n y\n };\n };\n\n this._target = dim;\n\n const hMax = getMaxPoint(spaces.filter(d => d.position === 'left' || d.position === 'right'),\n 'value');\n const vMax = getMaxPoint(spaces.filter(d => d.position === 'top' || d.position === 'bottom'),\n 'value');\n if (!orientation) {\n if (hMax.value > 0) {\n const position = hMax.position;\n obj = positionHorizontal(position);\n } else {\n const position = vMax.position;\n obj = positionVertical(position);\n }\n } else if (orientation === 'horizontal') {\n const position = hMax.position;\n obj = positionHorizontal(position);\n } else {\n const position = vMax.position;\n obj = positionVertical(position);\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._tooltipContainer.style('height', `${offsetHeight}px`)\n .style('width', `${offsetWidth}px`);\n this._orientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","export const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect,\n ReservedFields\n} from 'muze-utils';\nimport { TABLE_FORMAT } from '@chartshq/muze-tooltip';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\nimport { BAR } from '../../../../visual-group/src/enums/constants';\nimport { NULL, UNDEFINED } from '../../enums/constants';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\nconst FIRST_VALUE_MARGIN = '10px';\nconst STACK = 'stack';\nconst SINGLE_DATA_MARGIN = 10;\nconst defNumberFormat = value => `${value % value.toFixed(0) === 0 ? value : value.toFixed(2)}`;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(defNumberFormat(value))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst isSingleValue = (dataLen, stackedSum) => dataLen === 1 && !stackedSum;\n\nconst getStackedKeyValue = (params) => {\n const { field, value, classPrefix } = params;\n return ({\n className: `${classPrefix}-tooltip-stacked-row`,\n data: [{\n value: field,\n className: `${classPrefix}-tooltip-stacked-row-key`\n }, {\n value: `${value}`,\n className: `${classPrefix}-tooltip-stacked-row-value`\n }]\n });\n};\n\nconst getKeyValue = (params) => {\n const { field, value, classPrefix, margin, isSelected, removeKey, stackedSum, isStackedBar } = params;\n let { stackedValue } = params;\n\n if (!removeKey) {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n const valueObj = {\n value,\n className: `${classPrefix}-tooltip-value`\n };\n\n if (stackedValue === NULL || stackedValue === UNDEFINED) {\n stackedValue = 0;\n }\n\n const stackedValueObj = {\n value: stackedSum ? `(${(stackedValue * 100 / stackedSum).toFixed(2)} %)` : undefined,\n className: `${classPrefix}-tooltip-stacked-percentage`\n };\n\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n valueObj.style = {\n 'margin-left': `${margin}px`\n };\n stackedValueObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n\n return ({\n className: isSelected ? `${classPrefix}-tooltip-row ${classPrefix}-tooltip-selected-row`\n : `${classPrefix}-tooltip-row`,\n data: stackedSum && isStackedBar ? [keyObj, stackedValueObj, valueObj] : [keyObj, valueObj]\n });\n }\n return ({\n data: [{\n className: '',\n value,\n style: {\n 'margin-left': FIRST_VALUE_MARGIN\n }\n }],\n className: `${classPrefix}-tooltip-first`\n });\n};\n\nexport const getStackedSum = (values, index) => values.reduce((a, b) => {\n if (b[index] instanceof InvalidAwareTypes) {\n return a + 0;\n }\n return a + b[index];\n}, 0);\n\nexport const isStackedChart = layers => layers.some(d => d.transformType() === STACK);\nexport const isStackedBarChart = layers => layers.some(d => d.transformType() === STACK && d.config().mark === BAR);\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const {\n fieldsConfig,\n dimensionMeasureMap,\n axes,\n config,\n fieldInf,\n dataLen,\n target,\n stackedSum,\n isStackedBar\n } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const REF_VALUES_INDEX = 1;\n const REF_KEYS_INDEX = 0;\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n size: sizeAxis.config().value,\n shape: shapeAxis.getShape(retinalFieldValue)\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (isSingleValue(dataLen, stackedSum)) {\n content.push(getKeyValue({\n field: displayName,\n value: formattedRetinalValue,\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push({ data: [icon, formattedRetinalValue] }));\n const selectedContext = target && target[REF_VALUES_INDEX][target[REF_KEYS_INDEX].indexOf(retField)];\n const isSelected = selectedContext === retinalFieldValue;\n\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const currentMeasureValue = valueArr[measureIndex];\n const value = formatterFn(currentMeasureValue);\n const keyValue = getKeyValue({\n field: hasMultipleMeasures ? `${dName}${separator}` : formattedRetinalValue,\n value,\n classPrefix,\n margin: hasMultipleMeasures ? margin : undefined,\n isSelected,\n stackedSum,\n stackedValue: currentMeasureValue instanceof InvalidAwareTypes\n ? currentMeasureValue.value()\n : currentMeasureValue.toFixed(2),\n isStackedBar\n });\n\n if (!hasMultipleMeasures) {\n keyValue.data = [icon, ...keyValue.data];\n }\n content.push(keyValue);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.retinalFields;\n const detailFields = context.detailFields || [];\n const { showStackSum = true } = context.config || {};\n const { selectedMeasures = [] } = context.payload;\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n const containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = TABLE_FORMAT;\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const isStacked = isStackedChart(context.layers);\n const isStackedBar = isStackedBarChart(context.layers);\n const filteredMeasures = !isSingleValue(dataLen, isStacked)\n ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n\n nestedDataObj = !('key' in nestedDataObj[0]) ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const { values, key } = nestedData[i];\n const field = getObjProp(schema, indices[index], 'name');\n const margin = dataLen === 1 || Object.keys(retinalFields).length === 0\n ? SINGLE_DATA_MARGIN : undefined;\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(key);\n const removeKey = !isSingleValue(dataLen, isStacked);\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: formattedValue,\n classPrefix,\n margin,\n isSelected: undefined,\n removeKey\n }));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n let stackedSum = 0;\n if (isStacked && showStackSum) {\n stackedSum = getStackedSum(\n values,\n fieldsConfig[measures[0].name].index\n );\n const nf = measures[0].numberFormat;\n content.push(getStackedKeyValue({\n field: `${'Total'}${separator}`,\n value: nf ? nf(stackedSum.toFixed(2)) : stackedSum.toFixed(2),\n classPrefix\n }));\n }\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen,\n target: context.payload.target,\n stackedSum,\n isStackedBar\n });\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n isSelected: selectedMeasures.indexOf(name) !== -1,\n value: fn(valueArr[fieldsConfig[name].index]),\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * Calculate aggregated values of measures from entry set and datamodel.\n *\n * @param {DataModel} dm DataModel instance\n * @param {EntrySet} entrySet Entry set\n */\nconst getAggregatedValues = (dm, entrySet) => {\n const fields = entrySet.fields;\n const aggFns = entrySet.aggFns;\n // Create a map of all the dimensions and the measures\n const dimsMap = entrySet.uids.reduce((acc, v) => {\n const dims = v[2];\n\n !acc[dims] && (acc[dims] = []);\n acc[dims].push(v[1]);\n return acc;\n }, {});\n const aggMeasures = Object.keys(dm.getFieldspace().getMeasure());\n const aggregatedValues = {};\n aggMeasures.forEach((measure) => {\n // Filter all the rows which has this measure and dimensions and apply aggregation.\n const groupedDm = dm.select((dmFields, id) => {\n const row = `${fields.map(field => (field === ReservedFields.ROW_ID ? id :\n dmFields[field].internalValue))}`;\n const measures = dimsMap[row];\n if (measures) {\n return measures.find(arr => arr.indexOf(measure) !== -1);\n }\n return false;\n }, {\n saveChild: false\n }).groupBy([''], {\n [measure]: aggFns[measure] === COUNT ? SUM : aggFns[measure]\n }, {\n saveChild: false\n });\n const fieldsConfig = groupedDm.getFieldsConfig();\n if (!groupedDm.isEmpty()) {\n aggregatedValues[measure] = groupedDm.getData().data[0][fieldsConfig[measure].index];\n }\n });\n return aggregatedValues;\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const { classPrefix } = config;\n const tooltipConf = context.config;\n const { showMultipleMeasures } = tooltipConf;\n const aggFns = selectionSet.mergedEnter.aggFns;\n const entryUids = selectionSet.mergedEnter.uids;\n const fieldsConf = dm.getFieldsConfig();\n const aggregatedValues = getAggregatedValues(dm, selectionSet.mergedEnter);\n const values = [{\n className: `${classPrefix}-tooltip-row`,\n data: [{\n value: `${entryUids.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected']\n }];\n let measures = Object.keys(aggregatedValues);\n if (!showMultipleMeasures) {\n measures = measures.slice(0, 1);\n }\n // Prepare the tooltip content\n measures.forEach((measure) => {\n const { numberFormat = defNumberFormat } = fieldsConf[measure].def;\n const value = aggregatedValues[measure];\n const rowValues = value instanceof InvalidAwareTypes ? [] : [`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}:`,\n {\n value: numberFormat(value),\n style: {\n 'font-weight': 'bold'\n },\n className: `${classPrefix}-tooltip-value`\n }];\n if (showMultipleMeasures) {\n values.push({\n className: `${classPrefix}-tooltip-row`,\n data: rowValues\n });\n } else {\n values[0].data.push(...rowValues);\n }\n });\n\n return values;\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { mergeRecursive, defaultValue } from 'muze-utils';\nimport { strategies } from './strategies';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n order: 1,\n dataTransform: (dm, fields) => (fields ? dm.project(fields, { saveChild: false }) : dm)\n },\n selectionSummary: {\n order: 0,\n dataTransform: dm => dm\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\n }\n\n apply (selectionSet, payload, options = {}) {\n const dataModel = selectionSet && selectionSet.mergedEnter.model;\n\n if ((payload.criteria === null || (dataModel && dataModel.isEmpty())) || selectionSet === null) {\n this.hide(options, null);\n return this;\n }\n\n const strategy = defaultValue(options.strategy, this._strategy);\n\n this.createTooltip(dataModel, Object.assign({}, {\n payload,\n selectionSet,\n strategy,\n options\n }), null, 0);\n\n return this;\n }\n\n static target () {\n return 'all';\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n const { orientation } = this.config();\n\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const tooltip = tooltips[key];\n const strategy = options.strategy || this._strategy;\n tooltip.content(strategy, null);\n if (!Object.keys(tooltip._contents).length) {\n tooltip.hide();\n } else {\n tooltip.positionRelativeTo(tooltip._target, {\n orientation\n });\n }\n }\n }\n }\n\n getPlotPointsFromIdentifiers (payload) {\n let target = payload.target;\n let targetFields = [];\n\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n return super.plotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n }\n\n createTooltip (dataModel, props = {}, plotDim, key) {\n const drawingInf = this.drawingContext();\n const sourceInf = this.sourceInfo();\n const config = this.config();\n const {\n strategy,\n payload,\n selectionSet\n } = props;\n plotDim = defaultValue(plotDim, this.getPlotPointsFromIdentifiers(payload));\n plotDim = plotDim && plotDim[0];\n const pad = config.padding;\n const { showInPosition, position: tooltipPos } = payload;\n const { fields: projectFields, dataTransform } = config[strategy];\n\n const strategyFn = this._strategies[strategy];\n const dt = dataTransform(dataModel, projectFields, this);\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = this._tooltips[key] = this._tooltips[key] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n Object.assign(sourceInf, {\n payload,\n firebolt: this.firebolt,\n detailFields: [],\n timeDiffs: sourceInf.timeDiffs,\n valueParser: this.valueParser(),\n selectionSet,\n config: config[strategy]\n });\n\n tooltipInst.context(sourceInf);\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: config[strategy].order,\n className: config[strategy].className\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: config.orientation\n }\n );\n } else {\n tooltipInst.hide();\n }\n }\n}\n","import { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { FRAGMENTED_TOOLTIP } from '../../enums/side-effects';\nimport Tooltip from '../tooltip';\n\nexport default class FragmentedTooltip extends Tooltip {\n static formalName () {\n return FRAGMENTED_TOOLTIP;\n }\n\n createTooltip (dataModel, props) {\n let totalHeight = 0;\n let totalWidth = 0;\n const config = this.config();\n const { strategy } = props;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n\n const tooltips = this._tooltips;\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const pad = config.padding;\n const dataModels = [];\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const boxes = [];\n const uids = dataModel.getUids();\n\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n\n const enter = {};\n for (let i = 0, len = dataModels.length; i < len; i++) {\n const dm = dataModels[i];\n const dimensions = dm.getData().schema.filter(d => d.type === FieldType.DIMENSION).map(d => d.name);\n const plotDim = context.getPlotPointsFromIdentifiers(dm.project(dimensions), { getBBox: true });\n\n super.createTooltip(dm, props, plotDim, i);\n const tooltipInst = this._tooltips[i];\n enter[i] = this._tooltips[i];\n\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n\n position && boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(strategy, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n\n boxes.length && spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n};\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { CROSSLINE } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return CROSSLINE;\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n const isEmptyDataModel = dataModel && dataModel.isEmpty();\n if (payload.criteria && isEmptyDataModel) {\n this.hide();\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n\n let layers = this.firebolt.context.layers();\n layers = layers.filter(layer => !!layer.config().crossline);\n\n if (layers.length) {\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...layers.map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n !isNaN(px) && elemData.push(dataPoint);\n }\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n\n static target () {\n return 'visual-unit';\n }\n}\n","import { difference, intersect } from 'muze-utils';\nimport { intersectSets } from '../../helper';\n\n/**\n * @private\n * @param {Object} set Points set\n * @param {Array.} selectedPointsId array of id of selected points\n * @return {Object} Returns the set with the selected points removed\n */\nexport const getFormattedSet = (set, selectedPointsId, intersection = false) => {\n const fn = intersection ? intersect : difference;\n const formattedSet = fn(set.uids, selectedPointsId,\n [d => d[0], d => d[0]]);\n return {\n ...set,\n ...{\n uids: formattedSet,\n length: formattedSet.length\n }\n };\n};\n\nexport const highlightSelectIntersection = (firebolt) => {\n const selectEntrySet = firebolt.getEntryExitSet('select');\n const highlightEntrySet = firebolt.getEntryExitSet('highlight');\n\n if (selectEntrySet && highlightEntrySet) {\n const intersectSet = intersectSets(firebolt, ['select', 'highlight']);\n return intersectSet;\n }\n\n return null;\n};\n","import { intersect, difference } from 'muze-utils';\nimport { getFormattedSet } from './helper';\nimport { BEHAVIOURS } from '../..';\n\nconst fadeFn = (set, context) => {\n const { formattedSet } = set;\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = formattedSet;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType: 'fade', apply: false });\n } else {\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n // Apply style only on the hovered layer\n if (layerName === 'area') {\n context.applyInteractionStyle(mergedEnter, { interactionType: 'fade', apply: true }, [layer]);\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: false }, [layer]);\n } else {\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: true }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'fade', apply: false }, [layer]);\n }\n });\n }\n};\n\nconst fadeOnBrushFn = (set, context, payload) => {\n const { formattedSet } = set;\n const {\n exitSet,\n mergedEnter,\n mergedExit,\n completeSet\n } = formattedSet;\n\n const { dragEnd } = payload;\n let interactionType = 'brushStroke';\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType, apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'doubleStroke', apply: false });\n } else {\n if (dragEnd) {\n interactionType = 'doubleStroke';\n // onDrag style\n context.applyInteractionStyle(completeSet, { interactionType: 'brushStroke', apply: false });\n }\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n // Apply style only on the hovered layer\n if (layerName === 'area') {\n if (dragEnd) {\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: false }, [layer]);\n mergedEnter.length &&\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]);\n }\n } else {\n // dragEnd style\n context.applyInteractionStyle(mergedExit, { interactionType, apply: false }, [layer]);\n if (!payload.dragEnd) {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]);\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]);\n }\n\n interactionType !== 'doubleStroke' &&\n context.applyInteractionStyle(mergedExit, { interactionType: 'doubleStroke', apply: false });\n context.applyInteractionStyle(mergedEnter, { interactionType, apply: true }, [layer]);\n }\n });\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n fadeOnBrush: fadeOnBrushFn,\n focus: (set, context) => {\n const { formattedSet } = set;\n const {\n entrySet,\n mergedEnter,\n mergedExit,\n completeSet\n } = formattedSet;\n const { firebolt } = context;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType: 'focus', apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'focusStroke', apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'commonDoubleStroke', apply: false });\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focusStroke', apply: false });\n context.applyInteractionStyle(entrySet, { interactionType: 'focusStroke', apply: true });\n\n const payload = firebolt.getPayload(BEHAVIOURS.HIGHLIGHT);\n const entryExitSet = firebolt.getEntryExitSet(BEHAVIOURS.HIGHLIGHT);\n const layers = firebolt.context.layers();\n\n if (payload.target && entryExitSet) {\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n if (layerName === 'area') {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]);\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false }, [layer]);\n }\n\n // get uids of only the currently highlighted point\n const actualPoint = layer.getUidsFromPayload(entryExitSet.mergedEnter, payload.target);\n\n const commonSet = intersect(mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n\n if (commonSet.length) {\n context.applyInteractionStyle({ uids: commonSet },\n { interactionType: 'commonDoubleStroke', apply: true },\n [layer]\n );\n } else {\n context.applyInteractionStyle({ uids: mergedExit.uids },\n { interactionType: 'commonDoubleStroke', apply: false },\n [layer]\n );\n }\n });\n }\n }\n },\n highlight: (set, context, payload, excludeSetIds) => {\n const { selectionSet } = set;\n\n if (!selectionSet.mergedEnter.length && !selectionSet.mergedExit.length) {\n // Remove focusStroke on selected but currently non-highlighted set\n context.applyInteractionStyle(selectionSet.completeSet, { interactionType: 'highlight', apply: false });\n context.applyInteractionStyle(selectionSet.completeSet,\n { interactionType: 'commonDoubleStroke', apply: false }\n );\n } else {\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n if (payload.target) {\n // get uids of only the currently highlighted point\n const actualPoint = layer.getUidsFromPayload(selectionSet.mergedEnter, payload.target);\n // get uids of only the currently highlighted point excluding the excludeSet ids\n const currentHighlightedSet = getFormattedSet(actualPoint, excludeSetIds);\n\n // Apply highlight on the currently hovered point\n context.applyInteractionStyle(currentHighlightedSet,\n { interactionType: 'highlight', apply: true },\n [layer]\n );\n\n context.applyInteractionStyle(selectionSet.mergedExit,\n { interactionType: 'highlight', apply: false },\n [layer]\n );\n\n const selectEntrySet = context.firebolt.getEntryExitSet('select');\n if (selectEntrySet) {\n const commonSet = intersect(selectEntrySet.mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n const diffSet = difference(selectEntrySet.mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n\n if (commonSet.length) {\n context.applyInteractionStyle({ uids: commonSet },\n { interactionType: 'commonDoubleStroke', apply: true },\n [layer]\n );\n }\n context.applyInteractionStyle({ uids: diffSet },\n { interactionType: 'commonDoubleStroke', apply: false },\n [layer]\n );\n }\n }\n });\n }\n },\n pseudoFocus: (set, context) => {\n const { formattedSet } = set;\n const {\n mergedEnter\n } = formattedSet;\n\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false });\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\nimport { getFormattedSet } from './helper';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return HIGHLIGHTER;\n }\n\n static target () {\n return 'visual-unit';\n }\n\n getExcludeSetIds (excludeSet = []) {\n // Get excludeSetIds if excludeSet is a function\n if (excludeSet instanceof Function) {\n return excludeSet(this.firebolt.getEntryExitSet);\n }\n // Get excludeSetIds if excludeSet is not a function\n return excludeSet.reduce((acc, behaviour) => {\n const selectedPoints = this.firebolt.getEntryExitSet(behaviour) || {};\n const selectedPointsIds = (selectedPoints.mergedEnter || {}).uids;\n if (selectedPointsIds) acc.push(...selectedPointsIds);\n return acc;\n }, []);\n }\n\n apply (selectionSet, payload, options = {}) {\n const currentStrategy = this._strategies[options.strategy || this._strategy];\n const excludeSetIds = this.getExcludeSetIds(options.excludeSet);\n\n // Get all sets except the excludeSet points\n const formattedSet = {\n ...selectionSet,\n completeSet: getFormattedSet(selectionSet.completeSet, excludeSetIds),\n entrySet: getFormattedSet(selectionSet.entrySet[1], excludeSetIds),\n exitSet: getFormattedSet(selectionSet.exitSet[1], excludeSetIds),\n mergedEnter: getFormattedSet(selectionSet.mergedEnter, excludeSetIds),\n mergedExit: getFormattedSet(selectionSet.mergedExit, excludeSetIds)\n };\n\n const totalSet = { selectionSet, formattedSet };\n\n currentStrategy(totalSet, this, payload, excludeSetIds);\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel, getObjProp, mergeRecursive, ReservedFields, dmMultipleSelection } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: {\n field: getObjProp(depLayerEncoding, 'color', 'field'),\n value: getObjProp(depLayerEncoding, 'color', 'value')\n },\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: () => sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const layerOwner = layerDef.def.name;\n const name = `${layerOwner}-${commonName}`;\n const defaultClassName = `${sideEffect.constructor.defaultConfig().className}`;\n\n layers.push({\n name: `${name}-upper`,\n mark: 'point',\n groupId: `${commonName}-upper`,\n className: `${defaultClassName}-upper`,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n\n if (mark === 'area') {\n layers.push({\n name: `${name}-lower`,\n mark: 'point',\n groupId: `${commonName}-lower`,\n className: `${defaultClassName}-lower`,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return ANCHORS;\n }\n\n addAnchorLayers () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 70;\n }\n\n // Default offset by which anchor size is changed\n getAnchorSizeOnInteraction ({ dragEnd }) {\n if (dragEnd) {\n return 40;\n }\n return 0;\n }\n\n apply (selectionSet, payload) {\n const dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n const context = this.firebolt.context;\n const upperAnchors = context.layers().filter(layer => layer.config().groupId === `${formalName}-upper`);\n const lowerAnchors = context.layers().filter(layer => layer.config().groupId === `${formalName}-lower`);\n\n const { target, action } = payload;\n let targetObj = null;\n if (target) {\n targetObj = target[1].reduce((acc, v, i) => {\n const field = target[0][i];\n if (field !== ReservedFields.MEASURE_NAMES) {\n acc[field] = v;\n }\n return acc;\n }, {});\n }\n\n [...upperAnchors, ...lowerAnchors].forEach((layer, index) => {\n const layerConfig = layer.config();\n const linkedLayer = context.getLayerByName(layerConfig.owner);\n const linkedLayerName = linkedLayer.constructor.formalName();\n const groupId = layerConfig.groupId;\n const isUpperAnchor = groupId === `${formalName}-upper`;\n let transformedData = [];\n let schema = [];\n\n [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel, index);\n\n // Render both upper and lower anchors for area plot if hovered over an anchor\n if (linkedLayerName === 'area' && target && action === 'highlight') {\n const filterFn = dmMultipleSelection(target, dataModel);\n const dmFromPayload = dataModel.select(filterFn, {});\n\n if (!isUpperAnchor) {\n [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dmFromPayload, index);\n }\n }\n\n const transformedDataModel = new DataModel(transformedData, schema);\n const anchorSizeConfig = {\n encoding: {\n size: {\n value: () => this.defaultSizeValue() + this.getAnchorSizeOnInteraction(payload)\n },\n 'stroke-width': {\n value: this.getAnchorStroke(payload, targetObj)\n }\n }\n };\n const newConfig = mergeRecursive(layerConfig, anchorSizeConfig);\n\n layer\n .data(transformedDataModel)\n .config(newConfig);\n\n return this;\n });\n }\n\n getAnchorStroke (payload, targetObj) {\n return (d) => {\n const dataObj = d.data.dataObj;\n const matchingData = targetObj ? Object.keys(targetObj).every((key) => {\n const val = dataObj[key];\n return val === targetObj[key];\n }) : false;\n return matchingData ? '1px' : '0px';\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return PERSISTENT_ANCHORS;\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n setAnchorLayerStyle (layers) {\n const anchorLayers = layers.filter(l => l.config().groupId === PERSISTENT_ANCHORS);\n anchorLayers.forEach((anchor) => {\n // Execute focusStroke interaction of anchor point layer\n const ids = anchor.data().getUids();\n const layerName = this.constructor.formalName();\n const defaultInteractionLayerEncoding = anchor.config().encoding.interaction;\n anchor.applyInteractionStyle(defaultInteractionLayerEncoding[layerName], ids, { apply: true });\n });\n }\n\n // offset value by which anchor size is changed\n // Applied only on select interaction\n getAnchorSizeonInteraction () {\n return 50;\n }\n\n getAnchorStroke () {\n return '2px';\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return BRUSH_ANCHORS;\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n setAnchorLayerStyle (layers) {\n const anchorLayers = layers.filter(l => l.config().groupId === BRUSH_ANCHORS);\n anchorLayers.forEach((anchor) => {\n // Execute focusStroke interaction of anchor point layer\n const ids = anchor.data().getUids();\n const layerName = this.constructor.formalName();\n const defaultInteractionLayerEncoding = anchor.config().encoding.interaction;\n anchor.applyInteractionStyle(defaultInteractionLayerEncoding[layerName], ids, { apply: true });\n });\n }\n\n getAnchorStroke (payload) {\n return payload.dragEnd ? '2px' : '1px';\n }\n}\n","import SurrogateSideEffect from '../surrogate';\nimport { AXIS_LABEL_HIGHLIGHTER } from '../../enums/side-effects';\nimport './styles.scss';\n\nexport default class AxisLabelHighLighter extends SurrogateSideEffect {\n static formalName () {\n return AXIS_LABEL_HIGHLIGHTER;\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet) {\n const context = this.firebolt.context;\n const dataModel = selectionSet && selectionSet.mergedEnter.model;\n const selectedData = dataModel && dataModel.getData().data;\n const selectedDataValues = selectedData && selectedData.length ? selectedData[0] : [];\n const { x = [], y = [] } = context.axes();\n [...x, ...y].forEach((axis) => {\n const fieldMeta = dataModel ? dataModel.getFieldsConfig()[axis.config().field] : undefined;\n const selData = selectedDataValues[fieldMeta && fieldMeta.index !== undefined\n ? fieldMeta.index : undefined];\n const { selectionSet: selectedElements, rejectionSet } = axis.getTicksBasedOnData(selData);\n selectedElements && selectedElements.selectAll('text').classed('muze-axis-ticks-highlight', true);\n rejectionSet.selectAll('text').classed('muze-axis-ticks-highlight', false);\n });\n }\n}\n","import { intersect } from 'muze-utils';\nimport * as BEHAVIOURS from './enums/behaviours';\nimport * as SIDE_EFFECTS from './enums/side-effects';\nimport { unionSets } from './helper';\n\nconst nullDataTooltipMap = {\n area: true,\n arc: false,\n line: true,\n text: false,\n point: false,\n bar: false,\n tick: false\n};\n\nconst applySideEffectOnEmptyTarget = (sideEffect, { target }) => {\n const layers = sideEffect.layers();\n const showTooltipOnEmptyTarget = layers.some((l) => {\n const layerName = l.constructor.formalName();\n return nullDataTooltipMap[layerName];\n });\n return showTooltipOnEmptyTarget || target;\n};\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fadeOnBrush'\n }\n }, 'brush-anchors'],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active) {\n return null;\n }\n if (applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return selectionSet;\n }\n return null;\n }\n }\n }, 'anchors', {\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary',\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active === true ||\n !applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return null;\n }\n const selectEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.SELECT);\n const brushEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.BRUSH);\n if (selectEntrySet || brushEntrySet) {\n const unionedSet = unionSets(sideEffect.firebolt, [BEHAVIOURS.SELECT, BEHAVIOURS.BRUSH]);\n const { uids } = unionedSet.mergedEnter;\n const { uids: highlightUids } = selectionSet.mergedEnter;\n\n if (intersect(uids, highlightUids, [id => id[0], id => id[0]]).length) {\n return unionedSet;\n }\n }\n\n return null;\n }\n }\n }, {\n name: SIDE_EFFECTS.AXIS_LABEL_HIGHLIGHTER,\n options: {\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active) {\n return null;\n }\n if (applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return selectionSet;\n }\n return null;\n }\n }\n }],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors', {\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary'\n }\n }],\n pseudoSelect: [{\n name: 'highlighter',\n options: {\n strategy: 'pseudoFocus'\n }\n }]\n};\n","import { componentRegistry } from 'muze-utils';\nimport * as behaviours from './actions/behavioural';\nimport { physicalActions } from './actions/physical';\nimport * as sideEffects from './side-effects';\n\nconst convertToObj = (comps) => {\n const obj = {};\n\n for (const key in comps) {\n const val = comps[key];\n\n obj[val.formalName()] = val;\n }\n return obj;\n};\n\nexport const registry = {\n behaviours: componentRegistry(convertToObj(behaviours)),\n physicalActions: componentRegistry(physicalActions),\n sideEffects: componentRegistry(convertToObj(sideEffects))\n};\n","import { ReservedFields, FieldType, difference, isSimpleObject } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n const dataObj = selectionDataModel.getData();\n const { includeMeasures = true, sourceIdentifiers } = propConfig;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const selectionDataFields = selectionDataModel.getFieldspace().fieldsObj();\n let criteria = null;\n if (sourceIdentifiers !== null) {\n criteria = schema.reduce((ranges, obj) => {\n const field = obj.name;\n const fieldObj = fieldMap[field];\n\n if (!fieldObj) {\n return ranges;\n }\n\n ranges[field] = selectionDataFields[field].domain();\n return ranges;\n }, {});\n const measureNamesIdx = sourceIdentifiers.identifiers[0]\n .findIndex(field => field === ReservedFields.MEASURE_NAMES);\n if (measureNamesIdx !== undefined && includeMeasures) {\n const measureNames = sourceIdentifiers.identifiers.slice(1, sourceIdentifiers.identifiers.length)\n .map(d => d[measureNamesIdx]);\n criteria[ReservedFields.MEASURE_NAMES] = measureNames.map(d => [d]);\n }\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig, facetByFields) => {\n const propPayload = propConfig.payload;\n let payload;\n if (isSimpleObject(propPayload.criteria)) {\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n } else {\n payload = payloadGenerator.__default(instance, selectionDataModel, propConfig, facetByFields);\n }\n\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig, facetByFields = []) => {\n const { payload: propPayload, sourceIdentifiers, excludeSelectedMeasures } = propConfig;\n const dataObj = selectionDataModel.getData({ withUid: true });\n const payload = Object.assign({}, propPayload);\n const data = dataObj.data;\n const fieldsConfig = Object.assign({}, selectionDataModel.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(selectionDataModel.getFieldsConfig()).length,\n def: {\n type: FieldType.DIMENSION\n }\n }\n });\n const selectionSet = instance._selectionSet[propConfig.action];\n const selectionSetFields = selectionSet._fields;\n if (sourceIdentifiers) {\n const [facetFields = [], facetValues = []] = facetByFields;\n const facetIndices = facetFields.reduce((acc, v, i) => {\n acc[v] = i;\n return acc;\n }, {});\n const identifierIdxMap = sourceIdentifiers.fields.reduce((acc, v, i) => {\n acc[v.name] = i;\n return acc;\n }, {});\n const identifiers = sourceIdentifiers.identifiers.slice(1, sourceIdentifiers.identifiers.length);\n const sourceIdentifierFields = sourceIdentifiers.fields.filter(d => d.name in fieldsConfig ||\n d.name in facetIndices || d.name === ReservedFields.ROW_ID);\n\n const identifierMap = identifiers.reduce((acc, v) => {\n const key = sourceIdentifierFields.map(d => v[identifierIdxMap[d.name]]);\n const measureNamesIdx = identifierIdxMap[ReservedFields.MEASURE_NAMES];\n if (measureNamesIdx) {\n !acc[key] && (acc[key] = []);\n acc[key].push([v[measureNamesIdx]]);\n }\n return acc;\n }, {});\n\n const dataArr = [];\n for (let i = 0, len = data.length; i < len; i++) {\n const row = data[i];\n const dims = [];\n selectionSetFields.forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n const idx = fieldsConfig[field].index;\n dims.push(row[idx]);\n }\n });\n\n const vals = `${sourceIdentifierFields.map((d) => {\n if (d.name in fieldsConfig) {\n return row[fieldsConfig[d.name].index];\n } else if (d.name in facetIndices) {\n return facetValues[facetIndices[d.name]];\n }\n return null;\n }).filter(d => d !== null)}`;\n\n if (vals in identifierMap) {\n const measures = identifierMap[vals];\n const allMeasures = instance._metaData.dimensionsMap[dims];\n\n if (excludeSelectedMeasures) {\n const fn = v => `${v}`;\n const diffMeasures = difference(allMeasures, measures, [fn, fn]);\n diffMeasures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n } else {\n measures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n }\n } else {\n let measures = instance._metaData.dimensionsMap[dims];\n measures = measures && measures.length ? measures : [[]];\n measures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n }\n }\n\n payload.criteria = [[...selectionSetFields, ReservedFields.MEASURE_NAMES], ...dataArr];\n } else {\n payload.criteria = null;\n }\n\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : [];\n return payload;\n },\n pseudoSelect: (instance, selectionDataModel, propConfig, facetByFields = []) =>\n payloadGenerator.__default(instance, selectionDataModel, Object.assign({}, {\n excludeSelectedMeasures: true\n }, propConfig), facetByFields)\n};\n\nexport const getPayloadGenerator = (action, criteria) => {\n if (criteria instanceof Array || !payloadGenerator[action]) {\n return payloadGenerator.__default;\n }\n\n return payloadGenerator[action];\n};\n","import { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { FieldType, ReservedFields, defaultValue, isSimpleObject, getObjProp } from 'muze-utils';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const isSideEffectEnabled = (firebolt, { se, propagationInf }) => {\n const sideEffectPolicies = firebolt._sideEffectPolicies;\n const sideEffectCheckers = Object.values(sideEffectPolicies[se.name || se] || {});\n const { sourceIdentifiers, data: propagationData } = propagationInf;\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, firebolt, {\n sourceIdentifiers,\n propagationData\n })) : true;\n};\n\nconst getUniqueKeys = (data, dimensions, { layers, uids, keys = {}, dimensionsMap = {} }) => {\n data.forEach((row, i) => {\n const key = dimensions.length ? dimensions.map(d => row[d.index]) : [uids[i]];\n\n layers.forEach((layer) => {\n const measureNames = Object.keys(layer.data().getFieldspace().getMeasure());\n const mKey = `${[key, ...measureNames]}`;\n keys[mKey] = defaultValue(keys[mKey], {});\n keys[mKey] = {\n dims: key,\n measureNames,\n uid: uids[i]\n };\n dimensionsMap[key] = defaultValue(dimensionsMap[key], []);\n dimensionsMap[key].push(measureNames);\n });\n });\n\n return {\n keys,\n dimensionsMap\n };\n};\n\nexport const prepareSelectionSetMap = ({ data, uids, dimensions }, layers, maps = {}) => {\n const obj = getUniqueKeys(data, dimensions, {\n layers,\n uids,\n keys: maps.keys,\n dimensionsMap: maps.dimensionsMap\n });\n\n return {\n keys: obj.keys,\n dimensionsMap: obj.dimensionsMap\n };\n};\n\nexport const prepareSelectionSetData = (dataModel, unit) => {\n const { data, uids } = dataModel.getData();\n const dimensions = Object.values(dataModel.getFieldsConfig()).filter(d => d.def.type === FieldType.DIMENSION);\n const layers = unit.layers();\n const { keys, dimensionsMap } = prepareSelectionSetMap({ data, uids, dimensions }, layers);\n const dimensionFields = dimensions.length ? dimensions.map(d => d.def.name) : [ReservedFields.ROW_ID];\n const hasMeasures = Object.keys(dataModel.getFieldspace().getMeasure()).length;\n const measureName = hasMeasures ? [ReservedFields.MEASURE_NAMES] : [];\n\n return {\n keys,\n dimensions: dimensionFields,\n dimensionsMap,\n allFields: [...dimensionFields, ...measureName]\n };\n};\n\nexport const sanitizePayloadCriteria = (data, propFields, { dm, dimensionsMap, dimsMapGetter }) => {\n const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(dm.getFieldsConfig()).length,\n def: {\n name: ReservedFields.ROW_ID,\n type: FieldType.DIMENSION\n }\n }\n });\n if (data === null) {\n return null;\n }\n\n if (isSimpleObject(data)) {\n return Object.keys(data).reduce((acc, v) => {\n if (v in fieldsConfig || v === ReservedFields.MEASURE_NAMES) {\n acc[v] = data[v];\n }\n return acc;\n }, {});\n }\n\n const criteriaFields = data[0];\n const fields = criteriaFields.length ? criteriaFields.map((d, i) => ({\n name: d,\n index: i\n })) : [];\n\n const fieldIndexMap = fields.reduce((acc, v, i) => {\n acc[v.name] = i;\n return acc;\n }, {});\n\n propFields = propFields || fields.map(d => d.name);\n const dataWithFacets = [\n propFields\n ];\n\n const measureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES);\n const propDims = fields.filter(d => d.name in fieldsConfig).map(d => d.name);\n\n const dimsMap = dimsMapGetter(propDims, fieldsConfig);\n\n for (let i = 1, len = data.length; i < len; i++) {\n const row = data[i];\n const dimKey = propDims.map(field => row[fieldIndexMap[field]]);\n const origRow = dimsMap[dimKey];\n if (origRow) {\n origRow.forEach((rowVal) => {\n const newRowVal = [];\n propFields.forEach((field) => {\n if (field in fieldIndexMap) {\n const idx = fieldIndexMap[field];\n newRowVal.push(row[idx]);\n } else {\n const idx = getObjProp(fieldsConfig[field], 'index');\n idx !== undefined && newRowVal.push(rowVal[idx]);\n }\n });\n if (!measureNameField) {\n const measuresArr = dimensionsMap[newRowVal].length ? dimensionsMap[newRowVal] : [[]];\n measuresArr.forEach((measures) => {\n dataWithFacets.push([...newRowVal, ...measures]);\n });\n } else {\n dataWithFacets.push(newRowVal);\n }\n });\n }\n }\n return dataWithFacets;\n};\n\nexport const dispatchSecondaryActions = (firebolt, { action, propagationData, config, propagationInf }) => {\n const context = firebolt.context;\n\n const secondaryActions = firebolt._connectedBehaviours[action] || [];\n\n secondaryActions.forEach((secAction) => {\n const payloadGeneratorFn = firebolt.getPayloadGeneratorFor(secAction);\n const generatedPayload = payloadGeneratorFn(firebolt, propagationData, config,\n context.facetByFields());\n firebolt.dispatchBehaviour(secAction, generatedPayload, propagationInf);\n });\n};\n\nexport const createMapByDimensions = (context, dm) => {\n let cacheMap = context._cacheMap = {};\n return (propDims, fieldsConfig) => {\n cacheMap = context._cacheMap;\n if (!cacheMap[propDims]) {\n cacheMap[propDims] = dm.getData({ withUid: true }).data.reduce((acc, row) => {\n const key = propDims.map(d => row[fieldsConfig[d].index]);\n acc[key] || (acc[key] = []);\n acc[key].push(row);\n return acc;\n }, {});\n }\n return cacheMap[propDims];\n };\n};\n","import { FieldType, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { payloadGenerator } from './payload-generator';\nimport {\n isSideEffectEnabled,\n sanitizePayloadCriteria,\n dispatchSecondaryActions,\n createMapByDimensions\n} from './helper';\n\nconst sideEffectPolicy = (propPayload, firebolt, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fields = sourceIdentifiers.fields;\n const sourceIdentifierFields = Object.keys(fields).filter(field =>\n field.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData.getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === firebolt.sourceCanvas();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n const {\n TOOLTIP,\n HIGHLIGHTER,\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS\n } = SIDE_EFFECTS;\n this._handlers = {};\n this._propagationIdentifiers = {};\n this._connectedBehaviours = {};\n this.payloadGenerators(payloadGenerator);\n this.sideEffects().tooltip.disable();\n const disabledSideEffects = [TOOLTIP, HIGHLIGHTER, ANCHORS, BRUSH_ANCHORS, PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n return isSideEffectEnabled(this, { se, propagationInf });\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propInf) {\n return propInf.propagate === false && propInf.applySideEffect !== false;\n }\n\n sanitizePayload (payload) {\n const { criteria } = payload;\n const { allFields: fields, dimensionsMap } = this._metaData;\n\n return Object.assign({}, payload,\n {\n criteria: sanitizePayloadCriteria(criteria, fields, {\n dm: this.data(),\n dimensionsMap,\n dimsMapGetter: this._dimsMapGetter\n })\n });\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const propagationData = data;\n\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = this.getPayloadGeneratorFor(action);\n const payload = payloadFn(this, propagationData, config, context.facetByFields());\n const behaviourPolicies = this._behaviourPolicies;\n const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, this, {\n sourceIdentifiers,\n propagationData\n }));\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data: propagationData,\n propPayload,\n sourceIdentifiers,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n\n this.dispatchBehaviour(action, payload, propagationInf);\n\n dispatchSecondaryActions(this, {\n action,\n propagationInf,\n propagationData,\n config\n });\n }\n };\n }\n\n target () {\n return 'visual-unit';\n }\n\n createSelectionSet (...params) {\n super.createSelectionSet(...params);\n\n this._dimsMapGetter = createMapByDimensions(this, this.data());\n\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n\n propagationIdentifiers (action, identifiers) {\n if (identifiers) {\n this._propagationIdentifiers = identifiers;\n }\n return this._propagationIdentifiers[action];\n }\n\n registerPhysicalActionHandlers () {\n return this;\n }\n\n id () {\n return this.context.id();\n }\n\n getPropagationSource () {\n return this.context.cachedData()[0];\n }\n\n sourceCanvas () {\n return this.context.parentAlias();\n }\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n","import { VolatileBehaviour } from '@chartshq/muze-firebolt';\nimport { BRUSH } from '../../enums/behaviours';\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class UnitBrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BRUSH;\n }\n\n dispatch (...params) {\n this.active = params[0].dragging;\n this.start = params[0].dragStart;\n return super.dispatch(...params);\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const PSEUDO_SELECT = 'pseudoSelect';\n\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === GRID_BAND ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === GRID_BAND && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_BAND) {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\n\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import {\n STATE_NAMESPACES,\n temporalFields,\n getObjProp,\n defaultValue,\n isSimpleObject\n} from 'muze-utils';\nimport { FRAGMENTED } from '@chartshq/muze-firebolt/src/enums/constants';\nimport { TOOLTIP, FRAGMENTED_TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\nimport { prepareSelectionSetData } from './firebolt/helper';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n const { keys, dimensionsMap, dimensions, allFields } = prepareSelectionSetData(context.data(), context);\n firebolt._metaData = {\n dimensionsMap,\n dimensions,\n allFields\n };\n firebolt.createSelectionSet({ keys, fields: dimensions });\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n const firebolt = context.firebolt();\n const { interaction } = config;\n firebolt.config(interaction);\n const { mode } = interaction.tooltip;\n if (mode === FRAGMENTED) {\n const map = firebolt._behaviourEffectMap;\n for (const key in map) {\n const sideEffects = map[key];\n\n map[key] = sideEffects.map((val) => {\n let name = val;\n if (isSimpleObject(val)) {\n name = val.name;\n }\n if (name === TOOLTIP) {\n return FRAGMENTED_TOOLTIP;\n }\n return val;\n });\n }\n }\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\n }\n }\n];\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {\n onset: (context, facets) => {\n const facetKeys = facets[0].reduce((acc, v, i) => {\n acc[`${v}`] = facets[1][i];\n return acc;\n }, {});\n context.facetFieldsMap(facetKeys);\n }\n },\n facetFieldsMap: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n minOuterRadius: 10,\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef, getValuesMap } from './helper';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null,\n meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n context._cachedValuesMap = ((model) => {\n let valuesMap = null;\n return () => {\n if (valuesMap) {\n return valuesMap;\n }\n valuesMap = getValuesMap(model, context);\n return valuesMap;\n };\n })(data);\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { VolatileBehaviour } from '@chartshq/muze-firebolt';\nimport { PSEUDO_SELECT } from '../../enums/behaviours';\n\nexport default class PseudoSelectBehaviour extends VolatileBehaviour {\n static formalName () {\n return PSEUDO_SELECT;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport UnitBrushBehaviour from './firebolt/behaviours/brush';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange,\n unionDomainFromLayers,\n createRTree\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\nimport { REACTIVE_PROPS } from './enums';\nimport { PSEUDO_SELECT } from './enums/behaviours';\nimport PseudoSelectBehaviour from './firebolt/behaviours/pseudo-select';\n\nconst FORMAL_NAME = 'VisualUnit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, this.constructor.getterSetters());\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((this.localOptions())).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getterSetters () {\n return PROPS;\n }\n\n static localOptions () {\n return localOptions;\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: (context) => {\n const domain = context.calculateDomainFromData();\n context.dataDomain(domain);\n }\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n context._rtree = createRTree(context);\n\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, this.constructor.localOptions(), store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n this.createFireboltInstance();\n\n return this;\n }\n return this._store;\n }\n\n createFireboltInstance () {\n const { interactions } = this.registry();\n const { fireboltDeps } = this._dependencies;\n const Cls = this.getFireboltCls();\n\n this.firebolt(new Cls(this, {\n physical: Object.assign({}, interactions.physicalActions.get(), fireboltDeps.physicalActions),\n behavioural: Object.assign({}, interactions.behaviours.get(), {\n [UnitBrushBehaviour.formalName()]: UnitBrushBehaviour,\n [PSEUDO_SELECT]: PseudoSelectBehaviour\n }, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: this.getActionBehaviourMap()\n }, Object.assign({}, interactions.sideEffects.get(), fireboltDeps.sideEffects), this.getBehaviourEffectMap()));\n\n return this;\n }\n\n getFireboltCls () {\n return UnitFireBolt;\n }\n\n getBehaviourEffectMap () {\n return behaviourEffectMap;\n }\n\n getActionBehaviourMap () {\n return actionBehaviourMap;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n this.createRootContainers(container);\n\n setAxisRange(this);\n this.renderLayers();\n const node = this._rootSvg.node();\n const { sideEffectClassName, classPrefix } = this.config();\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n createRootContainers (container) {\n const config = this.config();\n const { className, defClassName } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n return this;\n }\n\n renderLayers () {\n const width = this.width();\n const height = this.height();\n const node = this._rootSvg.node();\n\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: layers, action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel, hasBarLayer) {\n if (!identifiers) return null;\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode, hasBarLayer);\n }\n\n /**\n * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes(),\n retinalFields: this.retinalFields(),\n layers: this.layers(),\n timeDiffs: this.timeDiffsByField()\n };\n }\n\n dataDomain (...params) {\n const { namespace } = this.metaInf();\n const store = this.store();\n const prop = `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${REACTIVE_PROPS.DOMAIN}`;\n if (params.length) {\n const domain = params[0];\n store.commit(prop, domain, namespace);\n }\n return store.get(prop, namespace);\n }\n\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n dimValue[0].push(ReservedFields.MEASURE_NAMES);\n pointObj.id = dimValue;\n const layers = this.layers();\n const pointInf = this.getMarkInfFromLayers(x, y, { ...config, dimValue });\n layers.forEach((layer) => {\n const measures = layer.data().getSchema()\n .filter(d => d.type === FieldType.MEASURE).map(d => d.name);\n for (let i = 1, len = dimValue.length; i < len; i++) {\n dimValue[i].push(measures.join());\n }\n });\n pointObj.target = pointInf && pointInf.id ? pointInf.id : null;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, { ...config, dimValue }) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n calculateDomainFromData () {\n const domain = unionDomainFromLayers(this.layers(), this.fields(), this._layerAxisIndex,\n this.data().getFieldsConfig());\n return domain;\n }\n\n getValueFromId (id, fields, fieldsConfig) {\n const { idValuesMap } = this._cachedValuesMap();\n const row = idValuesMap[id];\n const filteredRow = fields.map(d => (d === ReservedFields.ROW_ID ? id : row[fieldsConfig[d].index]));\n\n return filteredRow;\n }\n\n getRangeFromIdentifiers ({ criteria, fields }) {\n return fields.reduce((acc, v) => {\n acc[v] = criteria[v];\n return acc;\n }, {});\n }\n\n getRangeFromPositions ({ startPos, endPos }) {\n const { x, y } = this.fields();\n const axes = this.axes();\n const xField = x[0];\n const yField = y[0];\n const xFieldType = x[0].type();\n const yFieldType = y[0].type();\n const dimensions = Object.keys(this.data().getFieldspace().getDimension());\n\n if (xFieldType === FieldType.MEASURE && yFieldType === FieldType.MEASURE) {\n const dom = {\n x: axes.x[0].invertExtent(startPos.x, endPos.x).sort((a, b) => a - b),\n y: axes.y[0].invertExtent(startPos.y, endPos.y).sort((a, b) => a - b)\n };\n const range = {};\n if (`${xField}` === `${yField}`) {\n const xdom = dom.x;\n const ydom = dom.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n range[xField] = [];\n } else {\n range[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n } else {\n range[xField] = dom.x;\n range[yField] = dom.y;\n }\n return range;\n } else if (xFieldType === FieldType.DIMENSION || yFieldType === FieldType.DIMENSION) {\n const points = this._rtree.search({\n minX: startPos.x,\n minY: startPos.y,\n maxX: endPos.x,\n maxY: endPos.y\n });\n\n const criteria = [[]];\n dimensions.forEach((field) => {\n criteria[0].push(`${field}`);\n });\n\n points.forEach((point) => {\n const data = point.data;\n const vals = [];\n dimensions.forEach((field) => {\n vals.push(data[field]);\n });\n criteria.push(vals);\n });\n return criteria;\n }\n return null;\n }\n}\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n *\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n *\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\nexport const BORDER_WIDTH = {\n default: 2,\n facet: 1\n};\n","import {\n DARK,\n NONE,\n LEFT,\n RIGHT,\n NORMAL,\n TOP,\n DARKER,\n BOTTOM\n} from '../enums/constants';\n\nconst handleBlankCell = (data) => {\n data.config().externalClassname.push(`${NONE}-${LEFT}`);\n data.config().externalClassname.push(`${NONE}-${RIGHT}`);\n};\n\nexport const sanitiseHeaderMatrix = (matrices, header) => {\n if (header) {\n for (let i = 0; i < matrices.length; i++) {\n if (i !== 0) {\n matrices[i].config({\n externalClassname: [`${DARK}`]\n });\n } else {\n matrices[i].config({\n externalClassname: [`${NONE}-${LEFT}`, `${DARK}`]\n });\n }\n }\n } else {\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [`${DARK}`]\n });\n }\n }\n }\n};\n\nexport const sanitiseGeomMatrix = (matrices, arr = {}) => {\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [`${NORMAL}`]\n });\n\n if (i === 0) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${TOP}`);\n } else if (i === matrices.length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n }\n\n if (j === matrices[i].length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARK}-${RIGHT}`);\n }\n\n if (arr[i]) {\n matrices[i - 1][j].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n }\n }\n};\n\nexport const sanitiseFacetValues = (matrices, type, blankCell) => {\n const normal = type === `${RIGHT}` ? `${DARK}` : `${NORMAL}`;\n const length = matrices.length;\n let latestSource = matrices[0][0].source();\n const lastSource = matrices[matrices.length - 1][0].source();\n const arr = {};\n\n // initialise the classname\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [normal]\n });\n }\n\n // seperate wrt the corner most facet\n if (matrices[i][0].source() !== latestSource) {\n arr[i] = i;\n latestSource = matrices[i][0].source();\n }\n }\n\n // add custom classname\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n if (j === 0) {\n matrices[i][0].config().externalClassname.push(`${NONE}-${type}`);\n if (matrices[i][j].source() === lastSource) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n } else {\n matrices[i][0].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n if (matrices[i][j] instanceof blankCell) {\n matrices[i][j].config().externalClassname.push(`${NONE}-${TOP}`);\n matrices[i][j].config().externalClassname.push(`${NONE}-${BOTTOM}`);\n }\n } else if (j !== matrices[i].length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARK}-${type}`);\n }\n\n if (i === 0) {\n matrices[0][j].config().externalClassname.push(`${DARKER}-${TOP}`);\n } else if (i === length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n }\n\n if (arr[i]) {\n matrices[i - 1][j].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n\n if (matrices[i][j] instanceof blankCell) {\n handleBlankCell(matrices[i][j], blankCell);\n }\n }\n }\n return arr;\n};\n\nexport const sanitiseBorderMatrix = (matrices, blankCell) => {\n const { leftMatrix, rightMatrix, topMatrix, bottomMatrix } = matrices;\n let bottomBorderObj = {};\n if (rightMatrix.length) {\n bottomBorderObj = sanitiseFacetValues(rightMatrix, `${RIGHT}`, blankCell);\n }\n if (leftMatrix.length) {\n bottomBorderObj = sanitiseFacetValues(leftMatrix, `${LEFT}`, blankCell);\n }\n topMatrix.length && sanitiseHeaderMatrix(topMatrix);\n bottomMatrix.length && sanitiseHeaderMatrix(bottomMatrix);\n return bottomBorderObj;\n};\n","import { Store, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport { sanitiseHeaderMatrix } from './cell-border-applier';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, ...params) => `${axisName}-axis-${params.join('-')}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n *\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\nexport const hasOneField = (fields) => {\n let hasField = false;\n const keys = Object.keys(fields);\n hasField = keys.some(d => fields[d].length > 0);\n return hasField;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n *\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n labelManager\n }).source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n sanitiseHeaderMatrix(headers, true);\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n *\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.name() === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n *\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig) => {\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n const fields = [].concat(...encodingArr.map(enc => Object.values(enc).map(d => (typeof d === 'object' ?\n d.field : d))));\n return [...new Set(fields.filter(d => d))];\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n\n/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n facetNames.push(name);\n\n const facetSortConfig = sortConfig[name];\n\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n } else {\n sortInfo.push([name, null]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).getData({ sort: sortInfo }).data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","export const PROPS = {\n layers: {},\n data: {},\n globalConfig: {}\n};\n","import { ERROR_MSG, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom, getFieldsFromSuppliedLayers, hasOneField } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\nimport { PROPS } from './props';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n constructor () {\n generateGetterSetters(this, PROPS);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n *\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n\n getProjectionFields (layers) {\n return getFieldsFromSuppliedLayers(layers);\n }\n\n hasMandatoryFields (fields) {\n return hasOneField(fields);\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { DataModel, mergeRecursive } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\nimport { BORDER_WIDTH } from '../enums/defaults';\nimport { FACET } from '../enums/constants';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\nconst setDefaultConfigForFacet = (facetInfo, projectionInfo, config) => {\n let conf = {};\n\n if (facetInfo.allFacets.length || projectionInfo.indices.length > 1) {\n const { facetsUserConfig, border } = config;\n const { isBorderPresent, isGridLinePresent } = facetsUserConfig;\n const gridLinesShowLength = Object.keys(isGridLinePresent).length;\n let borderWidth = border.width;\n let gridLines = {};\n\n if (!isBorderPresent) {\n borderWidth = BORDER_WIDTH[FACET];\n }\n if (gridLinesShowLength <= 0) {\n gridLines = {\n x: {\n show: false\n }\n };\n }\n conf = {\n border: {\n width: borderWidth\n },\n gridLines\n };\n }\n return conf;\n};\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator Callback executed after datamodels are prepared after sel/proj\n* @return {Object} set of matrices with the corresponding row and column keys\n*/\nexport const getMatrixModel = (dataModel, fieldInfo, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const defaultConfig = setDefaultConfigForFacet(facetInfo, projectionInfo, globalConfig);\n globalConfig = mergeRecursive(globalConfig, defaultConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\nimport { sanitiseBorderMatrix, sanitiseGeomMatrix } from './cell-border-applier';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n *\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const sortedFields = config.sort;\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n // Sort datamodel if user has sorted a field\n const sortConfig = Object.keys(sortedFields).map(field => [field, sortedFields[field]]);\n if (sortConfig.length) {\n datamodel = datamodel.sort(sortConfig, { saveChild: true });\n }\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return `${e}-${id}`;\n }, '')).map((currObj, axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n (label) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facet,\n encoders,\n resolver\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj,\n colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n\n const fields = getFieldsFromSuppliedLayers(suppliedLayers).filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const allFields = extractFields(facetsAndProjections, fields);\n\n groupedModel = dataModel.project(allFields);\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const newFieldsConfig = groupedModel.getFieldsConfig();\n const dimensions = allFields.filter(field =>\n getObjProp(newFieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n resolver.transformedData(groupedModel);\n return groupedModel;\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (resolverConfig) => {\n let placeholderInfo = {};\n const {\n datamodel,\n encoders,\n resolver,\n globalConfig,\n selection,\n transform,\n componentRegistry,\n groupBy,\n labelManager,\n fieldMap,\n layerConfig,\n registry,\n normalizedRows,\n normalizedColumns,\n otherEncodings,\n facetsAndProjections,\n simpleEncoder,\n config\n } = resolverConfig;\n\n const { rowFacets, colFacets, colProjections, rowProjections } = facetsAndProjections;\n const isProjection = rowProjections.length > 0 || colProjections.length > 0;\n const isFacet = rowFacets.length > 0 || colFacets.length > 0;\n\n if (isFacet) {\n globalConfig.isFacet = true;\n }\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.cells.GeomCell),\n AxisCell: resolver.getCellDef(registry.cells.AxisCell),\n BlankCell: resolver.getCellDef(registry.cells.BlankCell),\n TextCell: resolver.getCellDef(registry.cells.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: simpleEncoder,\n newCacheMap,\n detailFields: config.detail,\n retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\n simpleEncoder.data(groupedModel);\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n if (isFacet || isProjection) {\n const arr = sanitiseBorderMatrix({\n leftMatrix: rows[0],\n rightMatrix: rows[1],\n topMatrix: columns[0],\n bottomMatrix: columns[1]\n }, registry.cells.BlankCell);\n valueMatrixInfo.matrix = sanitiseGeomMatrix(valueMatrixInfo.matrix, arr);\n }\n\n placeholderInfo = {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n return placeholderInfo;\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {},\n transformedData: {},\n store: {}\n};\n","import { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\nimport { RESOLVER_PROPS } from './resolver-props';\n\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n this._placeholderInfo = {};\n generateGetterSetters(this, this.constructor.getterSetters());\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n static getterSetters () {\n return RESOLVER_PROPS;\n }\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n optionalProjections (config, layerConfig, schema) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n const encoder = this.encoder();\n optionalProjections.push(...encoder.getProjectionFields(layerConfig, schema));\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry().cells;\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set(),\n radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias,\n coord\n } = config;\n const {\n layerRegistry,\n interactions\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n const { VisualUnit } = this.registry();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n interactions\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setRetinalAxisDomain (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.getRetinalAxes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n createRetinalAxes (fieldsConfig, config, encoders) {\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n\n this.axes(retinalAxes);\n\n this.updateVisualUnit(config);\n\n return this;\n }\n\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const {\n showHeaders,\n classPrefix\n } = config;\n const { TextCell, BlankCell } = this.registry().cells;\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager })\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n updateVisualUnit (retinalConfig) {\n const retinalAxes = this.getRetinalAxes();\n\n const { lifeCycleManager } = this.dependencies();\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(retinalConfig);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n getMatrices (resolverConfig) {\n this._placeholderInfo = computeMatrices(resolverConfig);\n\n return this._placeholderInfo;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","import { MeasureSubtype, DimensionSubtype, FieldType } from 'muze-utils';\n\nimport { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [FieldType.DIMENSION]: ScaleType.BAND,\n [DimensionSubtype.CATEGORICAL]: ScaleType.BAND,\n [DimensionSubtype.TEMPORAL]: ScaleType.TIME,\n [FieldType.MEASURE]: ScaleType.LINEAR,\n [MeasureSubtype.CONTINUOUS]: ScaleType.LINEAR,\n [DimensionSubtype.BINNED]: ScaleType.BAND\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return [\n [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n }\n });\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n *\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n *\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n\nexport const getSortingConfig = (context, currentFieldName, axesConfig) => {\n const config = context.config();\n const dataModel = context.data();\n\n let lastSortConfig = null;\n if (Object.keys(config.sort).length !== 0) {\n return config.sort[currentFieldName];\n }\n\n const operations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n\n while (lastSortConfig = operations.pop()) {\n if (lastSortConfig.op === 'sort') break;\n }\n if (lastSortConfig &&\n lastSortConfig.criteria.length &&\n lastSortConfig.criteria[0][0] === currentFieldName) {\n return lastSortConfig.criteria[0][1];\n }\n return axesConfig().defaultSort;\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig,\n getSortingConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const { resolver, facetFields, geomCell } = context;\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.dataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = getSortingConfig(context, currentFieldName, axes[0].config);\n if (sortingOrder && domains[axisType][key] instanceof Array) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n\n hasMandatoryFields (fields) {\n const { colProjections, rowProjections } = fields;\n const colFields = super.hasMandatoryFields({ colProjections });\n const rowFields = super.hasMandatoryFields({ rowProjections });\n return colFields && rowFields;\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.dataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.groupedModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: GROUP_BY_FUNCTIONS.SUM\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n hasMandatoryFields (fields) {\n const { optionalProjections } = fields;\n return super.hasMandatoryFields({ optionalProjections });\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n *\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n\n return axes;\n }\n}\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr || []);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n\n data () {\n\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps, InvalidAwareTypes } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\nimport { ROWS, COLUMNS, DATA } from '../enums/constants';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nconst hasValue = (val) => {\n let hasOneValue = false;\n for (let i = 0; i < val.length && !hasOneValue; i++) {\n for (let j = 0; j < val[i].length; j++) {\n if (!(val[i][j] instanceof InvalidAwareTypes)) {\n hasOneValue = true;\n break;\n }\n }\n }\n return hasOneValue;\n};\n\nexport const updateChecker = (context, props) => props.every((option) => {\n const val = context[option]();\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n case DATA:\n return val && !val.isEmpty() && hasValue(val.getData().data);\n\n default:\n return true;\n }\n});\n\nexport const initializeFields = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n // Get the resolver for the matrices\n const resolver = context.resolver();\n\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = context.createEncoderInstance();\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n\n return {\n rows,\n columns,\n color,\n datamodel,\n size,\n detail,\n layers,\n transform,\n config,\n shape,\n resolver,\n matrixConfig,\n retinalConfig,\n encoders,\n fields\n };\n};\n\nexport const createMatrices = (context, sanitizedConfig) => {\n const { groupConfig, resolverConfig } = sanitizedConfig;\n const {\n config,\n resolver,\n matrixConfig,\n encoders,\n retinalConfig,\n fields\n } = groupConfig;\n\n const placeholderInfo = resolver.getMatrices(resolverConfig);\n\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setRetinalAxisDomain(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n\n resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n\nexport const initializeResolverFields = (context, config) => {\n const {\n datamodel,\n encoders,\n resolver,\n componentRegistry\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig, datamodel.getSchema());\n const facetsAndProjections = resolver.getAllFields();\n const { simpleEncoder } = encoders;\n const shouldRender = simpleEncoder.hasMandatoryFields(facetsAndProjections);\n return {\n datamodel,\n encoders,\n resolver,\n globalConfig,\n selection,\n transform,\n componentRegistry,\n groupBy,\n labelManager,\n fieldMap,\n layerConfig,\n registry,\n normalizedRows,\n normalizedColumns,\n otherEncodings,\n facetsAndProjections,\n simpleEncoder,\n shouldRender,\n config\n };\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n const { VisualUnit, layerRegistry } = context.registry();\n const { base: BaseLayer } = layerRegistry;\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry({\n cells: value.cellRegistry,\n VisualUnit: value.VisualUnit\n });\n }\n return value;\n }\n },\n selection: {},\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup,\n getEncoder\n} from '../group-helper';\nimport {\n createUnitState,\n initializeGlobalState,\n setMatrixInstances,\n createMatrices,\n createLayerState,\n initializeResolverFields,\n initializeFields,\n updateChecker\n} from './helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y,\n ROWS,\n COLUMNS,\n DATA\n} from '../enums/constants';\n\n/**\n * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units.\n *\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n components,\n componentSubRegistry,\n interactions\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, this.constructor.getterSetters());\n generateGetterSetters(this, this.constructor.localOptions());\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.createMatrixResolver();\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layers.get(),\n cellRegistry: componentSubRegistry.cells.get(),\n VisualUnit: components.VisualUnit,\n interactions\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n static formalName () {\n return 'VisualGroup';\n }\n\n static localOptions () {\n return localOptions;\n }\n static getterSetters () {\n return PROPS;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\n */\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices (sanitizedConfig) {\n createMatrices(this, sanitizedConfig);\n }\n\n getMandatoryFields () {\n const updateProps = updateChecker(this, [ROWS, COLUMNS, DATA]);\n let sanitizedValue = {\n groupConfig: {},\n resolverConfig: {},\n shouldRender: false\n };\n if (updateProps) {\n const localFields = initializeFields(this);\n const {\n datamodel,\n encoders,\n resolver,\n matrixConfig\n } = localFields;\n const context = {\n datamodel,\n componentRegistry: this.registry(),\n encoders,\n resolver\n };\n const resolverFields = initializeResolverFields(context, matrixConfig);\n sanitizedValue = {\n groupConfig: localFields,\n resolverConfig: resolverFields,\n shouldRender: resolverFields.shouldRender\n };\n }\n return sanitizedValue;\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\n }\n\n createEncoderInstance () {\n const layers = this.layers();\n\n return getEncoder(layers);\n }\n\n createMatrixResolver () {\n this.resolver(new MatrixResolver(this._dependencies));\n\n return this;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt._propagationInf;\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n\n if (propagationInf.sourceId) {\n selectionSet.reset();\n selectionSet.add(addSet);\n } else {\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets(true);\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\nexport const Marker = 'marker';\n\n","import { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\n\nexport const propagate = (firebolt, action, identifiers) => {\n const context = firebolt.context;\n const data = context.metaData();\n\n const propPayload = {};\n propPayload.action = propagationBehaviourMap[action] || action;\n // @TODO: Change fade propagationSideEffect for area layer\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n\n const propConfig = {\n sourceId: firebolt.id(),\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : identifiers,\n isMutableAction,\n action: propPayload.action\n };\n\n data.propagate(identifiers, propConfig, true);\n};\n\nexport const payloadGenerator = {\n __default: (selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel.getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel.isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : [];\n return payload;\n },\n brush: (dm, propConfig) => {\n const { criteria } = propConfig;\n return {\n criteria: criteria ? criteria.range : criteria\n };\n }\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const MAXWIDTH = 'max-width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const VERTICAL_BUFFER = 10;\nexport const HORIZONTAL_BUFFER = 2;\nexport const DEFAULTICONSIZE = { // approximately the (size needed) * Math.PI value\n circle: 64,\n square: 45.8,\n default: 42.8\n};\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\nexport const DEFAULT = 'default';\n\nexport const POSITION_ALIGNMENT_MAP = {\n [LEFT]: VERTICAL,\n [RIGHT]: VERTICAL,\n [TOP]: HORIZONTAL,\n [BOTTOM]: HORIZONTAL\n};\n\nexport const OPPOSITE_POSITION = {\n [LEFT]: RIGHT,\n [RIGHT]: LEFT\n};\n\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate, payloadGenerator } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\nimport { HIGHLIGHT } from '../enums/behaviours';\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria;\n if (values instanceof Array) {\n values = values.slice(1, criteria.length);\n uniqueIds = [...new Set([].concat(...values))];\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const payloadFn = payloadGenerator[config.action] || payloadGenerator.__default;\n const payload = payloadFn(data, config);\n const { propagationSourceId } = config;\n const propagationInf = {\n propagate: false,\n data,\n sourceId: propagationSourceId\n };\n const isActionSourceSame = config.sourceId === this.id();\n if (!isActionSourceSame && config.action === HIGHLIGHT) {\n // @todo make it configurable\n this.dispatchBehaviour(HIGHLIGHT, payload, propagationInf);\n }\n };\n }\n\n data () {\n return this.context.metaData();\n }\n\n id () {\n return `legend-${this.context._id}`;\n }\n\n sourceCanvas () {\n return this.context.canvasAlias();\n }\n\n shouldApplySideEffects () {\n return true;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: null\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","import { getEvent } from 'muze-utils';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n firebolt.triggerPhysicalAction('hover', payload);\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n const event = getEvent();\n firebolt.triggerPhysicalAction('hover', {\n criteria: null\n });\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { getSymbol, mergeRecursive } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n marginHorizontal: 3,\n paddingRight: 4,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n buffer: {\n [ALIGN.HORIZONTAL]: 10,\n [ALIGN.VERTICAL]: 10\n },\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: (val, i, data, context) => context.valueParser()(val)\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(192,192,192,0.6)',\n type: 'square'\n }\n }\n // stops: 5\n};\n\nconst tempConfig = mergeRecursive({}, DEFAULT_CONFIG);\n\nconst ITEM_FORMATTER = {\n item: {\n text: {\n formatter: val => `${val[0]} - ${val[1]}`\n }\n }\n};\n\nexport const STEP_DEFAULT_CONFIG = mergeRecursive(tempConfig, ITEM_FORMATTER);\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n\nexport const LEGEND_MARKER_PROPS = {\n size: 8,\n ROTATE_HORIZONTAL: 180,\n ROTATE_VERTICAL: 90,\n shape: 'triangle'\n};\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport { LEGEND_MARKER_PROPS } from '../../../legend/defaults';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._graphicElems = {\n rect: null\n };\n }\n\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n const { criteria } = payload;\n const { rect } = this._graphicElems;\n\n if (criteria === null) {\n rect && rect.remove();\n return this;\n }\n\n const domain = criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1],\n `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = LEGEND_MARKER_PROPS.size + 4;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = LEGEND_MARKER_PROPS.size + 4;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n this._graphicElems.rect = selBox;\n return this;\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n const uids = set.uids.map(d => d[0]);\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { makeElement, getSymbol } from 'muze-utils';\nimport { Marker } from '../../../enums/side-effects';\nimport { CLASSPREFIX, HORIZONTAL } from '../../../enums/constants';\nimport { LEGEND_MARKER_PROPS } from '../../../legend/defaults';\nimport './styles.scss';\n\nconst SYMBOL_PADDING = (Math.sqrt(3) * 3);\nconst AXIS_STROKE = 1;\nconst MARKER_BUFFER = 10;\n\nconst createTextCell = (className, labelManagerRef, cells) => {\n const { TextCell } = cells;\n const cell = new TextCell(\n {\n type: 'text',\n className: `${className}-text`\n }, {\n labelManager: labelManagerRef()\n }).config({ maxLines: 1 });\n cell._minTickDiff = { height: 0, width: 0 };\n\n return cell;\n};\n\nconst getRelativePosition = (canvas, legendContainer) => ({\n top: legendContainer.getBoundingClientRect().top - canvas.getBoundingClientRect().top,\n left: legendContainer.getBoundingClientRect().left - canvas.getBoundingClientRect().left\n});\nexport default class LegendMarker extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._graphicElements = {\n markerElement: null,\n legendmarkerTextContainer: null,\n legendmarkerText: null\n };\n }\n\n static formalName () {\n return Marker;\n }\n\n /**\n * It returns the default configuration needed by legend-marker.\n * @return {Object} Default configuration of the legend-marker.\n */\n static defaultConfig () {\n return {\n className: 'legend-marker',\n classPrefix: CLASSPREFIX,\n size: LEGEND_MARKER_PROPS.size,\n shape: LEGEND_MARKER_PROPS.shape\n };\n }\n\n apply (selectionSet, payload) {\n const className = `${this.config().classPrefix}-${this.config().className}`;\n if (payload.criteria && payload.criteria.length === 2) {\n const physicalAction = function () {\n // Register physical action on marker gere\n };\n const firebolt = this.firebolt;\n const labelManager = firebolt.context.labelManager;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n\n const range = payload.criteria[0] ? axis.getScaleValue(payload.criteria[1]) : 0;\n\n const legendGradContainer = context.getDrawingContext().svgContainer;\n\n const isFractional = payload.criteria[1][0] % 1 !== 0;\n\n const lableConfig = {\n top: 0,\n left: 0,\n labelText: isFractional ? payload.criteria[1][0].toFixed(2) : payload.criteria[1][0]\n };\n\n const { top, left } = getRelativePosition(context._canvasMount, legendGradContainer.node());\n const { oriTextHeight, oriTextWidth } = labelManager().getSmartText(lableConfig.labelText);\n let x;\n let y;\n let rotateAngle;\n\n const { size, shape } = config;\n if (context.config().align === HORIZONTAL) {\n x = range - (Math.sqrt(size / SYMBOL_PADDING)) + AXIS_STROKE;\n y = 5;\n rotateAngle = LEGEND_MARKER_PROPS.ROTATE_HORIZONTAL;\n lableConfig.top = top + y - 3 * MARKER_BUFFER;\n lableConfig.left = x + left - (oriTextWidth / 2) - (MARKER_BUFFER / 2);\n } else {\n y = range + Math.sqrt(size / (2 * SYMBOL_PADDING)) - AXIS_STROKE;\n x = 5;\n rotateAngle = LEGEND_MARKER_PROPS.ROTATE_VERTICAL;\n lableConfig.top = top + y - (3 * MARKER_BUFFER - 2) + (oriTextHeight / 2);\n lableConfig.left = x + left - oriTextWidth - MARKER_BUFFER;\n }\n\n const legendmarkerGroup = makeElement(legendGradContainer,\n 'g',\n [1],\n `${config.classPrefix}-${config.className}-group`);\n\n if (!this._graphicElements.markerElement) {\n this._graphicElements.markerElement = makeElement(legendmarkerGroup,\n 'path', [{ value: null }], className, { enter: physicalAction });\n }\n\n if (!this._graphicElements.legendmarkerTextContainer) {\n this._graphicElements.legendmarkerTextContainer = makeElement(\n context._canvasMount,\n 'div',\n [1],\n `${className}-text-container`);\n this._graphicElements.legendmarkerText = makeElement(\n this._graphicElements.legendmarkerTextContainer,\n 'div',\n [1],\n `${className}-text`);\n }\n const textElement = createTextCell(className, labelManager, context._cells);\n this._graphicElements.markerElement\n .data([{ value: payload.criteria }])\n .attr('transform', `translate(${x},${y}) rotate(${rotateAngle})`)\n .attr('d', getSymbol(shape).size(size * size)())\n .classed(`${className}-show`, true)\n .classed(`${className}-hide`, false);\n textElement.source(lableConfig.labelText);\n textElement.render(this._graphicElements.legendmarkerText.node());\n this._graphicElements.legendmarkerText\n .attr('style', `top: ${lableConfig.top}px; left:${lableConfig.left}px`)\n .classed(`${className}-show`, true)\n .classed(`${className}-hide`, false);\n } else if (this._graphicElements.markerElement && this._graphicElements.legendmarkerText) {\n this._graphicElements.markerElement\n .data([{ value: null }])\n .classed(`${className}-show`, false)\n .classed(`${className}-hide`, true);\n this._graphicElements.legendmarkerText\n .classed(`${className}-show`, false)\n .classed(`${className}-hide`, true);\n }\n }\n\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {\n onset: (context, value) => context.firebolt().attachPropagationListener(value)\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n },\n labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { makeElement, FieldType, getReadableTicks } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n MAXWIDTH,\n CENTER,\n HORIZONTAL,\n POSITION_ALIGNMENT_MAP\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n return getReadableTicks(domain, steps);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const { orientation } = config.item.text;\n let textAlign = LEFT;\n const { alignment, maxWidth, width, height, border, padding } = measurement;\n\n if (orientation === TOP || orientation === BOTTOM || alignment === HORIZONTAL) {\n textAlign = CENTER;\n }\n const titleWidth = Math.min(maxWidth, width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}px`)\n .style(HEIGHT, `${height}px`)\n .style('border-bottom', `${border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${titleWidth}px`)\n .style(MAXWIDTH, `${maxWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${padding}px`)\n .text(title.text)\n .style('text-align', textAlign)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const formattedData = formatter(value, index, context.metaData(), context);\n const { height, width } = labelManager.getOriSize(formattedData);\n space[index] = { height, width };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n *\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth);\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n // iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + iconSpaces[i].width + 2 * effPadding;\n } else {\n labelSpaces[i].width = iconSpaces[i].width;\n itemSpaces[i].width = iconSpaces[i].width;\n labelSpaces[i].width = iconSpaces[i].width;\n }\n totalWidth += itemSpaces[i].width;\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelWidth + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n\nexport const prepareSelectionSetData = (data, fieldName, dm) => {\n const fieldType = dm.getFieldsConfig()[fieldName].def.type;\n if (fieldType === FieldType.DIMENSION) {\n return {\n keys: data.reduce((acc, d) => {\n acc[d.rawVal] = {\n uid: d.id,\n dims: [d.rawVal]\n\n };\n return acc;\n }, {}),\n fields: [fieldName]\n };\n }\n return {\n keys: data.reduce((acc, d) => {\n acc[d.id] = {\n uid: d.id,\n dims: [d.id]\n };\n return acc;\n }, {}),\n fields: [fieldName]\n };\n};\n\nexport const calculateTitleWidth = (measures, titleWidth, config) => {\n const { maxItemSpaces, margin, itemSpaces } = measures;\n const { position, buffer } = config;\n const alignment = POSITION_ALIGNMENT_MAP[position];\n let width = 0;\n\n if (alignment === HORIZONTAL) {\n const localBuffer = buffer[alignment];\n width = itemSpaces.reduce((acc, cur) => acc + cur.width + localBuffer, 0);\n } else if (maxItemSpaces.width < titleWidth) {\n width = titleWidth + 2 * margin;\n } else {\n width = maxItemSpaces.width;\n }\n return width;\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH, RIGHT, LEFT, TOP, BOTTOM, POSITION_ALIGNMENT_MAP } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport {\n getItemMeasures,\n titleCreator,\n computeItemSpaces,\n prepareSelectionSetData,\n calculateTitleWidth\n} from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n const { interactions } = dependencies.registry;\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, interactions.behaviours.get(), legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this, VALUE, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale());\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, maxWidth } = this.measurement();\n\n const width = calculateTitleWidth(\n this.measurement(),\n this._labelManager.getOriSize(this._title.text).width,\n this.config()\n );\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\n border,\n padding,\n borderStyle,\n borderColor,\n alignment: POSITION_ALIGNMENT_MAP[this.config().position]\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor,\n position\n } = this.config();\n const {\n border,\n marginHorizontal,\n maxHeight,\n height,\n width,\n maxWidth\n } = this.measurement();\n let {\n margin\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n margin = marginHorizontal;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n margin = marginHorizontal;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\n }\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n\n const widthBox = calculateTitleWidth(\n this.measurement(),\n this._labelManager.getOriSize(this._title.text).width,\n this.config()\n );\n\n const titleWidth = Math.min(maxWidth, widthBox);\n width < titleWidth ? selectElement(this.mount()).style('width', `${titleWidth}px`) : null;\n // set height and width\n legendContainer.style('width', `${titleWidth}px`)\n .style('height', `${Math.min(maxHeight, height)}px`)\n .style(`${marginPosition}`, `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(prepareSelectionSetData(this.data(), this.fieldName(), this.metaData()));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.rawVal]];\n }\n\n getValueFromId (id, fields = []) {\n const data = this.data();\n if (fields.length) {\n id = Number(id);\n return [data.find(d => id === d.id).rawVal];\n }\n\n return [];\n }\n\n getRangeFromIdentifiers ({ fields, entrySet }) {\n const data = this.data();\n const idRangeMap = data.reduce((acc, v) => {\n acc[v.id] = v;\n return acc;\n }, {});\n\n return fields.reduce((acc, v) => {\n acc[v] = entrySet.reduce((ranges, id) => {\n if (id in idRangeMap) {\n ranges.push(idRangeMap[id].range);\n }\n return ranges;\n }, []);\n return acc;\n }, {});\n }\n\n setParentInfo (info) {\n this._canvasMount = info.canvasRoot;\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n itemSpaces,\n width\n } = measurement;\n const {\n buffer\n } = config;\n return {\n row: {\n width: `${width + itemSpaces.length * buffer[HORIZONTAL] || 1}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width + buffer[HORIZONTAL]}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n DEFAULTICONSIZE,\n VERTICAL_BUFFER,\n HORIZONTAL_BUFFER,\n HORIZONTAL,\n VERTICAL,\n DEFAULT,\n TOP,\n BOTTOM,\n OPPOSITE_POSITION\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n *\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n *\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n\n const { align } = context.config().align;\n\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n\n if (measureType === 'width' && !stepColorCheck && align === VERTICAL) {\n return `${maxIconWidth}px`;\n } else if (align === HORIZONTAL) {\n return `${maxIconWidth}px`;\n }\n return `${iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const shape = d[1] || defaultIcon;\n const defaultIconSize = DEFAULTICONSIZE[shape] || DEFAULTICONSIZE[DEFAULT];\n const size = d[3] || defaultIconSize * Math.PI;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n padding,\n color,\n iconWidth,\n align\n } = context;\n\n let { maxIconWidth } = context;\n\n if (align === HORIZONTAL) {\n maxIconWidth = iconWidth + 2 * padding;\n }\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${Math.ceil(maxIconWidth)}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n const transalate = maxIconWidth / 2 - padding;\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, icon)\n .attr('transform', `translate(${transalate} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color)\n .attr('stroke', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix,\n shape,\n align\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n const marginHorizontalBuffer = HORIZONTAL_BUFFER;\n const marginVerticalBuffer = textOrientation === TOP || textOrientation === BOTTOM ? 0 : VERTICAL_BUFFER;\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = context.metaData();\n const position = OPPOSITE_POSITION[textOrientation] || LEFT;\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\n .style(`padding-${position}`, '0px')\n .style(`margin-${position}`, `${align === HORIZONTAL ? marginHorizontalBuffer : marginVerticalBuffer}px`);\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon(shape, selectElement(this), d, {\n classPrefix,\n // iconWidth,\n iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color,\n align\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = context.metaData();\n const data = context.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n const formattedData = formatter([data[d[6]].range[0], data[d[6]].range[1]], i, dataArr, context);\n selectElement(this).text(formattedData);\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal,\n getReadableTicks,\n InvalidAwareTypes\n} from 'muze-utils';\nimport SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn, steps } = getScaleInfo(scale);\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n let domainForLegend = [];\n if (scaleType === SIZE && type === FieldType.MEASURE) {\n domainForLegend = steps instanceof Array ? steps : getReadableTicks(domain, domain.length);\n } else if (subtype === DimensionSubtype.TEMPORAL) {\n domainForLegend = [...new Set(field.data())];\n } else {\n domainForLegend = [...new Set(domain)];\n }\n\n const len = domainForLegend.length;\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.MEASURE) {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, i === len - 1 ? nextVal.toFixed(0) : nextVal.toFixed(0) - 1];\n } else {\n let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend.sort((a, b) => {\n const domainValue =\n !(a.value instanceof InvalidAwareTypes || a.value instanceof InvalidAwareTypes)\n ? a.value.localeCompare(b.value)\n : 1;\n return domainValue;\n });\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n\n legendContainer.selectAll('div')\n .filter((datum, i, allSelections) => !allSelections[i].classList.contains(`${classPrefix}-legend-body`))\n .style('float', LEFT);\n\n firebolt.mapActionsAndBehaviour();\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN, LEGEND_MARKER_PROPS } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n *\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n *\n */\nexport const makeLinearGradient = (container, data, domain, id) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', `linear-gradient-${id}`)\n .attr('x1', '0%')\n .attr('y2', '0%');\n\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false,\n labels: {\n rotation: null\n }\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n *\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data, id) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain, id);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.source().config({\n tickFormat: (val, i) => context.config().item.text.formatter(val, i, context.metaData(), context)\n });\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n axis.source().render();\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data, context._id);\n const labelDim = context.axis().source().getAxisDimensions().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} ${LEGEND_MARKER_PROPS.size + 4})`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(${LEGEND_MARKER_PROPS.size + 4} ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height + LEGEND_MARKER_PROPS.size + 4}px`,\n width: `${gradientDimensions.width + LEGEND_MARKER_PROPS.size + 4}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: `url(#linear-gradient-${context._id})`\n });\n legendGradSvg.attr('height', gradientDimensions.height + LEGEND_MARKER_PROPS.size + 4);\n legendGradSvg.attr('width', gradientDimensions.width + LEGEND_MARKER_PROPS.size + 4);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData, getInterpolatedArrayData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { HIGHLIGHT } from '../enums/behaviours';\nimport { Marker } from '../enums/side-effects';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](ele),\n value: +value.toFixed(1),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n *\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.mapSideEffects({\n [HIGHLIGHT]: [Marker]\n });\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n\n getRangeFromIdentifiers ({ fields, criteria }) {\n return fields.reduce((range, v) => {\n range[v] = criteria[v];\n return range;\n }, {});\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getItemMeasures\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, HORIZONTAL } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\nimport { STEP_DEFAULT_CONFIG, DEFAULT_MEASUREMENT } from './defaults';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static defaultConfig () {\n STEP_DEFAULT_CONFIG.buffer[HORIZONTAL] = 0;\n return STEP_DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n const isFraction = ele => ele % 1 !== 0;\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainLeg[0] = domain[0];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainLeg.push(domain[1]);\n }\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n } else {\n domainLeg = getInterpolatedData(domain, steps, scaleParams);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n let range;\n if (i < domainLeg.length - 1) {\n const left = isFraction(ele) ? ele.toFixed(1) : ele;\n\n const numRight = +domainLeg[i + 1];\n const right = isFraction(numRight) ? numRight.toFixed(1) : numRight;\n\n value = `${left} - ${right}`;\n range = [left, right];\n } else if (domainLeg.length === 1) {\n value = isFraction(ele) ? ele.toFixed(1) : ele;\n\n const numRight = +domainLeg[i + 1];\n const right = isFraction(numRight) ? numRight.toFixed(1) : numRight;\n range = [value, right];\n }\n\n return {\n [scaleType]: scaleType === SIZE\n ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](ele),\n value,\n id: i + 1,\n range\n };\n }).filter(d => d.value !== null);\n\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const {\n item\n } = this.config();\n const stepItemBuffer = DEFAULT_MEASUREMENT.padding * 2;\n return getItemMeasures(this, 'range', item.text.formatter, stepItemBuffer);\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n return legendContainer;\n }\n\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\nexport const MUZE_PREFIX = 'muze';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const ICON_SHAPES = {\n SQUARE: 'square',\n CIRCLE: 'circle'\n};\n\nexport const IS_POINT_MAP = {\n true: ICON_SHAPES.CIRCLE,\n false: ICON_SHAPES.SQUARE\n};\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const POINT = 'point';\nexport const MESSAGE = 'message';\nexport const ERROR_MESSAGE = 'Insufficient data or incorrect configurations';\nexport const COMMON_INTERACTION = 'common';\nexport const INDIVIDUAL_INTERACTION = 'individual';\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n *\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive, CommonProps } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n },\n sideEffects: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\n */\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`,\n baseFontLimit: 16,\n upperFontLimit: 24,\n baseSizeLimit: 100,\n upperSizeLimit: 300,\n fractionImage: 0.8,\n fractionChild: 0.7\n};\n\nexport const CANVAS = 'canvas';\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module LocalOptions\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([title, titleConfig]) => {\n let t = title;\n if (typeof title === 'string' || !title) {\n t = () => title;\n }\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return [t, mergeRecursive(defConfig, titleConfig)];\n }\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([subtitle, subtitleConfig]) => {\n let sub = subtitle;\n if (typeof subtitle === 'string' || !subtitle) {\n sub = () => subtitle;\n }\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return [sub, mergeRecursive(defConfig, subtitleConfig)];\n }\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","import { COMMON_INTERACTION } from './constants';\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffects: {\n tooltip: COMMON_INTERACTION\n },\n behaviours: {\n highlight: COMMON_INTERACTION,\n select: COMMON_INTERACTION,\n brush: COMMON_INTERACTION\n },\n tooltip: {\n\n }\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n },\n invalidValues: {},\n sort: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\n }\n}\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser, FieldType } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { BEHAVIOURS } from '@chartshq/muze-firebolt';\nimport { payloadGenerator } from '@chartshq/visual-unit';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID, LEGEND }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixFacetConfig = (config) => {\n if (config) {\n let isBorderPresent = false;\n const isGridLinePresent = {};\n\n if (config.border && config.border.width) {\n isBorderPresent = true;\n }\n if (config.gridLines) {\n isGridLinePresent.x = !!config.gridLines.x;\n isGridLinePresent.y = !!config.gridLines.y;\n }\n const facetsUserConfig = {\n isBorderPresent,\n isGridLinePresent\n };\n return {\n facetsUserConfig,\n isFacet: false\n };\n }\n return {};\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const legend = layoutManager.getComponent(LEGEND);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n if (legend) {\n legend.setComponentInfo({ rootNode: parentContainer });\n }\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n\n const sanitizedData = visualGroup.getMandatoryFields();\n if (sanitizedData.shouldRender) {\n visualGroup.createMatrices(sanitizedData);\n } else {\n visualGroup.remove();\n }\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n dispatchProps(context);\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nconst applyPropagationPolicy = (firebolt, { behaviours, sideEffects }) => {\n for (const key in behaviours) {\n firebolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n firebolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n};\n\nconst isMeasure = fields => fields.every(field => field.type() === FieldType.MEASURE);\n\nconst isSplom = (fields) => {\n const { rowProjections, colProjections } = fields;\n const colProj = colProjections.flat();\n const rowProj = rowProjections.flat();\n\n if (isMeasure(colProj) && isMeasure(rowProj)) {\n return true;\n }\n return false;\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const splom = isSplom(visualGroup.resolver().getAllFields());\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n applyPropagationPolicy(unitFireBolt, { behaviours, sideEffects });\n if (splom) {\n unitFireBolt.payloadGenerators({\n [BEHAVIOURS.BRUSH]: (inst, dm, propConfig, facetFields) => payloadGenerator.brush(inst, dm,\n { ...propConfig, ...{ includeMeasures: false } }, facetFields)\n });\n unitFireBolt.sideEffects().selectionBox.config({\n persistent: true\n });\n } else {\n unitFireBolt.payloadGenerators({\n [BEHAVIOURS.BRUSH]: payloadGenerator.brush\n });\n unitFireBolt.sideEffects().selectionBox.config({\n persistent: false\n });\n }\n });\n applyPropagationPolicy(firebolt, { behaviours, sideEffects });\n }\n};\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nexport const setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig, fixFacetConfig } from './canvas/helper';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: [null, null],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n takesMultipleParams: true,\n sanitization: ([config, auxConfig = {}], oldConfig) => {\n // Stores additional config, if passed\n const { reset = false } = auxConfig;\n let oldConf = {};\n\n // handle the default cases for facet, as it is different to other charts\n const facetDefaultConfig = fixFacetConfig(config);\n config = mergeRecursive(config, facetDefaultConfig);\n\n if (!reset) {\n oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n }\n\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n\n return fixScrollBarConfig(newConf);\n }\n\n }\n }\n};\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n *\n * @memberof GenericLayout\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n this._config.border.width = Math.max(0, this._config.border.width);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n *\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n *\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistributeSpaces(width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableMatrices () {\n return this.viewableMatrix;\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const columnMeasures = [width, width];\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, j);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\n };\n};\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n","/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\n\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage,\n priority\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n\n context.rowMatrix(new RowMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.row,\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new ColumnMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = (isFacet, showHeaders) => ({\n [`${TOP}-${LEFT}`]: isFacet && showHeaders ? LEFT : NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: isFacet && showHeaders ? RIGHT : NO_BORDERS,\n [`${CENTER}-${LEFT}`]: isFacet ? `${CENTER}${LEFT}` : ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: isFacet ? `${CENTER}${RIGHT}` : ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n});\n\nconst applySpecificBorder = (params) => {\n const { type, borderWidth, borderStyle, cells, isFacet, color } = params;\n if (!isFacet) {\n cells.style(`border-${type}`, `${borderWidth}px ${borderStyle} ${color}`);\n } else {\n cells.style(`border-${type}-width`, `${borderWidth}px`);\n cells.style(`border-${type}-style`, `${borderStyle}`);\n }\n};\n\nconst specificBorderApplier = (params) => {\n const { borderTypes, showBorders, cells, borderInfo, name, isFacet } = params;\n const {\n color,\n style,\n width\n } = borderInfo;\n borderTypes.forEach((borderType) => {\n applySpecificBorder({\n cells,\n color: showBorders[borderType] ? color : BLANK_BORDERS,\n type: borderType,\n borderWidth: width,\n borderStyle: style,\n name,\n isFacet\n });\n });\n};\n\nconst borderApplier = (cells, borderInfo, name, isFacet) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n [ROW]: () => specificBorderApplier({\n borderTypes: [TOP, BOTTOM],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [COLUMN]: () => specificBorderApplier({\n borderTypes: [LEFT, RIGHT],\n showBorders: showColBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [CENTER]: () => specificBorderApplier({\n borderTypes: [LEFT, RIGHT, TOP, BOTTOM],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [LEFT]: () => specificBorderApplier({\n borderTypes: [LEFT],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [RIGHT]: () => specificBorderApplier({\n borderTypes: [RIGHT],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [`${CENTER}${LEFT}`]: () => specificBorderApplier({\n borderTypes: [LEFT, TOP, BOTTOM],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [`${CENTER}${RIGHT}`]: () => specificBorderApplier({\n borderTypes: [RIGHT, TOP, BOTTOM],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n })\n };\n};\n\nexport const applyBorders = (params) => {\n const { cells, border, row, column, isFacet, showHeaders } = params;\n const name = `${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`;\n const borderApplierFn = borderApplier(cells, border, name, isFacet);\n const borderMapVal = borderMap(isFacet, showHeaders)[name];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\n };\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n\nexport const PADDING = 'padding';\nexport const HEADER_PADDING = 'headerPadding';\nexport const TITLE_PADDING = 'titlePadding';\n\nexport const TITLE = 'title';\nexport const SUBTITLE = 'subtitle';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\nimport { SIMPLE_CELL } from './constants';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n static formalName () {\n return SIMPLE_CELL;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\n }\n\n}\n\nexport default SimpleCell;\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null,\n [CONSTANTS.PADDING]: {\n [CONSTANTS.LEFT]: 8,\n [CONSTANTS.RIGHT]: 8,\n [CONSTANTS.TOP]: 10,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.HEADER_PADDING]: {\n [CONSTANTS.LEFT]: 8,\n [CONSTANTS.RIGHT]: 5,\n [CONSTANTS.TOP]: 2,\n [CONSTANTS.BOTTOM]: 5\n },\n [CONSTANTS.TITLE_PADDING]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n }\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL, BOTTOM, TOP } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\nimport * as CONSTANTS from './constants';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n static formalName () {\n return CONSTANTS.AXIS_CELL;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n let actualWidth = 0;\n let actualHeight = 0;\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show,\n orientation\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\nimport * as CONSTANTS from './constants';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n static formalName () {\n return CONSTANTS.BLANK_CELL;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n\n getMinMeasures () {\n return 0;\n }\n }\nexport default BlankCell;\n","import {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n HEADER,\n TITLE,\n SUBTITLE\n} from './enums/constants';\n\nexport const setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\n\nexport const isTitleSubtitle = (subType) => {\n let returnVal = false;\n if (subType === `${TITLE}` || subType === `${SUBTITLE}`) {\n returnVal = true;\n }\n return returnVal;\n};\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nexport const computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n const { height: smHeight, width: smWidth } = smartSpace;\n space.width = smWidth;\n space.height = smHeight;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n const { subType, headerPadding } = context.config();\n if (!isTitleSubtitle(subType)) {\n space.width += headerPadding[LEFT] + headerPadding[RIGHT];\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\nexport const setPadding = (measures) => {\n const { elem, className, headerPadding, padding, type, titlePadding } = measures;\n let localPadding;\n if (isTitleSubtitle(className)) {\n localPadding = titlePadding;\n } else if (type === HEADER) {\n localPadding = headerPadding;\n } else {\n localPadding = padding;\n }\n [TOP, BOTTOM, LEFT, RIGHT].forEach((position) => {\n elem.style(`padding-${position}`, `${localPadding[position]}px`);\n });\n return elem;\n};\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\nimport * as CONSTANTS from './constants';\nimport {\n setSmartText,\n computeTextSpace,\n setPadding\n} from './text-cell-helper';\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n static formalName () {\n return CONSTANTS.TEXT_CELL;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n const space = computeTextSpace(this);\n this.logicalSpace(space);\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n setSmartText(this);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation,\n padding,\n type,\n headerPadding,\n className,\n titlePadding\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n let elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n\n [TOP, BOTTOM, LEFT, RIGHT].forEach((position) => {\n container.style(`margin-${position}`, `${margin[position]}px`);\n });\n\n elem = setPadding({ elem, className, headerPadding, padding, type, titlePadding });\n if (this._className === 'muze-grid-headers') {\n elem.style('text-align', textAlign);\n }\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport * as CONSTANTS from './constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n static formalName () {\n return CONSTANTS.GEOM_CELL;\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel()\n .width(width).height(height - this.getCaptionSpace().height)\n .unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n register: (def) => {\n const key = def.formalName();\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`,\n subType: cellType\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING,\n BORDER, MARGIN, SIZE, COLOR, IS_POINT_MAP, POINT\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n *\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field && scale) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n * @param {*} mark mark of the layers in the canvas\n * @param {*} scaleType type of the scale to draw the legend ie shape, size or color\n *\n */\nexport const legendIconShapeMapper = (layers, scaleType) => {\n const layerMarks = layers.map(el => el.mark);\n const shape = IS_POINT_MAP[(scaleType === COLOR || scaleType === SIZE)\n && layerMarks.includes(POINT)];\n return shape;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n const { invalidValues } = canvas.config();\n const interactionRegistry = canvas.registry().interactions;\n const parser = getValueParser(invalidValues);\n\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n },\n registry: {\n interactions: interactionRegistry\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n\n const mark = canvas.composition().visualGroup.resolver().matrixLayers()[0][0];\n config.shape = legendIconShapeMapper(mark, scaleType);\n\n legend.scale(scale)\n .valueParser(parser)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n *\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n *\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n\n setComponentInfo () {\n throw Error('setComponentInfo is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`);\n // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`);\n mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .style('width', d => `${d.legend.measurement().width}px`)\n .each(function (d) { d.legend.mount(this); });\n }\n }\n\n draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n setComponentInfo (params) {\n const { rootNode } = params;\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n leg.setParentInfo({ canvasRoot: rootNode });\n });\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\nimport '../../border-applier.scss';\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n const { classPrefix, row, column, dimensions, border, isFacet, showHeaders } = this.params.config;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders({ cells, border, row, column, isFacet, showHeaders });\n }\n\n renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td',\n (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {\n update: (elem, cell) => {\n const { externalClassname } = cell.placeholder.config();\n externalClassname && externalClassname.map(d => elem.classed(`${className}-${d}`, true));\n }\n }, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n }\n\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n const { isFacet, showHeaders } = this.params.component.config();\n matrixConfig.isFacet = isFacet;\n matrixConfig.showHeaders = showHeaders;\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const { isFacet, showHeaders } = this.params.component.config();\n matrixConfig.isFacet = isFacet;\n matrixConfig.showHeaders = showHeaders;\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { incorrectMessageIcon } from './message-icon';\nimport { MESSAGE_CONFIG } from '../defaults';\n\nconst formatFontSize = (width, height) => {\n const { baseFontLimit, upperFontLimit, baseSizeLimit, upperSizeLimit } = MESSAGE_CONFIG;\n const fractionFont = (upperSizeLimit - baseSizeLimit) / (upperFontLimit - baseFontLimit);\n let fontSize = upperFontLimit;\n const dim = width < height && width !== 0 ? width : height;\n\n if (dim === 0) {\n fontSize = 0;\n } else if (dim <= baseSizeLimit) {\n fontSize = baseFontLimit;\n } else if (dim > baseSizeLimit && dim < upperSizeLimit) {\n fontSize = baseFontLimit + (upperSizeLimit - dim) / fractionFont;\n }\n return fontSize;\n};\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const childHeight = height > MESSAGE_CONFIG.baseSizeLimit ? MESSAGE_CONFIG.fractionChild * height : 0;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const childNode = makeElement(node, 'div', [1], `${className}-child`);\n const imageNode = makeElement(childNode, 'div', [1], `${className}-child-img`);\n const messageNode = makeElement(childNode, 'div', [1], `${className}-child-message`);\n\n applyStyle(childNode, { width, height: `${childHeight}px` });\n applyStyle(imageNode, { width, height: `${childHeight * MESSAGE_CONFIG.fractionImage}px` });\n\n imageNode.html(incorrectMessageIcon);\n\n const textElement = makeElement(messageNode, 'text', [1]);\n applyStyle(messageNode, { 'font-size': `${formatFontSize(width, height)}px` });\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n const { target, className } = params.config;\n this.component = params.component;\n this.params = params;\n this.target(target);\n this.className(className);\n this.position(params.config.position);\n return this;\n }\n}\n","export const incorrectMessageIcon = `\n\n\nGroup 23\n Created with Sketch.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n ERROR_MESSAGE,\n HORIZONTAL_CENTER\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n// Mapping of header alignment values\nconst headerAlignmentMap = {\n [LEFT]: LEFT,\n [RIGHT]: RIGHT,\n [CENTER]: HORIZONTAL_CENTER\n};\n\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: headerAlignmentMap[headerConfig.align],\n className: configType.className\n });\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, renderDetails, renderGrid) => {\n const { components, measurement } = renderDetails;\n const headerValues = Object.values(components.headers);\n let sum = 0;\n let messageWrapper = null;\n\n for (const val of headerValues) {\n sum += val.logicalSpace().height;\n }\n\n if (!renderGrid) {\n const defaultDimensions = { height: measurement.canvasHeight - sum, width: measurement.canvasWidth };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: ERROR_MESSAGE,\n classPrefix: MESSAGE_CONFIG,\n position: TOP\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent.updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n *\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import { isSimpleObject, ReservedFields, FieldType } from 'muze-utils';\nimport { getSideEffects, BEHAVIOURS } from '@chartshq/muze-firebolt';\nimport { PSEUDO_SELECT } from '@chartshq/visual-unit/src/enums/behaviours';\nimport { COMMON_INTERACTION } from '../../constants';\n\nexport const addFacetDataAndMeasureNames = (data, facetData, measureNames) => {\n if (data === null) {\n return data;\n }\n\n const facets = Object.keys(facetData);\n const facetVals = Object.values(facetData);\n\n if (isSimpleObject(data)) {\n return Object.assign({}, Object.keys(facetData).reduce((acc, v) => {\n acc[v] = [facetData[v]];\n return acc;\n }, {}), data, {\n [ReservedFields.MEASURE_NAMES]: measureNames\n });\n }\n const criteriaFields = data[0];\n const hasMeasureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES);\n const fieldsWithFacets = [...facets, ...criteriaFields,\n ...(hasMeasureNameField ? [] : [ReservedFields.MEASURE_NAMES])];\n\n const dataWithFacets = [\n fieldsWithFacets\n ];\n\n for (let i = 1, len = data.length; i < len; i++) {\n let measureNameArr = [];\n if (!hasMeasureNameField && measureNames) {\n measureNameArr = measureNames;\n }\n const row = [...facetVals, ...data[i], ...measureNameArr];\n dataWithFacets.push(row);\n }\n return dataWithFacets;\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n const { payload, identifiers, sourceUnitId, sourceCanvasId, propagationDataSource } = config;\n const dataModel = propagationDataSource;\n const sideEfffects = instance._sideEffectDefinitions;\n const behaviourEffectMap = instance._behaviourEffectMap;\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n payload.sourceUnit = sourceUnitId;\n payload.action = action;\n payload.sourceCanvas = sourceCanvasId;\n\n const groupId = sourceCanvasId;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n (effects ? effects.some(d => sideEfffects[d.name || d].mutates()) : false) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n let isMutableAction = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n const propConfig = {\n payload,\n action,\n criteria: identifiers,\n isMutableAction,\n groupId,\n sourceId: config.sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.sourceCanvas() : true)\n };\n\n dataModel.propagate(identifiers, propConfig, true);\n\n if (action !== propagationBehaviour) {\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n dataModel.propagate(identifiers, Object.assign({}, propConfig, {\n isMutableAction,\n applyOnSource: false,\n action: propagationBehaviour,\n sourceId: isMutableAction ? groupId : sourceUnitId,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.sourceCanvas()\n }), true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n\nconst isDimension = fields => fields.some(field => field.type() === FieldType.DIMENSION);\n\nexport const isCrosstab = (fields) => {\n const { rowFacets, colFacets, rowProjections, colProjections } = fields;\n if (rowFacets.length || colFacets.length) {\n return true;\n }\n const colProj = colProjections.flat();\n const rowProj = rowProjections.flat();\n\n if ((isDimension(colProj) || isDimension(rowProj)) && (colProj.length > 1 || rowProj.length > 1)) {\n return true;\n }\n return false;\n};\n\nexport const addSelectedMeasuresInPayload = (firebolt, unit, payload) => {\n const groupFields = firebolt.context.composition().visualGroup.resolver().getAllFields();\n if (isCrosstab(groupFields)) {\n const { x, y } = unit.fields();\n let measureFields;\n\n if (x.length && y.length) {\n if (x[0].type() === FieldType.MEASURE) {\n measureFields = [`${x[0]}`];\n } else if (y[0].type() === FieldType.MEASURE) {\n measureFields = [`${y[0]}`];\n }\n payload.selectedMeasures = measureFields;\n }\n }\n};\n\nexport const dispatchBehaviours = (firebolt, { payload, unit, behaviours }) => {\n const { interaction: { behaviours: behaviourConfs = {} } } = firebolt.context.config();\n const unitFirebolt = unit.firebolt();\n\n behaviours.forEach((action) => {\n const mode = behaviourConfs[action];\n let targetFirebolt = unitFirebolt;\n if (mode === COMMON_INTERACTION) {\n targetFirebolt = firebolt;\n }\n\n const actions = targetFirebolt._actions.behavioural;\n payload.criteria = addFacetDataAndMeasureNames(payload.criteria, unit.facetFieldsMap(),\n unit.layers().map(layer => Object.keys(layer.data().getFieldspace().getMeasure())));\n\n targetFirebolt.dispatchBehaviour(action, payload, {\n propagate: false,\n applySideEffect: false\n });\n\n const identifiers = actions[action].propagationIdentifiers();\n\n firebolt.propagate(action, payload, identifiers, {\n sideEffects: getSideEffects(action, targetFirebolt._behaviourEffectMap),\n sourceUnitId: unit.id(),\n sourceId: targetFirebolt.id(),\n propagationDataSource: targetFirebolt.getPropagationSource()\n });\n });\n};\n\nexport const resetSelectAction = (firebolt, { unit, payload, behaviours }) => {\n if (behaviours[0] === BEHAVIOURS.BRUSH && payload.dragging && payload.dragDiff < 5) {\n dispatchBehaviours(firebolt, {\n behaviours: [BEHAVIOURS.SELECT],\n payload: {\n criteria: null\n },\n unit\n });\n }\n};\n\nexport const attachBehaviours = (group) => {\n const allFields = group.resolver().getAllFields();\n const valueMatrix = group.matrixInstance().value;\n const crosstab = isCrosstab(allFields);\n\n valueMatrix.each((cell) => {\n const unit = cell.valueOf();\n const firebolt = unit.firebolt();\n const behaviours = crosstab ? [PSEUDO_SELECT] : [];\n firebolt._connectedBehaviours[BEHAVIOURS.SELECT] = behaviours;\n });\n};\n","import {\n FieldType,\n mergeRecursive,\n CommonProps,\n ReservedFields\n} from 'muze-utils';\nimport { Firebolt, getSideEffects } from '@chartshq/muze-firebolt';\nimport { createMapByDimensions } from '@chartshq/visual-unit/src/firebolt/helper';\nimport {\n payloadGenerator,\n isSideEffectEnabled,\n sanitizePayloadCriteria,\n prepareSelectionSetMap\n} from '@chartshq/visual-unit';\nimport { TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects';\nimport { FRAGMENTED } from '@chartshq/muze-firebolt/src/enums/constants';\nimport { applyInteractionPolicy } from '../helper';\nimport {\n propagateValues,\n isCrosstab,\n addSelectedMeasuresInPayload,\n resetSelectAction,\n dispatchBehaviours,\n attachBehaviours\n} from './helper';\nimport { COMMON_INTERACTION } from '../../constants';\n\nconst setSideEffectConfig = (firebolt) => {\n const tooltipSideEffect = firebolt.sideEffects().tooltip;\n const allFields = firebolt.context.composition().visualGroup.resolver().getAllFields();\n\n if (isCrosstab(allFields)) {\n tooltipSideEffect.config({\n selectionSummary: {\n order: 1,\n className: 'tooltip-content-container-selectionSummary-crosstab',\n showMultipleMeasures: true\n },\n highlightSummary: {\n order: 0,\n className: 'tooltip-content-container-highlightSummary-crosstab'\n }\n });\n } else {\n tooltipSideEffect.config({\n selectionSummary: {\n order: 0,\n className: 'tooltip-content-container-selectionSummary-default',\n showMultipleMeasures: false\n },\n highlightSummary: {\n order: 1,\n className: 'tooltip-content-container-highlightSummary-default'\n }\n });\n }\n};\n\nconst prepareSelectionSetData = (group, dataModel) => {\n const valueMatrix = group.matrixInstance().value;\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.values(fieldsConfig).filter(d => d.def.type === FieldType.DIMENSION);\n const hasMeasures = Object.keys(dataModel.getFieldspace().getMeasure()).length;\n const measureName = hasMeasures ? [ReservedFields.MEASURE_NAMES] : [];\n const keys = {};\n const dimensionsMap = {};\n const unitDimsMap = {};\n\n valueMatrix.each((cell) => {\n const unit = cell.source();\n const dm = unit.data();\n const unitDims = dm.getSchema().filter(field => field.type === FieldType.DIMENSION).map(field => field.name);\n const facetFields = Object.keys(unit.facetFieldsMap());\n\n unitDimsMap[unitDims] = {\n inst: unit,\n dims: [...facetFields, ...unitDims]\n };\n });\n\n const groupDataMap = {};\n\n dataModel.getData().data.forEach((row) => {\n for (const key in unitDimsMap) {\n const { dims } = unitDimsMap[key];\n const dimKey = dims.map(dim => row[fieldsConfig[dim].index]);\n groupDataMap[dimKey] = row;\n }\n });\n\n valueMatrix.each((cell) => {\n const unit = cell.source();\n const dm = unit.data();\n const layers = unit.layers();\n const unitDims = dm.getSchema().filter(field => field.type === FieldType.DIMENSION).map(field => field.name);\n const facetMap = unit.facetFieldsMap();\n const facetFields = Object.keys(facetMap);\n const unitFieldsConfig = dm.getFieldsConfig();\n const linkedRows = [];\n\n dm.getData().data.forEach((row) => {\n const dimKey = [...facetFields.map(field => facetMap[field]), ...unitDims.map(d =>\n row[unitFieldsConfig[d].index])];\n const linkedRow = groupDataMap[dimKey];\n\n if (linkedRow) {\n linkedRows.push(linkedRow);\n }\n });\n\n prepareSelectionSetMap({\n data: linkedRows,\n uids: dm.getUids(),\n dimensions\n }, layers, {\n keys,\n dimensionsMap\n });\n });\n\n const dimensionFields = dimensions.length ? [...dimensions.map(d => d.def.name)] :\n [ReservedFields.ROW_ID];\n\n return {\n keys,\n dimensionsMap,\n dimensions: dimensionFields,\n allFields: [...dimensionFields, ...measureName]\n };\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, firebolt) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = firebolt.sourceCanvas();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n '*': (propagationPayload, firebolt) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = firebolt.sourceCanvas();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n },\n selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.payloadGenerators(payloadGenerator);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\n }\n\n static defaultInteractionPolicy () {\n return () => {};\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n const context = this.context;\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n\n applyInteractionPolicy(this);\n const throwback = context._throwback;\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n this.config(this.context.config().interaction);\n applyInteractionPolicy(this);\n const group = this.context.composition().visualGroup;\n if (group) {\n setSideEffectConfig(this);\n\n const { keys, dimensions, dimensionsMap, allFields } = prepareSelectionSetData(group,\n group.getGroupByData());\n this._metaData = {\n dimensionsMap,\n dimensions,\n allFields\n };\n this.createSelectionSet({ keys, fields: dimensions });\n group.getGroupByData().on('propagation', (data, config) => {\n this.handleDataModelPropagation(data, config);\n });\n // Dispatch pseudo select behaviour for highlighting measures with common dimensions in crosstab\n attachBehaviours(group);\n }\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n handleDataModelPropagation (data, config) {\n const group = this.context.composition().visualGroup;\n const valueMatrix = group.matrixInstance().value;\n const units = group.resolver().units();\n const propagationData = data;\n // @todo refactor this code\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n const { interaction: { behaviours: behaviourConfs = {} } } = this.context.config();\n const mode = behaviourConfs[action];\n if (mode !== COMMON_INTERACTION) {\n return this;\n }\n\n const payloadFn = this.getPayloadGeneratorFor(action);\n const payload = payloadFn(this, propagationData, config);\n\n const behaviourPolicies = this._behaviourPolicies;\n const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, this, {\n sourceIdentifiers,\n propagationData\n }));\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled;\n }\n\n if (enabled) {\n const propagationInf = {\n propagate: false,\n data: propagationData,\n propPayload,\n sourceIdentifiers,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(action, behaviourEffectMap);\n const sideEffectInstances = this.sideEffects();\n const { instance: unit = units[0][0] } =\n valueMatrix.findPlaceHolderById(propPayload.sourceUnit) || {};\n\n sideEffects.forEach(({ effects }) => {\n effects.forEach((effect) => {\n const name = effect.name;\n const inst = sideEffectInstances[name];\n\n if (inst) {\n inst.sourceInfo(() => unit.getSourceInfo());\n inst.layers(() => unit.layers());\n inst.plotPointsFromIdentifiers((...params) =>\n unit.getPlotPointsFromIdentifiers(...params));\n inst.drawingContext(() => unit.getDrawingContext());\n inst.valueParser(unit.valueParser());\n }\n });\n });\n\n if (propPayload.sourceUnit) {\n addSelectedMeasuresInPayload(this, unit, payload);\n }\n\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n\n return this;\n }\n\n target () {\n return 'visual-group';\n }\n\n mapActionsAndBehaviour () {\n const unitMatrix = this.context.composition().visualGroup.matrixInstance().value;\n\n unitMatrix.each((unit) => {\n const firebolt = unit.source().firebolt();\n firebolt.mapActionsAndBehaviour();\n });\n\n this.registerPhysicalActionHandlers();\n }\n\n registerPhysicalActionHandlers () {\n const unitMatrix = this.context.composition().visualGroup.matrixInstance().value;\n\n unitMatrix.each((cell) => {\n const unit = cell.source();\n const firebolt = unit.firebolt();\n\n firebolt.onPhysicalAction('*', (event, payload) => {\n this.handlePhysicalAction(event, payload, unit);\n }, this.context.constructor.formalName());\n });\n\n return this;\n }\n\n handlePhysicalAction (event, payload, unit) {\n const firebolt = unit.firebolt();\n const { behaviours } = firebolt._actionBehaviourMap[event];\n dispatchBehaviours(this, { behaviours, payload, unit });\n // Reset select action when dragging is done. Remove this when brush and select will be unioned\n resetSelectAction(this, { behaviours, payload, unit });\n }\n\n sanitizePayload (payload) {\n const { criteria } = payload;\n const { allFields: fields, dimensionsMap } = this._metaData;\n\n return Object.assign({}, payload,\n {\n criteria: sanitizePayloadCriteria(criteria, fields, {\n dm: this.data(),\n dimensionsMap,\n dimsMapGetter: this._dimsMapGetter\n })\n });\n }\n\n createSelectionSet (...params) {\n super.createSelectionSet(...params);\n\n this._dimsMapGetter = createMapByDimensions(this, this.data());\n\n return this;\n }\n\n id () {\n return this.context.alias();\n }\n\n shouldApplySideEffects (propInf) {\n return propInf.applySideEffect !== false;\n }\n\n data () {\n return this.context.composition().visualGroup.getGroupByData();\n }\n\n getRangeFromIdentifiers ({ criteria, fields }) {\n return fields.reduce((acc, v) => {\n acc[v] = criteria[v];\n return acc;\n }, {});\n }\n\n propagate (behaviour, payload, identifiers, auxConfig = {}) {\n propagateValues(this, behaviour, Object.assign({\n payload,\n identifiers,\n propagationFields: this._propagationFields,\n sourceId: this.id(),\n sourceCanvasId: this.id(),\n propagationDataSource: this.data()\n }, auxConfig));\n }\n\n getPropagationSource () {\n return this.data();\n }\n\n sourceCanvas () {\n return this.context.alias();\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n if (payload.sideEffects) {\n return [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }];\n }\n const { mode } = this.context.config().interaction.tooltip;\n propagationInf.propPayload = propagationInf.propPayload || payload;\n sideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n if (se.name === TOOLTIP && mode === FRAGMENTED) {\n return false;\n }\n return isSideEffectEnabled(this, { se, propagationInf });\n });\n d.effects = mappedEffects;\n });\n return sideEffects;\n }\n}\n","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport UnitBrushBehaviour from '@chartshq/visual-unit/src/firebolt/behaviours/brush';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null,\n propagationInfo: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, {\n brush: UnitBrushBehaviour\n }),\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with canvas.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const param = params[0];\n const components = Object.assign({}, param.components);\n const componentSubRegistry = Object.assign({}, param.componentSubRegistry);\n const interactionRegistry = Object.assign({}, param.interactions);\n\n this._registry = { components, componentSubRegistry, interactions: interactionRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n *\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n\n this.firebolt().mapActionsAndBehaviour();\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\nimport { registry as interactionRegistry } from '@chartshq/muze-firebolt';\n\nexport const COMPONENTS = {\n [VisualGroup.formalName()]: VisualGroup,\n [VisualUnit.formalName()]: VisualUnit\n};\n\nexport const SUBREGISTRIES = {\n cells: cellRegistry,\n layers: layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\nconst componentRegistry = (components = COMPONENTS) => {\n const reg = Object.assign({}, components);\n\n return {\n register: (cls) => {\n const key = cls.formalName();\n reg[key] = cls;\n return componentRegistry;\n },\n get: () => reg\n };\n};\n\nexport const registry = {\n components: componentRegistry(COMPONENTS),\n cells: cellRegistry(),\n layers: layerRegistry(),\n interactions: interactionRegistry\n};\n","import * as utils from 'muze-utils';\n\nimport { VisualUnit, helpers as unitHelpers, enums as unitEnums, UnitFireBolt } from '@chartshq/visual-unit';\nimport { VisualGroup, Encoders, encoderHelpers, groupUtils, enums as groupEnums } from '@chartshq/visual-group';\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect,\n Firebolt\n} from '@chartshq/muze-firebolt';\nimport {\n layerFactory,\n BaseLayer,\n LineLayer,\n TextLayer,\n TickLayer,\n PointLayer,\n helpers,\n enums,\n SimpleLayer,\n AreaLayer,\n ArcLayer,\n layerMixins\n} from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { registry as globalRegistry, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\nconst {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n Store\n} = utils;\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = globalRegistry.components;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n overrideRegistry.forEach((def) => {\n registry.register(def);\n });\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, globalRegistry.components.get());\n const componentSubRegistryDef = Object.assign({}, SUBREGISTRIES);\n\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop](globalRegistry[prop].get());\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry,\n interactions: globalRegistry.interactions\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n overrideRegistry.forEach((def) => {\n const prop = def.formalName();\n if (prop in defaultRegistry) {\n components[prop] = def;\n }\n });\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry, cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry, layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nmuze.registry = globalRegistry;\n\nmuze.Components = {\n VisualLayer: {\n layers: {\n BaseLayer,\n LineLayer,\n TextLayer,\n TickLayer,\n PointLayer,\n SimpleLayer,\n AreaLayer,\n ArcLayer\n },\n helpers,\n enums,\n layerMixins\n },\n VisualUnit: {\n constructor: VisualUnit,\n helpers: unitHelpers,\n enums: unitEnums,\n UnitFireBolt\n },\n VisualGroup: {\n constructor: VisualGroup,\n Encoders,\n encoderHelpers,\n groupUtils,\n enums: groupEnums\n },\n Canvas: {\n constructor: Canvas\n },\n Firebolt: {\n constructor: Firebolt\n }\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = utils;\nmuze.Model = new Store().model.constructor;\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/DataModel/webpack/universalModuleDefinition","webpack://muze/DataModel/webpack/bootstrap","webpack://muze/DataModel/src/index.js","webpack://muze/DataModel/src/enums/data-format.js","webpack://muze/DataModel/src/enums/dimension-subtype.js","webpack://muze/DataModel/src/enums/measure-subtype.js","webpack://muze/DataModel/src/enums/field-type.js","webpack://muze/DataModel/src/enums/filtering-mode.js","webpack://muze/DataModel/src/enums/group-by-functions.js","webpack://muze/DataModel/src/utils/date-time-formatter.js","webpack://muze/DataModel/src/utils/column-major.js","webpack://muze/DataModel/src/utils/extend2.js","webpack://muze/DataModel/src/utils/helper.js","webpack://muze/DataModel/src/field-store.js","webpack://muze/DataModel/src/value.js","webpack://muze/DataModel/src/operator/row-diffset-iterator.js","webpack://muze/DataModel/src/invalid-aware-types.js","webpack://muze/DataModel/src/constants/index.js","webpack://muze/DataModel/src/operator/get-common-schema.js","webpack://muze/DataModel/src/operator/cross-product.js","webpack://muze/DataModel/src/operator/merge-sort.js","webpack://muze/DataModel/src/operator/sort.js","webpack://muze/DataModel/src/operator/data-builder.js","webpack://muze/DataModel/src/operator/difference.js","webpack://muze/DataModel/src/operator/group-by-function.js","webpack://muze/DataModel/src/utils/reducer-store.js","webpack://muze/DataModel/src/operator/natural-join-filter-function.js","webpack://muze/DataModel/src/operator/union.js","webpack://muze/DataModel/src/operator/outer-join.js","webpack://muze/DataModel/src/fields/partial-field/index.js","webpack://muze/DataModel/src/fields/field/index.js","webpack://muze/DataModel/src/fields/dimension/index.js","webpack://muze/DataModel/src/fields/measure/index.js","webpack://muze/DataModel/src/fields/parsers/field-parser/index.js","webpack://muze/DataModel/src/fields/parsers/categorical-parser/index.js","webpack://muze/DataModel/src/fields/categorical/index.js","webpack://muze/DataModel/src/fields/parsers/temporal-parser/index.js","webpack://muze/DataModel/src/fields/helper.js","webpack://muze/DataModel/src/fields/temporal/index.js","webpack://muze/DataModel/src/fields/parsers/binned-parser/index.js","webpack://muze/DataModel/src/fields/binned/index.js","webpack://muze/DataModel/src/fields/parsers/continuous-parser/index.js","webpack://muze/DataModel/src/fields/continuous/index.js","webpack://muze/DataModel/src/fields/parsers/id-parser.js","webpack://muze/DataModel/src/fields/id/index.js","webpack://muze/DataModel/src/fields/field-registry.js","webpack://muze/DataModel/src/field-creator.js","webpack://muze/DataModel/src/default-config.js","webpack://muze/DataModel/src/converter/model/dataConverter.js","webpack://muze/DataModel/node_modules/d3-dsv/src/dsv.js","webpack://muze/DataModel/src/converter/utils/dsv-arr.js","webpack://muze/DataModel/src/converter/utils/dsv-str.js","webpack://muze/DataModel/src/converter/defaultConverters/dsvStringConverter.js","webpack://muze/DataModel/src/converter/utils/flat-json.js","webpack://muze/DataModel/src/converter/defaultConverters/jsonConverter.js","webpack://muze/DataModel/src/converter/defaultConverters/dsvArrayConverter.js","webpack://muze/DataModel/src/converter/defaultConverters/autoConverter.js","webpack://muze/DataModel/src/converter/utils/auto-resolver.js","webpack://muze/DataModel/src/converter/dataConverterStore.js","webpack://muze/DataModel/src/helper.js","webpack://muze/DataModel/src/relation.js","webpack://muze/DataModel/src/datamodel.js","webpack://muze/DataModel/src/operator/group-by.js","webpack://muze/DataModel/src/operator/bucket-creator.js","webpack://muze/DataModel/src/stats/index.js","webpack://muze/DataModel/src/export.js","webpack://muze/DataModel/src/operator/compose.js","webpack://muze/DataModel/src/operator/pure-operators.js","webpack://muze/DataModel/src/operator/natural-join.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/hyperdis/webpack/universalModuleDefinition","webpack://muze/hyperdis/webpack/bootstrap","webpack://muze/hyperdis/src/utils/set.js","webpack://muze/hyperdis/src/utils/index.js","webpack://muze/hyperdis/src/graph-node.js","webpack://muze/hyperdis/src/electric-node.js","webpack://muze/hyperdis/src/graph.js","webpack://muze/hyperdis/src/model.js","webpack://muze/hyperdis/src/index.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/numberArray.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/src/enums/namespace.js","webpack://muze/./packages/muze-utils/src/quick-select.js","webpack://muze/./packages/muze-utils/src/r-tree.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/src/enums/constants.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/join.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/textTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/end.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/store.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/helper.js","webpack://muze/./packages/muze-utils/src/index.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/visual-layer/src/base-layer/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/skip-ticks.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/space-setter.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/helper.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/polar-axis/props.js","webpack://muze/./packages/muze-axis/src/polar-axis/angle-axis.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/polar-axis/radius-axis.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/local-options.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/helper.js","webpack://muze/./packages/visual-layer/src/base-layer/base-mixin.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line-mixin.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area-mixin.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-mixin.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text-mixin.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/helper.js","webpack://muze/./packages/visual-layer/src/layers/point/point-mixin.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-mixin.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick-mixin.js","webpack://muze/./packages/visual-layer/src/layers/tick/helper.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/enums/layer-types.js","webpack://muze/./packages/visual-layer/src/layer-factory/layer-factory.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/visual-layer/src/index.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/selection-set/selection-set.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/entry-exit-set.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/enums/side-effects.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/props.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-firebolt/src/enums/tooltip-strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/fragmented-tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/axis-labels-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/muze-firebolt/src/registry.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/firebolt/behaviours/brush.js","webpack://muze/./packages/visual-unit/src/enums/behaviours.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/firebolt/behaviours/pseudo-select.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/visual-group/src/group-helper/cell-border-applier.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/encoder/props.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/resolver-props.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/helper.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-marker/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/layoutComponent.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/dummy-component.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/layout/src/tree-layout/constants/defaults.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/definitionModel.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/helper/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/tree/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/layout-model/index.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/tree-layout/utils/index.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-point.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-parser.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/helper.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/html-data.js","webpack://muze/./packages/layout/src/tree-layout/renderers/renderer.js","webpack://muze/./packages/layout/src/tree-layout/renderers/html-renderer.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/layout-def.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/index.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/row-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/column-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/view-info-getter.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/layout/src/grid-layout/border-helper.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell-helper.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/components/muze-chart-component.js","webpack://muze/./packages/muze/src/canvas/components/headerComponent.js","webpack://muze/./packages/muze/src/canvas/components/legendComponent.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/helper.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/props.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-component.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/horizontal-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/vertical-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/matrix-component.js","webpack://muze/./packages/muze/src/canvas/components/grid-component.js","webpack://muze/./packages/muze/src/enums/constants.js","webpack://muze/./packages/muze/src/canvas/components/message-component.js","webpack://muze/./packages/muze/src/canvas/components/message-icon.js","webpack://muze/./packages/muze/src/canvas/component-wrapper-maker.js","webpack://muze/./packages/muze/src/canvas/scroll-manager.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/firebolt/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt/group-firebolt.js","webpack://muze/./packages/muze/src/canvas/firebolt/index.js","webpack://muze/./packages/muze/src/canvas/app-state.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","_typeof","DataModel","require","DataFormat","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","DimensionSubtype","CATEGORICAL","TEMPORAL","BINNED","ID","MeasureSubtype","CONTINUOUS","FieldType","MEASURE","DIMENSION","FilteringMode","NORMAL","INVERSE","ALL","GROUP_BY_FUNCTIONS","SUM","AVG","MIN","MAX","FIRST","LAST","COUNT","STD","convertToNativeDate","date","Date","pad","DateTimeFormatter","format","this","dtParams","nativeDate","RegExp","escape","text","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","defVal","val","parsedVal","isFinite","parseInt","defaultRangeParser","range","nVal","toLowerCase","length","getTokenDefinitions","daysDef","short","long","monthsDef","H","index","extract","parser","formatter","getHours","toString","hours","P","M","getMinutes","S","getSeconds","K","getMilliseconds","a","join","day","getDay","A","e","getDate","b","month","getMonth","B","y","result","substring","presentDate","presentYear","Math","trunc","getFullYear","year","Y","getTokenFormalNames","definitions","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","defaultResolver","arg","targetParam","arguments","hourFormat24","hourFormat12","ampmLower","ampmUpper","amOrpm","isPM","findTokens","tokenPrefix","tokenLiterals","keys","occurrence","forwardChar","indexOf","push","token","formatAs","nDate","formattedStr","String","formattedVal","parse","dateTimeStamp","options","extractTokenValue","dtParamSeq","noBreak","dtParamArr","args","resolverKey","resolverParams","resolverFn","param","resolvedVal","splice","apply","checkIfOnlyYear","unshift","tokenObj","lastOccurrenceIndex","occObj","occIndex","targetText","regexFormat","tokenArr","map","obj","occurrenceLength","extractValues","match","shift","getNativeDate","Number","len","v","store","fields","Array","forEach","fieldIndex","from","objectToStrFn","checkCyclicRef","parentArr","bIndex","extend2","obj1","obj2","skipUndef","merge","tgtArr","srcArr","item","srcVal","tgtVal","str","cRef","isArray","getUniqueId","getTime","round","random","isArrEqual","arr1","arr2","formatNumber","detectDataFormat","data","fieldStore","createNamespace","fieldArr","idField","dataId","fieldsObj","_cachedFieldsObj","field","getMeasure","measureFields","_cachedMeasure","schema","type","getDimension","dimensionFields","_cachedDimension","Value","rawValue","formattedValue","getNumberFormattedVal","defineProperties","_value","configurable","writable","_formattedValue","_internalValue","rowDiffsetIterator","rowDiffset","callback","split","diffStr","diffStsArr","start","end","InvalidAwareTypes","config","assign","_invalidAwareValsMap","invalidAwareVals","NULL","NA","NIL","invalid","nil","null","undefined","ROW_ID","DM_DERIVATIVES","SELECT","PROJECT","GROUPBY","COMPOSE","CAL_VAR","BIN","SORT","JOINS","getCommonSchema","fs1","fs2","retArr","fs1Arr","defaultFilterFn","crossProduct","dm1","dm2","filterFn","replaceCommonSchema","jointype","applicableFilterFn","dm1FieldStore","getFieldspace","dm2FieldStore","dm1FieldStoreName","dm2FieldStoreName","commonSchemaList","Error","tmpSchema","_rowDiffset","rowAdded","rowPosition","ii","tuple","userArg","partialField","formattedData","dm1Fields","prepareJoinData","dm2Fields","detachedRoot","tupleObj","cellVal","iii","defSortFn","a1","b1","mergeSort","arr","sortFn","sort","lo","hi","mid","floor","mainArr","auxArr","resolveStrSortOrder","fDetails","strSortOrder","sortOrder","dataType","sortType","retFunc","groupData","hashMap","Map","groupedData","datum","fieldVal","has","set","createSortingFnArg","groupedDatum","targetFields","targetFieldDetails","label","reduce","acc","next","idx","applyStandardSort","sortingDetails","fieldName","sortMeta","fieldInSchema","sortingFn","slice","f","dataBuilder","colIdentifier","idData","retObj","uids","addUid","columnWise","reqSorting","tmpDataArr","colName","subtype","insertInd","dataObj","filter","sDetial","groupSortingIdx","findIndex","standardSortingDetails","groupSortingDetails","applyGroupSort","depColumns","detail","sortedGroupMap","makeGroupMapAndSort","targetCol","currRow","fVal","u","iterator","done","nMap","row","nextMap","pop","tmpData","difference","hashTable","schemaNameArr","dm1FieldStoreFieldObj","dm2FieldStoreFieldObj","_colIdentifier","prepareDataHelper","dm","addData","hashData","schemaName","getFilteredValues","sum","filteredNumber","curr","avg","totalSum","isNaN","fnList","filteredValues","min","max","sqrt","mean","pow","num","defaultReducerName","ReducerStore","defReducer","entries","reducer","__unregister","Function","reducerStore","naturalJoinFilter","commonSchemaArr","retainTuple","internalValue","union","leftOuterJoin","dataModel1","dataModel2","rightOuterJoin","PartialField","_sanitize","Field","description","displayName","_params","_context","build","Dimension","_cachedDomain","calculateDataDomain","Measure","unit","defAggFn","numberFormat","FieldParser","CategoricalParser","isInvalid","getInvalidType","trim","Categorical","hash","Set","domain","add","TemporalParser","_dtf","calculateContinuousDomain","POSITIVE_INFINITY","NEGATIVE_INFINITY","Temporal","__proto__","getPrototypeOf","_cachedMinDiff","sortedData","arrLn","minDiff","prevDatum","nextDatum","processedCount","dataFormat","parsedDatum","BinnedParser","matched","parseFloat","Binned","binsArr","bins","ContinuousParser","Continuous","IdValue","wt","valArr","_val","_hash","_valArr","gt","IdParser","values","FieldTypeRegistry","_fieldType","dimension","fieldRegistry","registerFieldType","createFields","dataColumn","headers","headersObj","header","BUILDER","Pt","DataConverter","_type","EOL","EOF","objectConverter","columns","JSON","stringify","inferColumns","rows","columnSet","column","width","Bt","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","N","I","eof","eol","j","preformatBody","formatValue","formatRow","formatDate","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","test","convert","concat","formatBody","formatRows","DSVArr","schemaFields","unitSchema","firstRowHeader","columnMajor","headerMap","h","schemaField","headIndex","DSVStr","fieldSeparator","dsv","d3Dsv","DSVStringConverter","FlatJSON","insertionIndex","schemaFieldsName","JSONConverter","DSVArrayConverter","AutoDataConverter","Auto","converters","DataConverterStore","_getDefaultConverters","converter","converterStore","resp","persistDerivations","sourceDm","model","operation","persistCurrentDerivation","criteriaFn","_derivation","cn","op","meta","criteria","persistAncestorDerivation","newDm","_ancestorDerivation","selectModeMap","diffIndex","calcDiff","generateRowDiffset","lastInsertedValue","li","selectRowDiffsetIterator","checker","newRowDiffSet","rejRowDiffSet","on","shouldSelect","shouldReject","checkerResult","rejectRowDiffset","selectHelper","clonedDm","selectFn","cachedStore","cloneProvider","cachedValueObjects","_partialFieldspace","_cachedValueObjects","keyFn","rowId","domainChecker","some","dom","boundsChecker","filterPropagationModel","propModels","fns","filterByDim","filterByMeasure","clone","clonedModel","cloneWithAllFields","partialFieldspace","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","modelFieldsConfig","getFieldsConfig","identifiers","fieldNames","indices","dLen","def","valuesMap","g","ids","id","rangeKeys","hasData","present","getKey","fn","every","isWithinDomain","fieldType","propModel","select","saveChild","addDiffsetToClonedDm","selectConfig","cloneWithProject","projField","allFields","cloned","projectionSet","actualProjField","sanitizeUnitSchema","sanitizeAndValidateSchema","updateData","relation","defaultConfig","dataHeader","fieldNameAs","as","idIndex","rowLength","fill","nameSpace","valueObjects","rawFieldsData","formattedFieldsData","idFieldData","rawData","_","_dataFormat","applyExistingOperationOnModel","dataModel","selectionModel","getDerivations","derivation","params","groupByString","getRootGroupByModel","_parent","find","propagateToAllDataModels","rootModels","propagationInf","propagationNameSpace","propagateToSource","propagationSourceId","sourceId","addGroupedModel","conf","crit","groupedModel","criterias","actionCriterias","mutableActions","filteredCriteria","entry","excludeModels","sourceActionCriterias","actionInf","actionConf","applyOnSource","action","models","path","getPathToRootModel","propagationSource","rootModel","propConfig","sourceIdentifiers","inf","propagationModel","filteredModel","reverse","handlePropagation","propagateIdentifiers","propModelInf","_children","child","matchingCriteria","getNormalizedProFields","fieldConfig","normalizedProjField","constructor","search","Relation","Hn","source","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","updateFields","fieldStoreName","collID","partialFieldMap","newFields","coll","joinWith","unionWith","differenceWith","defConfig","cloneConfig","extraCloneDm","setOfRowDiffsets","setParent","_fieldConfig","fieldObj","removeChild","sibling","parent","Wn","Xn","_onPropagation","order","withUid","getAllFields","dataGenerated","fmtFieldIdx","elem","fIdx","fmtFn","datumIdx","fieldsArr","reducers","newDataModel","groupBy","sFieldArr","dimensions","Oe","reducerObj","measures","defaultReducer","measureName","reducerFn","resolve","fieldStoreObj","dbName","dimensionArr","measureArr","rowCount","idMap","getData","dataInCSVArr","sortedDm","colData","rowsCount","serializedData","rowIdx","colIdx","fieldinst","dependency","replaceVar","fieldsConfig","depVars","retrieveFn","depFieldIndices","fieldSpec","fs","suppliedFields","computedValues","fieldsData","Gn","addField","addToNameSpace","isMutableAction","payload","getRootDataModel","groupByModel","addToPropNamespace","sourceNamespace","propagateImmutableActions","filterImmutableAction","criteriaModel","eventName","measureFieldName","binFieldName","createBinnedFieldData","measureField","buckets","binsCount","binSize","dMin","dMax","ceil","abs","bucketRanges","binnedData","leftIdx","rightIdx","midIdx","binField","serialize","getSchema","rowSplitDiffsetIterator","splitRowDiffset","dimensionMap","dimensionSet","clonedDMs","uniqueFields","commonFields","normalizedProjFieldSets","fieldSet","splitWithProject","projFieldSet","projFields","first","last","count","sd","std","Operators","compose","operations","currentDM","firstChild","derivations","dispose","bin","project","calculateVariable","naturalJoin","fullOuterJoin","version","Stats","FieldsUtility","enums","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","default","_lib2","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","container","useEllipses","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","height","_getWidthFn","contObj","_containerObj","svgText","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","x","minWidth","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","makeEntry","sCon","_classCallCheck","_set","set1","set2","filteredKeys","s1","s2","ForeignSet","isSimpleObject","reqAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","getTimeBasedId","__lastTime","__id","flat","res","scheduler","onFinishCallback","queue","animationFrame","listeners","tempQ","unique","fetch","namedNode","qualifiedName","seed","fetchAggregator","dependencies","getUpstreamNodes","list","rec","qname","placedIndex","preArr","postArr","outgoingEdges","resolver","accumulate","nodeDetails","identity","CustomResolver","utils_classCallCheck","dep","_dep","graph_node_classCallCheck","edges","_seed","requireResolve","retriever","history","electricEdges","_edges","_this","retrieveDetails","edge","head","hist","TypeError","electric_node_classCallCheck","nextFrame","currentFrame","lstnrs","nodes","nFn","_this2","qualifiedNodeMap","graph_node","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flushTarget","flush","mount","resolveReqList","objn","perv","addDependencies","_node","getDependencies","getResolvedList","props","fnSpec","eNode","_ref","electric_node","addEdges","addElectricNode","changedSet","upstreamNodes","upstreamNode","append","__execUniqueElectricEdges","cfLstnrs","nfLstnrs","toArray","_this3","repeatHead","resetPropagationOverride","qnames","_this4","update","resolved","resolveDependencyOrder","resolveMap","neighbour","isRoot","model_classCallCheck","_graph","graph","_lockFlag","_reqQ","mountPoint","_addPropInModel","calculationConfig","customResolver","varName","fetchFn","_customResolver","createNodesFrom","instantCall","_graph$stopPropagatio","propsArr","unsub","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","_graph$stopPropagatio2","setProp","getNodeValue","getNodeFromQualifiedName","Model","__webpack_exports__","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","each","remove","clear","empty","src_nest","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","keyValue","valuesByKey","createObject","setObject","createMap","setMap","sortKey","k","proto","implicit","ordinal","unknown","scale","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","side","highVal","d1","low","high","src_number","extend","definition","Color","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","exec","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","channels","displayable","formatHsl","color_formatHsl","brighter","darker","src_constant","linear","hue","constant","gamma","nogamma","exponential","src_rgb","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","numberArray","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","reA","reB","src_string","am","bm","bs","bi","lastIndex","q","one","zero","src_value","value_typeof","string","setTime","valueOf","src_round","d3_scale_src_constant","d3_scale_src_number","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","bisect","target","interpolate","clamp","continuous","piecewise","output","input","interpolateValue","deinterpolateClamp","reinterpolateClamp","interpolateRound","re","formatSpecifier","specifier","FormatSpecifier","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","formatDecimal","toExponential","coefficient","src_exponent","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","X","toUpperCase","src_identity","prefixes","src_locale","group","grouping","thousands","formatGroup","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","interval","x0","x1","pow10","powp","base","E","exp","logp","log10","log2","reflect","logs","pows","z","raise","thresholds","threshold","quantiles","quantize","t0","newInterval","floori","offseti","offset","previous","setMonth","setHours","setFullYear","setDate","durationMinute","durationWeek","weekday","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","hour","minute","second","millisecond","utcWeekday","setUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","localDate","L","utcDate","UTC","newDate","timeFormat","pads","-","0","numberRe","percentRe","requoteRe","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","formatWeekNumberISO","timeThursday","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","formatQuarter","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","formatUTCQuarter","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","newParse","week","utcFormat","utcParse","durationSecond","durationHour","durationDay","durationMonth","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","src_time","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds","src_colors","deg2rad","PI","rad2deg","C","D","ED","EB","BC_DA","cubehelix","cubehelixConvert","Cubehelix","bl","atan2","cubehelixGamma","colorCubehelix","cosh","cos","sinh","sin","cubehelixLong","interpolateCubehelixLong","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","src_ramp","scheme","interpolateRgbBasis","magma","inferno","plasma","warm","cool","sequential_multi_rainbow","ts","UNIT_GLOBAL_NAMESPACE","UNIT_LOCAL_NAMESPACE","LAYER_LOCAL_NAMESPACE","LAYER_GLOBAL_NAMESPACE","GROUP_GLOBAL_NAMESPACE","GROUP_LOCAL_NAMESPACE","CANVAS_LOCAL_NAMESPACE","CANVAS_GLOBAL_NAMESPACE","swap","tmp","defaultCompare","quickselect","quickselectStep","createNode","leaf","minX","minY","maxX","maxY","distBBox","toBBox","destNode","calcBBox","compareNodeMinX","compareNodeMinY","bboxArea","bboxMargin","enlargedArea","intersectionArea","contains","intersects","findItem","items","equalsFn","multiSelect","stack","all","nodesToSearch","_toConsumableArray","RTree","maxEntries","_maxEntries","_minEntries","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","childBBox","err","insert","splitRoot","tmpNode","insertSingleItem","goingUp","indexes","condense","N2","N1","compareMinX","right2","compareMinY","right3","level","minArea","minEnlargement","targetNode","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","area","enlargement","isNode","insertPath","chooseSubtree","adjustParentBoxes","chooseSplitAxis","splitIndex","chooseSplitIndex","newNode","minOverlap","bbox1","bbox2","overlap","allDistMargin","leftBBox","rightBBox","margin","siblings","ReservedFields","MEASURE_NAMES","CommonProps","ACTION_INF","ON_LAYER_DRAW","MATRIX_CREATED","COORD_TYPES","POLAR","CARTESIAN","DATA_TYPE","d3_axis_src_identity","bottom","epsilon","translateX","translateY","entering","__axis","axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","transform","spacing","range0","range1","center","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","transition","getAttribute","tickSize","pi","halfPi","tau","asin","symbol_circle","draw","moveTo","arc","symbol_cross","lineTo","closePath","tan30","tan30_2","diamond","square","rect","kr","kx","ky","star","wye","y0","y1","x2","y2","sqrt3","triangle","tauEpsilon","Path","_x0","_y0","_x1","_y1","quadraticCurveTo","bezierCurveTo","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","a0","ccw","dx","dy","cw","da","d3_shape_src_constant","none","series","order_ascending","sums","offset_none","s0","stackValue","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","Step","_t","_x","_y","curve_step","stepBefore","stepAfter","that","_k","_x2","_y2","Cardinal","tension","custom","cardinal","CatmullRom","alpha","_alpha","_l01_a","_l12_a","_l23_a","_l01_2a","_l12_2a","_l23_2a","x23","y23","curve_catmullRom","catmullRom","src_line","pointX","pointY","defined","curve","curveLinear","buffer","defined0","src_descending","d3_shape_src_identity","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","colorHsl","hslLong","cubicInOut","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","elasticOut","elasticIn","amplitude","period","backInOut","elasticInOut","backIn","overshoot","backOut","polyInOut","polyIn","polyOut","d3_voronoi_src_constant","RedBlackTree","RedBlackNode","R","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","createEdge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","Selection","idGetter","selection_classCallCheck","_dataObjects","_updateData","_enterData","_exitData","_idGetter","newData","entryData","exitdata","tempMap","duplicateData","updatedData","newSelection","dataObjects","defaultValue","_mode","mergedObjects","mergedData","newdata","sortSel","sortSelection","kA","kB","selection_toConsumableArray","objects","dataSelect","idFn","STRING","FUNCTION","HTMLElement","common_utils_typeof","checkExistence","nonExistentKeys","sanitizeIP","typeObj","htmlElem","getMax","common_utils_toConsumableArray","getMin","getDomainFromData","domArr","_loop","_fields","_slicedToArray","field0","field1","arr0","firstMin","secondMin","firstMax","secondMax","sanitizeDomainWhenEqual","unionDomain","domains","_ref2","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getExtremePoint","points","compareValue","minOrMax","extremePoint","minOrMaxVal","getMinPoint","getMaxPoint","getNearestValue","filterData","getWindow","cancelAnimFrame","cancelAnimationFrame","capitalizeFirst","txt","vals","getMinDiff","uniqueVals","getQualifiedClassName","cls","getDependencyOrder","dependencyOrder","visited","visit","objectIterator","Voronoi","common_utils_classCallCheck","_voronoi","_voronoiFn","getObjProp","_len","_key","intSanitizer","generateGetterSetters","propInfo","_propInfo$","sanitization","preset","onset","typeChecker","getArraySum","total","arraysEqual","isEqual","oldVal","newVal","is","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","registerImmediateListener","_ref3","isHTMLElem","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","createSelection","sel","appendObj","mergedSelection","exitSelection","getObjects","inst","interpolateArray","fitCount","linearInterpolate","atPoint","springFactor","angleToRadian","angle","replaceCSSPrefix","numberInterpolator","interpolateNumber","colorInterpolator","interpolateRgb","hslInterpolator","interpolateHslLong","transformColors","piecewiseInterpolator","hue2rgb","hslToRgb","rgbToHsv","hsvToRgb","hexToHsv","hslaToRgb","_hslToRgb2","RGBAtoRGB","r2","g2","r3","g3","detectColor","col","assembleModelFromIdentifiers","fieldMap","_loop2","temp","cIdx","getDataModelFromRange","criteriaFields","selFields","selFn","fieldValue","getArrayIndexMap","getDataModelFromIdentifiers","hasBarLayer","filteredDataModel","dataArr","filteredSchema","include","propField","registerListeners","listenerMap","_len2","_key2","propListenerMap","namespace","mapObj","propType","listenerFn","listener","isValidValue","escapeHTML","htmlEscapes","&","<",">","\"","'","/","transposeArray","extendsClass","extendsFrom","found","concatModels","dataObj1","dataObj2","data1","data2","schema1","schema2","commonTuples","_loop3","row1","row2","dim1Values","dim2Values","dm1Key","dm2Key","commonSchema","getSymbol","stackOrders","_defineProperty","_stackOrders","stackOrderNone","stackOrderAscending","stackOffsets","_stackOffsets","yp","yn","stackOffsetNone","si","sij0","s3","sk","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","nestCollection","nestFn","getArrayDiff","el","pathInterpolators","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","pie","descending","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","scaleBand","getSmallestDiff","timeFormats","timeDurations","formatTemporal","nearestInterval","getNearestInterval","temporalFields","filteredFields","_ref5","_ref6","lookupWhat","lookupDetails","resolvable","lookupTarget","depArr","deps","nextAnimFrame","getValueParser","retrieveNearestGroupByReducers","_len3","measureFieldNames","_key3","filteredReducers","getAncestorDerivations","nearestReducers","derv","retrieveFieldDisplayName","nearestSortingDetails","nearestSortDerivation","sortingOrder","localeCompare","sortOrderMap","_sortOrderMap","firstVal","secondVal","sortCategoricalField","sortOrderType","_accessors","fn1","fn2","_accessors2","partition","mix","superclass","with","_with","_len4","mixins","_key4","mixin","componentRegistry","comps","reg","regObj","register","customKey","formalName","getReadableTicks","steps","orderedDomain","tempScale","scales","legendTicks","transformColor","rgbaValues","_ref7","_ref7$h","_ref7$s","_ref7$l","_RGBAToHSLA$code","RGBAToHSLA","cmin","cmax","delta","code","origH","origS","origL","origA","sanitizedA","newH","newS","newL","newA","pointWithinCircle","dmMultipleSelection","targetData","payloadMap","currentField","getIndexMap","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","sparse","EnterNode","ownerDocument","namespaceURI","_next","__data__","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","xhtml","src_namespaces","xlink","xml","xmlns","src_namespace","namespaces","space","local","src_window","defaultView","styleValue","getPropertyValue","getComputedStyle","classArray","classList","ClassList","_names","classedAdd","classedRemove","textRemove","htmlRemove","nextSibling","lower","previousSibling","creator","fullname","creatorFixed","creatorInherit","uri","documentElement","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_select","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","noop","Dispatch","T","types","current","mouse","changedTouches","src_touch","touches","identifier","touch","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","maxTouchPoints","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","taskHead","taskTail","frame","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","self","tween","state","duration","ease","schedule","cssNode","cssRoot","cssView","svgNode","degrees","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","tweenValue","_id","transition_interpolate","interpolateString","Transition","_name","newId","selection_prototype","inherit","id0","id1","onFunction","on0","on1","sit","attrTween","string00","string10","interpolate0","string0","string1","value1","attrTweenNS","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleMaybeRemove","listener0","styleInterpolate","textTween","textInterpolate","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Promise","reject","cancel","interrupt","defaultTiming","easeCubicInOut","selectElement","element","makeElement","elemType","callbacks","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","applyStyle","appendElement","element1","element2","setElementAttrs","attrs","setAttrs","addClass","removeClass","setStyles","styles","createElements","clipElement","measurement","clipPathElement","getMousePos","boundingClientRect","getClientPoint","pos","clientPoint","tag","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","initProp","fetchPropValues","propNames","setContexts","contexts","propObj","contextMap","depProps","registerListener","propList","callBack","_options$","namespaceInf","callbackFn","namespaceVal","commits","_savedCommits","_propListenerMap","listenersObj","_registeredListeners","_contextMap","contextsObj","commitsObj","subNamespaces","propDeps","nm","fnInf","store_toConsumableArray","registerPropInMaps","registeredListeners","subNamespace","allProps","_fnCount","addListenerToNamespace","_listeners","namespaceListeners","listenerTypes","removePropValue","propInf","sns","Store","store_classCallCheck","_commits","_queuedProps","_locked","store_createClass","lockModel","lock","unlockModel","unlock","lockCommits","locked","unlockCommits","queuedProps","store_slicedToArray","propName","_params2","commit","addSubNamespace","propFns","nsObj","retrieveNamespaces","disableListener","sanitizedVal","savedCommits","disabled","registerChangeListener","computed","calculatedProp","_this$model","unsubscribeAll","unsubscribe","listenersMap","removeSubNamespace","snsMap","transactor","holder","stateProps","nameSpaceProp","nsProp","_len5","_key5","_ref$takesMultiplePar","takesMultipleParams","prevVal","typeCheck","typeExpected","oldValues","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","_preparePromises","promise","_makeNotifierPromise","createPromise","then","prm","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","CLASSPREFIX","STACK","GROUP","IDENTITY","ANGLE","RADIUS","SIZE","COLOR","SHAPE","TEXT","OUTER_RADIUS_VALUE","TEXT_ANCHOR_MIDDLE","ENCODING","X0","Y0","RADIUS0","ANGLE0","STROKE_DASHARRAY","ASCENDING","AGG_FN_SUM","AREA_LAYER","ARC_LAYER","LINE_LAYER","TEXT_LAYER","POINT_LAYER","BAR_LAYER","TICK_LAYER","SIMPLE_LAYER","BASE_LAYER","SimpleLayer","DATA","CONFIG","MEASUREMENT","DOMAIN","MOUNT","props_defineProperty","_props","axes","metaInf","valueParser","coord","PROPS","_customConfig","newConf","defaultPolicy","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","AxisOrientation","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","SEQUENTIAL","THRESHOLD","CONTINOUS","DISCRETE","HIDDEN","DEFAULT_ANGLE_DOMAIN","scaleLinear","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","ScaleType","createScale","scaleFactory","adjustRange","axisName","defClassName","axisNamePadding","classPrefix","fixedBaseline","labels","rotation","smartTicks","orientation","numberOfTicks","show","showAxisName","showInnerTicks","showOuterTicks","xOffset","yOffset","defaultSort","changeTickOrientation","selectContainer","axisInstance","_smartTicks","renderConfig","labelManager","isSmartTicks","tickText","registerAnimationDoneHook","rotateAxis","instance","getTickSize","yShift","xShift","tickLabelDim","quadrant","rotationNormalizer","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","availableSpace","longestWord","quarter","halfYearly","mintues","getTickIntervalFnBasedOnNumberOfTicks","possibleTickLevelIndex","maxPossibleTicks","tickIntervalLevelInfo","tickIntervalInfo","numOfPossibleTicks","getActualTickInterval","noOfTicks","minWidthBetweenTicks","_minTickDistance","getTickIntervalBasedOnCurrentLevel","_dependencies","longestWordType","applyTickSkipping","minTickDistance","minTickSpace","_minTickSpace","minTickWidth","maxTicks","getSkippedTicks","actualNumberOfTicks","_minDiff","millisecondInterval","numOfTicksAccordingToMinDiff","adjustHorizontalRange","adjustVerticalRange","rangeAdjustmentMap","space_setter_defineProperty","_rangeAdjustmentMap","setAxisRange","rangeBounds","getAdjustedRange","getAxisOffset","timeDiff","avWidth","bars","spaceSetter","spaceConfig","heightForTicks","_context$availableSpa2","availWidth","availHeight","isOffset","_context$renderConfig2","_context$getAxisDimen","getAxisDimensions","tickDimensions","allTickDimensions","axisNameDimensions","tickDimHeight","tickDimWidth","namePadding","labelConfig","minTickHeight","getTickValues","tickShifter","maxTickSpaces","widthForTicks","totalTickWidth","getRotatedSpaces","rotatedHeight","rotatedWidth","setOffset","logicalSpace","getAxisComponentDimensions","axisTicks","largestTick","largestTickDimensions","smartTick","_context$renderConfig","labelFunc","_tickLabelStyle","originalLabel","getFormattedText","_axisNameStyle","getHorizontalAxisSpace","axisDimensions","_context$config2","axisDimHeight","minTickDiff","getMinTickDifference","helper_toConsumableArray","getVerticalAxisSpace","_context$config3","calculateBandSpace","largestDimHeight","_getHorizontalAxisSpa","_getVerticalAxisSpace","getValidDomain","userDom","setContinousAxisDomain","_domain","axisComponentDimensions","oldConfig","_config","mockedOldConfig","shouldAxesScaleUpdate","hasAxesConfigChanged","properties","tickFormatter","sanitizeTickFormatter","_scale","_axis","createAxis","_tickFormatter","resetRenderConfig","_renderConfig","_maxTickSpaces","SimpleAxis","simple_axis_classCallCheck","_mount","_range","_domainLock","_axisDimensions","defCon","simpleConfig","bodyElem","dist","_animationDonePromises","domainValue","setAxisComponentDimensions","smartAxisName","axisClass","_objectSpread","setTickConfig","setSmartAxisName","_this$config2","dimType","widthDim","getSmartAxisName","oriSize","domainVal","computeAxisDimensions","_getAxisComponentDime","labelHeight","labelWidth","calculateContinousSpace","_context$renderConfig6","axisNameWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","renderAxis","labelProps","tickLabelStyle","axisTickFormatter","labelOffset","tickData","allTicks","elementToBeModified","elementNotToBeModified","tickValue","_getRawTickValue","selectionSet","rejectionSet","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","InterpolatorCls","_interpolator","getScaleValue","_this$renderConfig","sanitizeDomain","_get2","_get","_this$renderConfig2","newTickValues","tickSpace","getNumberOfTicks","labelDim","numberOfValues","tickLength","_this$smartTicks$","BandAxis","_this$maxTickSpaces","_getRotatedSpaces","paddingNormalized","formatTickValue","TimeAxis","_getPrototypeOf2","time_axis_classCallCheck","time_axis_possibleConstructorReturn","time_axis_getPrototypeOf","time_axis_get","rawTicks","resetTickInterval","_context$config8","_context$availableSpa","adjustedRange","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","stops","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","props_toConsumableArray","newConfig","uniqueValues","treatNullMeasures","scaledVal","minDomainScaledVal","resolveAxisConfig","propVal","defaultVal","sanitiseConfigIntervals","intervals","getStops","newStops","color_strategy_toConsumableArray","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","rangeStops","newStopsLength","newRange","continousSteppedDomain","_getStops2","uniqueRange","indexedRange","numVal","normalRange","strategyGetter","domainType","rangeType","schemeType","strategies","color_strategy_defineProperty","domainRange","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","colorSchemes","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleType","scaleInfo","originalDomain","originalRange","originalDomainLen","originalRangeLen","newDomain","_linearScale","rangeVal","domainRangeFn","setRangeWithInterpolatedColors","transformationArr","size_strategy_defineProperty","_strategies","pieceWiseRange","size_strategy_toConsumableArray","newIntervals","discreteRange","_userRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","strategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","createAngleValues","angleData","_angleFn","_angleValues","AngleAxis","angle_axis_classCallCheck","customDomain","customRange","_this$_range","angle_axis_slicedToArray","WIDTH","HEIGHT","MIN_UNIT_WIDTH","MIN_UNIT_HEIGHT","DIMENSIONS","MEASURES","PIVOT","FORMAT","HAS_DATA_UPDATED","ROWS","COLUMNS","COL","ROW","COLUMN","DETAIL","LAYERS","TRANSFORM","RETINAL","CELL","X_AXES","Y_AXES","ENTRY_CELLS","INITIALIZED","EXIT_CELLS","AXIS","UNIT","UPDATED","BEFORE_UPDATE","VALUE_MATRIX","FACET_HEADERS","ARC","BAR","LINE","POINT","PRIMARY","SECONDARY","BOTH","INTERACTION","GRID_LINES","GRID_BANDS","HEADER","FACET","DEFAULT","DESCENDING","DARK","NONE","DARKER","adjustDomain","minOuterRadius","RadiusAxis","radius_axis_classCallCheck","_radiusFactor","sanitizedRange","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","stackData","seriesData","transformFactory","colorAxis","styleType","intensity","interactionType","stateColor","currentState","originalState","colorInfo","applyInteractionStyle","interactionStyles","elements","getPlotElementsFromSet","reset","applyLayerStyle","retrieveEncodingInf","encoding","encodingNames","encodingInf","encodingFieldInfRetriever","helpers_defineProperty","_encodingFieldInfRetr","setNullsInStack","transformedData","setNulls","transformData","transformType","encodingFieldInf","setNullData","connectNullData","xField","yField","xFieldType","yFieldType","getIndividualClassName","individualClassName","classNameStr","dataNormalizers","_dataNormalizers","radiusFieldIndex","angleFieldIndex","radius0FieldIndex","angle0FieldIndex","fieldsLen","pointObj","radius0","angle0","enc","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","getNormalizedData","transformedDataArr","encodingFieldsInf","domainCalculator","_domainCalculator","layerInst","angleValues","radius0Field","xFieldSubType","yFieldSubType","x0Field","y0Field","yEnc","xEnc","defFn","_d$update","attachDataToVoronoi","accessor","helpers_toConsumableArray","_accessor","updateStyle","animateGroup","groupTransition","groupAnimateStyle","effect","positionPoints","positioner","encodingTransform","getGroupSpan","getUnitWidth","getPlotMeasurement","dimensionalValues","fieldInfo","bandScale","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","timeDiffs","innerPadding","isAxisBandScale","axisPadding","groupPadding","renderLayer","render","throwback","parentNamespace","resolveInvalidTransformType","transformResolverPredicates","groupByField","dimensionField","getValidTransform","getValidTransformForAggFn","resolvedInvalidTransformType","_context$encodingFiel","isCustomTransformTypeProvided","getMarkId","resolveEncodingValues","transformedValues","getColorMetaInf","initialStyle","originalStyle","getCoordValue","trig","coordValueGetter","toCartesianCoordinates","rangePlot","_point$update","_coordValueGetter","sortData","axisArr","getBoundBoxes","_point$update2","getDataFromEvent","dataPoint","getIdentifiersFromData","layerId","localOptions","local_options_defineProperty","STATE_NAMESPACES","listener_map_slicedToArray","prevData","dataDidSet","getPreviousStyle","stylesForCurrentLevel","getLastItemInMap","strokeProps","stroke-width","stroke","stroke-opacity","parseStyle","datumStyle","applyStylesOnInteraction","_datum$meta","applicableStyles","strokePosition","applicableStrokePos","sanitizedStyles","parsedStyleVal","currentStyle","styleKeys","_partition2","helper_slicedToArray","strokeStyles","otherStyles","applyStyles","layerNs","groupNs","BaseLayerMixin","_superclass","_class","base_mixin_classCallCheck","base_mixin_possibleConstructorReturn","base_mixin_getPrototypeOf","base_mixin_assertThisInitialized","getterSetters","alias","_points","_cachedData","_measurement","_graphicElems","base_mixin_inherits","base_mixin_createClass","_store","_this$metaInf2","_alias","enableCaching","_cacheEnabled","clearCaching","getTransformedData","calculateDomainFromData","isEmpty","getDataDomain","encodingType","_this$metaInf3","getUidsFromPayload","uidsArr","dmUids","getUids","getNearestPoint","interactionConfig","interaction","resolveTransformType","_transformType","_this$metaInf4","unitDom","cachePoint","pointMap","_pointMap","getInteractionStyles","addOverlayPath","removeOverlayPath","interactionFn","allMeasures","_identifiers$","_identifiers$2","hasPlotSpan","getPlotSpan","getPlotPadding","getPointsFromIdentifiers","getAllAttrs","filteredPoints","base_mixin_toConsumableArray","sizeVal","getTransformedDataFromIdentifiers","measureIndex","_identifiers$getData","identifierData","identifierSchema","_normalizedData","_this$encodingFieldsI","layerName","tupleArr","transformedVal","graphicElems","elems","animationDone","base_mixin_slicedToArray","encodingValue","retrieveEncodingFields","_transformedData","calculateDomain","applyElementStyles","getState","getListeners","getRenderProps","_context$metaInf","unitRowIndex","unitColIndex","base_mixin_defineProperty","getQualifiedStateProps","_construct","userConf","shouldDrawAnchors","BaseLayer","containsNull","getborderIndexes","prevOfNull","nextOfNull","settIndexPrevOrNext","indexesObj","prevContainsNull","nextContainsNull","getElementsForLine","layer","strokeStyle","linepath","updateFns","drawLine","containerSelection","nullDataLineStyle","nullDataLineClass","curveInterpolatorFn","dd","elementWithNullData","sanitizeNullConfig","makeStartEndPair","borderIndexes","pairArray","pair","prevValue","nextValue","fade","focus","brushStroke","crossline","nearestPointThreshold","strokeOpacity","fillOpacity","strokeWidth","LineLayerMixin","line_mixin_classCallCheck","line_mixin_possibleConstructorReturn","line_mixin_getPrototypeOf","line_mixin_inherits","line_mixin_createClass","getDrawFn","translatePoints","xAxis","yAxis","isXDim","isYDim","xPx","yPx","getColor","resolvedEncodings","getTranslatedData","colorValFn","colorFieldIndex","colorVal","getPathStyle","qualifiedClassName","colorField","translatedPoints","seriesClassName","searchRadius","_point$data$data","line_mixin_toConsumableArray","line_mixin_get","drawArea","easeEffect","_map2","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayerMixin","area_mixin_classCallCheck","area_mixin_possibleConstructorReturn","area_mixin_getPrototypeOf","area_mixin_inherits","area_mixin_createClass","area_mixin_get","nearestPoint","dimValue","pointArr","_pointArr$i$update","pointY0","classNameFn","minYVal","basePos","y0Px","invalidY","invalidY0","resolvedValues","AreaLayer","highlight","stroke-linejoin","shape","states","fadeout","selected","ArcLayerMixin","arc_mixin_classCallCheck","arc_mixin_possibleConstructorReturn","arc_mixin_getPrototypeOf","_prevPieData","arc_mixin_inherits","arc_mixin_createClass","_this$axes","radiusAxis","pieIndex","angleV","angles","_angles","uid","getOuterRadius","getInnerRadius","startAngle0","endAngle0","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_context$axes$angle$r2","arc_helper_slicedToArray","_this$config","qualClassName","_arcFn","consecutiveExits","exitCounter","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","ArcLayer","LineLayer","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","alignment-baseline","defaultEncoding","alignmentBaseLine","defRotation","pointTranslators","polar","textEncoding","angleAxis","textFormatter","backgroundEncoding","backgroundValue","text_mixin_objectSpread","cartesian","textField","textFieldIndex","textValue","text_mixin_slicedToArray","TextLayerMixin","text_mixin_classCallCheck","text_mixin_possibleConstructorReturn","text_mixin_getPrototypeOf","text_mixin_inherits","text_mixin_createClass","getPointTranslator","text-anchor","TextLayer","drawSymbols","createShape","groupElement","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","pathEl","exitGroup","defColorStyle","focusStroke","commonDoubleStroke","doubleStroke","anchors","persistent-anchors","brush-anchors","shapes","sizes","prepareDrawingInf","shapeAxis","sizeAxis","getShape","getSize","layerEncoding","helper_defineProperty","_config$offset","offsetX","offsetY","point_helper_slicedToArray","measure","getStrokeWidthByPosition","inside","outside","PointLayerMixin","point_mixin_classCallCheck","point_mixin_possibleConstructorReturn","point_mixin_getPrototypeOf","_overlayPath","formattedUids","point_mixin_inherits","point_mixin_createClass","maxSize","generateDataPoints","point_mixin_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement2","point_mixin_slicedToArray","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","refElement","pathElement","parentElement","styleVal","currentPath","point_mixin_get","PointLayer","drawRects","barEnterFn","transitionBars","selTransition","positionRetriever","isNegativeVal","barBasePos","resolveDimByField","axesInfo","spaceType","sizeEncoding","sizeConfig","sizeValue","enterSpace","minVal","maxVal","diffPx","minDomVal","endPos","_positionRetriever$ty2","bar_helper_slicedToArray","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayerMixin","bar_mixin_classCallCheck","bar_mixin_possibleConstructorReturn","bar_mixin_getPrototypeOf","_plotPadding","_plotSpan","_rtree","bar_mixin_inherits","bar_mixin_createClass","bar_mixin_get","getTranslatedPoints","normalizedDataArr","barContainer","load","bar_mixin_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","pathGroup","_strokeWidthPositionM","strokeWidthPositionMap","L1","L2","L3","BarLayer","tick_renderer","pathElem","angle0Axis","angle0V","angles0","_angles2","tick_mixin_objectSpread","_layerInst$encodingFi","_config$span","xSpan","ySpan","x0Px","TickLayerMixin","tick_mixin_classCallCheck","tick_mixin_possibleConstructorReturn","tick_mixin_getPrototypeOf","tick_mixin_inherits","tick_mixin_createClass","offsetM","offsetL","_ref$position","drawTicks","TickLayer","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","_layerRegistry","getSerializedConf","mark","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","propValue","layer_factory_toConsumableArray","getLayerInstance","layerRegistry","instances","layerObj","layerConstructor","getLayerClass","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","LAYER_TYPES","layer_registry","layers","helpers","commonHelpers","pointLayerHelpers","layerMixins","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","sizeField","shapeField","_retinalEncodingsAndM","src_helper_toConsumableArray","transformDataModels","dataModels","transformVal","getLayerFromDef","existingLayer","rowIndex","colIndex","instanceArr","_timeDiffs","resolveEncodingTransform","sanitizeLayerDef","sanitizedDefs","sConf","attachDataToLayers","transformedDataModels","dataSource","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","axisIndex","getLayerAxisIndex","_layer$config","specificField","encodingField","fieldInst","getMembers","unionDomainFromLayers","axisFields","domainValues","layerDomain","fieldDomain","encodingDomain","fieldStr","domain1","renderLayers","_lifeCycleManager","notify","orderedLayers","layerParentGroup","layerDepOrder","_layerDepOrder","getNearestDimensionalValue","entryVal","getLayersBy","searchBy","removeLayersBy","createSideEffectGroup","createRenderPromise","_renderedPromise","_renderedResolve","getRadiusRange","radiusAxes","createRTree","interactive","rtree","AXES","LAYERDEFS","TRANSFORMEDDATA","DATADOMAIN","FIELDS","LAYERAXISINDEX","IDFIELD","GRID_LINE_PARENT_GROUP_CLASS","GRID_BAND_PARENT_GROUP_CLASS","GRID_PARENT_GROUP","TICK","GRID_BAND","GRID_LINE","CONSOLIDATED","FRAGMENTED","FACET_BY_FIELDS","RETINAL_FIELDS","PARENT_ALIAS","CACHED_DATA","STORE","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","SelectionSet","_volatile","selection_set_classCallCheck","completeSet","_uidMap","_measureNames","_dimVals","measureNames","dims","_fieldIndices","_completeSetCount","_resetted","uidMap","entrySet","exitSet","mergedEnter","mergedExit","dimVals","keepDims","_config$fields","_config$keys","measureNamesArr","addSet","removeSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","muze_firebolt_src_helper_toConsumableArray","getSideEffects","behaviour","behaviourEffectMap","behaviours","effects","getUidsFromCriteria","dimensionsMap","dimsMapGetter","_ref$addMeasures","addMeasures","firebolt_defineProperty","fieldIndexMap","measureNameField","propDims","dimsMap","dimKey","origRow","rowVal","measuresArr","firebolt_toConsumableArray","cloneObj","clonedVal","Firebolt","actions","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_sourceSelectionSet","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sideEffectPolicies","_propagationBehaviourMap","_behaviourPolicies","_actionBehaviourMap","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","_handlers","_payloadGenerators","_payloads","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","setSideEffectConfig","sideEffect","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","initializeSideEffects","sideEffectStore","actionHistory","queuedSideEffects","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","setTransform","propagationInfo","propagate","entryExitSet","shouldApplySideEffects","shouldApplyHighlightEffect","propagationIdentifiers","applicableSideEffects","getApplicableSideEffects","applySideEffects","getEntryExitSet","sourceSelectionSet","behaviourConditions","sideEffectConditions","physicalAction","actionBehaviourMap","behaviourMap","mapActionsAndBehaviour","handler","onDataModelPropagation","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","sideEffectsMap","SideEffect","initedActions","initializePhysicalActions","physicalActions","phyAction","initedPhysicalActions","getDefaultTargetContainer","bindActionWithBehaviour","registerPhysicalActionHandlers","targets","behaviourList","getKeysFromCriteria","firebolt","_metaData","_dimsMapGetter","handlers","genericHandlers","onPhysicalAction","beh","_this$context","getRangeFromIdentifiers","defaultFn","__default","EntryExitSet","entry_exit_set_classCallCheck","_uids","_data","_filteredModel","_model","entry_exit_set_createClass","GenericBehaviour","generic_classCallCheck","_enabled","getSelectionSet","getPropagationInf","_this$getAddSetFromCr","getAddSetFromCriteria","_payload","setSelectionSet","_this$firebolt","_selectionSet$getSets","getSets","getSetInfo","getSourceFields","fullData","propData","propagationFields","resetted","otherFields","generic_slicedToArray","generic_toConsumableArray","_propagationIdentifiers","VolatileBehaviour","existingAddSet","SELECTION","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","HighlightBehaviour","BrushBehaviour","BEHAVIOURNAMES","FilterBehaviour","PersistentBehaviour","updateEntry","SelectBehaviour","mergedExitSet","completeSetCount","dragCriteriaRetriever","drag_action_config_defineProperty","_dragCriteriaRetrieve","sourceInfo","startPos","ranges","getRangeFromPositions","getDragActionConfig","getSourceInfo","coordType","attachDragEvent","targetEl","drawingInf","touchStart","d3Drag","getDrawingContext","newStartPos","newEndPos","dragging","dragDiff","triggerPhysicalAction","dragEnd","hideSelBox","hover","tooltip","svgContainer","getAllPoints","showInPosition","ACTION_NAMES","generatePayloadFromEvent","selectionBoxDrag","onDrag","ACTIONS","click","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","ANCHORS","BRUSH_ANCHORS","PERSISTENT_ANCHORS","HIGHLIGHTER","CROSSLINE","FRAGMENTED_TOOLTIP","AXIS_LABEL_HIGHLIGHTER","GenericSideEffect","generic_sideeffect_classCallCheck","_strategy","plotPointsFromIdentifiers","_this$firebolt$contex","getPlotPointsFromIdentifiers","_sourceInfo","_layers","_plotPointsFromIdentifiers","SurrogateSideEffect","_config$reset","layerFields","filteredUids","_ref2$","surrogate_slicedToArray","SpawnableSideEffect","_drawingContext","changeVisibility","sideEffectGroup","visible","SelectionBox","boxConf","box","drawingContext","unitWidth","unitHeight","selectionGroupClassName","persistent","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","xRange","yRange","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort2","selection_box_helper_slicedToArray","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort4","_xDim","_yDim","direction","selectionBox","selection_box_defineProperty","BEHAVIOURS","boxClassName","parentClassName","connectorClassName","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","arrow","Content","content_classCallCheck","_formatter","ctx","displayFormat","table","tbody","elemData","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","defConf","contentConfig","specificClass","reorderContainers","contentConf","_target","tooltipPos","_orientation","connector","_offset","dim","_extent","contentContainer","topSpace","dimX","rightSpace","leftSpace","bottomSpace","arrowSize","tooltipHeight","tooltipWidth","spaces","positionHorizontal","positionVal","positionVertical","hMax","vMax","_position","HIGHLIGHT_SUMMARY","defNumberFormat","formatters","strategies_defineProperty","isSingleValue","dataLen","stackedSum","getStackedKeyValue","getKeyValue","isSelected","removeKey","isStackedBar","stackedValue","keyObj","valueObj","stackedValueObj","margin-left","getStackedSum","generateRetinalFieldsValues","valueArr","retinalFields","dimensionMeasureMap","fieldInf","retField","retIndex","retinalFieldValue","icon","_fieldInf$retField","formattedRetinalValue","hasMultipleMeasures","_fieldInf$measure","dName","formatterFn","currentMeasureValue","strategies_toConsumableArray","buildTooltipData","nestedDataObj","fieldValues","_dataModel$getData","fieldspace","_context$retinalField","detailFields","_ref2$showStackSum","showStackSum","_context$payload$sele","selectedMeasures","containsDetailField","getFieldInf","defFormatter","nf","getTabularData","strategies_construct","isStacked","isStackedChart","isStackedBarChart","filteredMeasures","generateTooltipContent","nestedData","_nestedData$i","_fieldInf$field","len2","_fieldInf$name","strategies_strategies","showMultipleMeasures","aggFns","entryUids","fieldsConf","aggregatedValues","getAggregatedValues","groupedDm","dmFields","_values$0$data","_fieldsConf$measure$d","rowValues","shouldApplySideEffect","sourceDims","configResolvers","tooltip_defineProperty","_configResolvers","specificConf","_default","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","tooltip_getPrototypeOf","_tooltips","sanitizeConfig","strategyObj","sanitizedConf","createTooltip","tooltips","positionRelativeTo","tooltip_get","plotDim","_config$strategy","projectFields","dataTransform","strategyFn","dt","layoutContainer","parentContainerDimensions","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","highlightSummary","selectionSummary","FragmentedTooltip","totalHeight","totalWidth","boundBox","showVertically","boxes","fragmented_tooltip_toConsumableArray","fragmented_tooltip_get","fragmented_tooltip_getPrototypeOf","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","repositionArrow","Crossline","bandWidth","px","bandClass","lineClass","isEmptyDataModel","plotWidth","crossline_toConsumableArray","startPx","endPx","parentGroup","getFormattedSet","selectedPointsId","formattedSet","helper_objectSpread","fadeFn","fadeOnBrush","fadeOnBrushFn","getPayload","actualPoint","commonSet","excludeSetIds","currentHighlightedSet","selectEntrySet","diffSet","pseudoFocus","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","plot_highlighter_getPrototypeOf","excludeSet","selectedPointsIds","plot_highlighter_toConsumableArray","currentStrategy","getExcludeSetIds","plot_highlighter_objectSpread","FilterEffect","entryModel","resetData","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","anchors_getPrototypeOf","_layersMap","addAnchorLayers","addLayer","layerCls","depLayerEncoding","defaultSizeValue","commonName","layerOwner","defaultClassName","groupId","getTransitionConfig","owner","registry","upperAnchors","lowerAnchors","targetObj","anchors_toConsumableArray","layerConfig","linkedLayer","getLayerByName","linkedLayerName","isUpperAnchor","_linkedLayer$getTrans2","anchors_slicedToArray","dmFromPayload","_linkedLayer$getTrans4","transformedDataModel","anchorSizeConfig","getAnchorSizeOnInteraction","getAnchorStroke","PersistentAnchors","anchor","defaultInteractionLayerEncoding","BrushAnchors","AxisLabelHighLighter","selectedData","selectedDataValues","_context$axes","_context$axes$x","_context$axes$y","axis_labels_highlighter_toConsumableArray","fieldMeta","selData","_axis$getTicksBasedOn","getTicksBasedOnData","selectedElements","nullDataTooltipMap","bar","applySideEffectOnEmptyTarget","behaviour_effect_map_defineProperty","brush","brushEntrySet","returnEntrySet","highlightUids","SIDE_EFFECTS","convertToObj","payloadGenerator","selectionDataModel","facetByFields","propPayload","getRangeFromData","_propConfig$includeMe","includeMeasures","selectionDataFields","measureNamesIdx","propagationDataModel","propagationDataDims","excludeSelectedMeasures","payload_generator_defineProperty","identifierMap","getIdentifierMeasureMap","facetsMap","identifierIdxMap","facetPresent","facetVal","payload_generator_toConsumableArray","sourceFields","pseudoSelect","isSideEffectEnabled","se","sideEffectPolicies","sideEffectCheckers","propagationData","prepareSelectionSetMap","maps","getUniqueKeys","_ref2$keys","_ref2$dimensionsMap","mKey","firebolt_helper_toConsumableArray","createMapByDimensions","cacheMap","_cacheMap","sideEffectPolicy","sourceIdentifierFields","propFields","hasCommonCanvas","sourceCanvas","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","firebolt_getPrototypeOf","_connectedBehaviours","payloadGenerators","changeSideEffectStateOnPropagation","unitId","aliasName","parentAlias","propagationSourceCanvas","sourceUnitId","sourceUnit","sideEffectInstances","actionOnSource","mappedEffects","applySideEffect","enabledFn","enabled","getPayloadGeneratorFor","payloadFn","facetFieldsMap","behaviourPolicies","dispatchSecondaryActions","_ref4","secAction","generatedPayload","payloadGeneratorFn","firebolt_get","cachedData","action_behaviour_map_defineProperty","UnitBrushBehaviour","dragStart","brush_get","behaviours_brush_getPrototypeOf","getGridLayerDefinitions","axisType","getDefaultVisibilty","getLayerDefinition","_definition","_axes","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","dimensionSubTypes","getValidSubtype","attachDataToGridLineLayers","_gridLines","_gridBands","gridLayerData","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_toConsumableArray","src_listener_map_slicedToArray","fieldsVal","removeExitLayers","layersMap","markSet","queuedLayerDefs","_queuedLayerDefs","layerDefArr","listener_map_toConsumableArray","timeDiffsByField","minimumConsecutiveDifference","_ref8","_timeDiffsByField","originalData","_prepareSelectionSetD","prepareSelectionSetData","_prepareSelectionSetM","createSelectionSet","attachPropagationListener","_ref9","createGridLineLayer","vuConf","atomicDef","_ref11","_ref12","_ref15","_ref16","layerAxisIndexVal","_layerAxisIndex","axesVal","_dimensionMeasureMap","src_props_defineProperty","_PROPS","facets","facetKeys","trackerClassName","arcLayerClassName","sideEffectClassName","local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$TRA","local_options_toConsumableArray","oldData","PseudoSelectBehaviour","unitNs","VisualUnit","visual_unit_classCallCheck","lifeCycleManager","_gridLinesSelection","_gridBandsSelection","createFireboltInstance","_Object$assign","interactions","fireboltDeps","Cls","getFireboltCls","visual_unit_defineProperty","getActionBehaviourMap","getBehaviourEffectMap","_firebolt","createRootContainers","_rootSvg","_sideEffectGroup","initSideEffects","class","renderGridLineLayers","gridLineParentGroup","_entry","grid_lines_slicedToArray","parentGroupClass","rootSvg","_this$parentContainer","parentContainerInf","layerDefinition","layerDefinitions","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","visual_unit_toConsumableArray","layerdeps","_this$_dependencies","parentModel","REACTIVE_PROPS","pointInf","getMarkInfFromLayers","visual_unit_objectSpread","markInf","parsedIdentifiers","_this$fields","xdom","ydom","localNs","dataDomain","visual_unit_slicedToArray","dispatchQueuedSideEffects","clearActionHistory","visual_unit_construct","Variable","ComposedVars","composed_vars_classCallCheck","composed_vars_possibleConstructorReturn","composed_vars_getPrototypeOf","vars","_vars","member","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","simple_var_getPrototypeOf","oneVar","_oneVar","dtFormat","dateFormat","fieldDef","varInst","convertToVar","datamodel","transformFields","field_sanitizer_slicedToArray","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","BORDER_WIDTH","facet","handleBlankCell","externalClassname","sanitiseHeaderMatrix","matrices","sanitiseFacetValues","blankCell","normal","latestSource","lastSource","initStore","group_utils_defineProperty","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","getAxisKey","getCellKey","columnId","extractUnitConfig","unitConfig","hasOneField","getHeaderText","headerCreator","fieldHeaders","TextCell","sanitizeCheck","isBorderPresent","findInGroup","variable","channel","group_utils_this","facetType","projType","getAxisType","retriveDomainFromData","mutateAxesFromMap","cacheMaps","xAxes","yAxes","xAxisSet","yAxisSet","axisId","getEncoder","encoder","CartesianEncoder","layerConf","hasPolarEncodings","PolarEncoder","getHeaderAxisFrom","userAxisFromConfig","axisFrom","headerFrom","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","projections","getBorders","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","getFieldsFromSuppliedLayers","suppliedLayerConfig","encodingArr","group_utils_typeof","extractFields","facetsAndProjections","flattenArray","sortFacetFields","facetNames","sortInfo","sortConfig","facetSortConfig","getSchemaDef","removeExitCells","exitCells","qualifiedStateProps","placeholder","globalConfig","VisualEncoder","visual_encoder_classCallCheck","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom4","colHeader","colAxis","scaleMaps","getFieldNames","fieldVar","matrix_model_toConsumableArray","prepareHashMaps","rowKey","joinedRowKey","createJoinedKeys","keyArr","joinedKey","formatKeys","formatterList","formattedKeys","rKeys","rIdx","createColumnDataModels","colContext","sourceDM","rowFacets","colFacets","rowKeyArr","colKeyObj","newRowIndex","splitModelsHashMap","currentColumnIndex","colKeyArr","colKey","hashMapKey","splitByColumn","optionalProjections","facetInfo","projectionInfo","geomCellCreator","_indices$i","projectionIndexObject","columnIndex","matrix_model_objectSpread","getMatrixModel","currentRowIndex","prepareProjectionInfo","colProjections","rowProjections","rowProj","rIndex","newRIndex","colProj","cIndex","newCIndex","newRowProj","newColProj","rowFields","columnFields","prepareFacetInfo","rowFacetNames","colFacetNames","allFacets","_getSplitModelHashMap","getSplitModelHashMap","splitModels","rowKeyHashMap","colKeyHashMap","rowKeys","colKeys","splitContext","splitByRow","setDefaultConfigForFacet","_config$facetsUserCon","facetsUserConfig","border","_facetsUserConfig$isB","_facetsUserConfig$isG","isGridLinePresent","gridLinesShowLength","borderWidth","borderColor","borderStyle","borderConf","generalContext","rowKeyObj","createRowDataModels","rowContext","rowIndexForCurrentKey","_createColumnDataMode","_createColumnDataMode2","_createColumnDataMode3","_createColumnDataMode4","formattedColKeys","facetField","rawFormat","columnKeys","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","sortedFields","layerConfigArr","getLayerConfig","retinalConfig","axesCreators","normalizedColumns","normalizedRows","cell_creator_toConsumableArray","facetFields","geomCellKey","geomCell","updateCells","facetKey","extractAxisIndex","createAxisCells","currObj","axisInst","_axisInst$config","AxisCell","BlankCell","extractFacetIndex","headerPlaceholderGn","selectionObj","counter","selectionKeys","keySet","textCells","createTextCells","textCell","generatePlaceholders","encoders","valuesMatrix","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","rowsSecondary","rowSec","columnsPrimary","colPrime","columnsSecondary","colSec","_selectionObj","section","hContext","getAxisFields","fieldHolder","ac","transformDataModel","resolvedData","newFieldsConfig","aggregationFns","nearestAggFns","resolvedAggFns","sortDmTemporalFields","computeMatrices","resolverConfig","otherEncodings","isFacet","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","cellCreator","valueCellsCreator","valueMatrixInfo","_mutateAxesFromMap","createUnits","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","_map4","leftFacets","rightFacets","rowPriority","colPriority","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","sanitizeCheckBorder","sanitiseBorderMatrix","bottomBorderObj","sanitiseGeomMatrix","RESOLVER_PROPS","units","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_fireboltDeps","_placeholderInfo","matrix_resolver_toConsumableArray","getProjectionFields","_horizontalAxis","_verticalAxis","matrixType","matrix_resolver_defineProperty","_this5","_this$dependencies","autoGroupBy","_this$getAllFields","retContext","getRetinalFieldsDomain","getRetinalAxes","retinalEncoder","setCommonDomain","retinalAxes","updateVisualUnit","placeholders","bottomLeft","bottomRight","_this$dependencies2","showHeaders","_this$registry$cells","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","footers","topLeft","topRight","updateModel","dataTypeScaleMap","src_data_type_scale_map_defineProperty","data_type_scale_map_dataTypeScaleMap","getAdjustedDomain","y1ratio","y2ratio","allSameSign","generateAxisFromMap","axisKey","groupAxes","currentAxes","commonAxisKey","axisConfig","getAxisConfig","axisInfo","axisOrientation","rawUserAxisConfig","userAxisConfig","_rotationLock","createSimpleAxis","sanitizeIndividualLayerConfig","encodingConfigs","getDefaultMark","colFieldType","rowFieldType","createRetinalAxis","fieldProps","getIndex","arrIndex","getLayerConfFromFields","colFields","userLayerConfig","encoder_helper_toConsumableArray","xFields","yFields","colFieldExist","rowFieldExist","resolverAxes","axesArr","userConfig","getSortingConfig","currentFieldName","axesConfig","lastSortConfig","geomCellAxes","1","unitsArr","encodingDomains","axisTypeIndex","typeOfField","_resolver$axes","adjustedDomain","typeOfAxis","alignZeroLine","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","existIndex","axisFromIndex","cartesian_encoder_get","cartesian_encoder_getPrototypeOf","encodingObj","fieldInstance","layerArray","serializedLayers","colField","colFieldName","rowField","configs","rowFieldName","defConfigs","layerConfigs","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","axesCls","polar_encoder_defineProperty","_axesCls","pieAxes","varInstances","encType","domainProps","matrixInstance","unitDomains","setRadiusFactor","sizeFieldIndex","sizeMultiplier","getSizeMultiplier","sizeAxisDomain","encodingFields","sanitizedRows","sanitizedColumns","polar_encoder_get","polar_encoder_getPrototypeOf","sanitizedFields","typeIndex","polar_encoder_toConsumableArray","sanitizedConfig","angleField","angle0Field","RetinalEncoder","newAxes","visual_group_local_options","visual_group_local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","cellValue","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","getLogicalSpace","rowHeight","currentRowHeight","setMatrixInstances","_composition","updateChecker","option","hasValue","hasOneValue","createMatrices","groupConfig","matrixConfig","placeholderInfo","getMatrices","_originalGroupedData","_groupedDataModel","createRetinalAxes","setRetinalAxisDomain","cornerMatrices","createHeaders","metaData","unionUnitDomains","registerDomainChangeListener","visual_group_props_defineProperty","visual_group_props_PROPS","_prevData","groupType","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","visual_group_getPrototypeOf","componentSubRegistry","visual_group_assertThisInitialized","_selection","createMatrixResolver","initializeGlobalState","globalState","createUnitState","_VisualUnit$getState2","visual_group_helper_slicedToArray","localState","createLayerState","_BaseLayer$getState2","setupChangeListeners","stores","_context$registry","comp","storeInst","listenerInf","getSimpleAxes","_this$resolver$getAll","visual_group_defineProperty","sanitizedValue","shouldRender","localFields","initializeFields","unsubscribeChangeListeners","sanitizeRetinalConfig","retinalConf","confValue","createEncoderInstance","fieldSanitizer","setAxisAndHeaders","resolverFields","initializeResolverFields","hasMandatoryFields","info","getGroupByData","oriData","existingRemoveSet","select_toConsumableArray","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","propagationBehaviourMap","_propagationBehaviour","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","src_firebolt_helper_toConsumableArray","DEFAULTICONSIZE","SCALE_FUNCTIONS","HORIZONTAL","VALUE","POSITION_ALIGNMENT_MAP","constants_defineProperty","_POSITION_ALIGNMENT_M","OPPOSITE_POSITION","_OPPOSITE_POSITION","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_getPrototypeOf","legend_firebolt_inherits","legend_firebolt_createClass","getPropagationSelectionSet","behaviourName","canvasAlias","legend_firebolt_toConsumableArray","getFullData","highlightedSet","deselectedLegendItemsSet","includes","getCriteriaFromData","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","ALIGN","DEFAULT_MEASUREMENT","marginHorizontal","paddingRight","LEGEND_TITLE","_buffer","legend_defaults_defineProperty","bounds","upper","marker","tempConfig","STEP_DEFAULT_CONFIG","ICON_MAP","LEGEND_MARKER_PROPS","side_effects_selection_box_classCallCheck","side_effects_selection_box_possibleConstructorReturn","side_effects_selection_box_getPrototypeOf","gradientDimension","legendGradContainer","legendSelGroup","BUFFER","selBox","enterFn","selection_box_drag_defineProperty","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_highlighter_getPrototypeOf","SYMBOL_PADDING","LegendMarker","legend_marker_classCallCheck","legend_marker_possibleConstructorReturn","legend_marker_getPrototypeOf","_graphicElements","markerElement","legendmarkerTextContainer","legendmarkerText","rotateAngle","legendConfig","legendScale","pointerTextFormatter","lableConfig","labelText","_getRelativePosition","getRelativePosition","canvas","legendContainer","_canvasMount","_labelManager$getSmar","MARKER_BUFFER","legendmarkerGroup","textElement","createTextCell","labelManagerRef","maxLines","_minTickDiff","_cells","resetLogicalSpace","title","_title","getScaleInfo","scaleFn","getInterpolatedArrayData","domainForLegend","scaleParams","requiredWidth","requiredHeight","upperBound","maxTickDiff","alignment","smartLabelCalc","minimumTickSize","_smartLabelCalc$getOr","isInteger","getcomputedArray","computationhelper","requiredMeasure","availableMeasure","currentTickValue","nextTickValue","measureParam","pixelPerTick","getInterpolatedData","recomputeSteps","getTickMeasure","_scaleParams$measures","getItemMeasures","_labelManager","_labelManager$getOriS","calculateTitleWidth","titleWidth","maxItemSpaces","itemSpaces","localBuffer","cur","SimpleLegend","simple_legend_classCallCheck","_fieldName","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","_this$measurement","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","textOrientation","iconSpaces","maxIconWidth","labelSpace","itemSpace","iconSpace","newLabelWidth","titleSpaces","_this$measurement2","_this$config3","titleCreator","textAlign","titleContainer","marginPosition","_this$config4","_this$measurement3","widthBox","renderTitle","rawVal","simple_legend_defineProperty","idRangeMap","canvasRoot","legendOrientation","position_config_defineProperty","_legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","_context$config","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","transalate","defaultIcon","defaultIconSize","DiscreteLegend","_getScaleInfo","_field$schema","discrete_legend_toConsumableArray","ele","nextVal","discrete_legend_defineProperty","discrete_legend_get","discrete_legend_getPrototypeOf","renderDiscreteItem","_context$measurement2","_item$icon","text-align","marginVerticalBuffer","allSelections","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","legendRect","GradientLegend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","getScaleFactor","newAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","gradient_legend_getPrototypeOf","renderGradient","_createLegendSkeleton","markerWithBuffer","StepLegend","domainLeg","isFraction","step_legend_toConsumableArray","numRight","step_legend_defineProperty","stepData","step_legend_get","step_legend_getPrototypeOf","renderStepItem","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","IS_POINT_MAP","true","false","LEGEND_TYPE_MAP","src_constants_defineProperty","_LEGEND_TYPE_MAP","HORIZONTAL_CENTER","VERTICAL_CENTER","share","operators_construct","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","canvasIterator","canvases","iteratorFn","cFn","visualGroup","_throwback","registerActions","fnName","_registrableComponents","setFireboltDependencies","actionModel","ActionModel","action_model_classCallCheck","registerPropagationBehaviourMap","dissociateBehaviour","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","*","propagationPayload","propagationCanvas","crossInteractionPolicy","TITLE_CONFIG","SUB_TITLE_CONFIG","MESSAGE_CONFIG","baseFontLimit","upperFontLimit","baseSizeLimit","upperSizeLimit","fractionImage","fractionChild","canvas_local_options_defineProperty","_localOptions","canvasOptions","_canvasOptions","local_options_slicedToArray","arg1","arg2","local_options_typeof","titleConfig","subtitle","subtitleConfig","sub","LayoutComponent","layoutComponent_classCallCheck","_boundBox","_renderAt","_alignWith","_alignment","_componentName","_className","DummyComponent","newDimensions","renderAt","component","componentName","pagination","scrollBar","thickness","speed","legend","minHeight","minCharacters","verticalAlign","collapse","invalidValues","EXCLUDE_CONFIG_KEYS","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_CLASS_NAME","NODE_PREFIX","DefinitionModel","definitionModel_classCallCheck","_host","host","_cut","cut","_ratioWeight","ratioWeight","_preferred","preferred","_lanes","lanes","_remainingHeight","_remainingWidth","remainingHeight","remainingWidth","getNodeId","_uid","yExtraSpace","smallestHeight","getCutType","smallestExtraHeightHorizontally","MAX_SAFE_INTEGER","containerHeight","hostHeight","xExtraSpace","smallestWidth","smallestExtraWidthVertically","containerWidth","hostWidth","createPlaceHolderComponent","placeComponent","definitionModel","leftOvercomponentRationWidth","isPreferred","isGridComponent","componentRatioWidth","leftHeight","leftWidth","_component$getLogical","componentHeight","componentWidth","firstLaneConfig","firstLane","secondLane","tree_classCallCheck","_parentCut","_this$_children","tree_toConsumableArray","parentCut","bound","nodeconfig","searchNode","childNode","nodeId","deleteSearchNode","LayoutModel","measurements","layout_model_classCallCheck","_measurements","_root","createTree","setBoundBox","addChildren","lane","allocateBoundingBox","totalWeight","carry","lastSibling","ratio","setHostSpatialConfig","setHostPosition","negotiateDimension","alteredDim","nonAlteredDim","cumultiveExtraSpaceAmt","childrenLength","extraSpaceAmt","computePosition","determineBoundBox","bb","_lastSibling$boundBox","_top","_left","_height","_width","_instance$parent$boun","setSpatialConfig","VIEW_INDEX","ROW_MATRIX_INDEX","2","COLUMN_MATRIX_INDEX","ROW_ROOT","COLUMN_ROOT","VERTICAL","Utils","utils_createClass","isDOMElement","getID","getElement","findContainer","coordinate","removeDiv","divId","DataPoint","data_point_classCallCheck","DataParser","data_parser_classCallCheck","data_parser_createClass","defaultDataPointLogic","nodepoints","getnodePoints","datapoint","HTMLDataAdapter","_DataParser","html_data_classCallCheck","html_data_possibleConstructorReturn","html_data_getPrototypeOf","html_data_inherits","html_data_createClass","getCoordinates","html_data_get","Renderer","renderer_classCallCheck","renderer_createClass","initRenderer","__logicalTree","HTMLRenderer","_Renderer","html_renderer_classCallCheck","html_renderer_possibleConstructorReturn","html_renderer_getPrototypeOf","_coordinates","html_renderer_inherits","html_renderer_createClass","createhtml","mainDiv","html_renderer_get","parentDiv","createAndCustomiseParent","hasHost","createAndPositionDiv","html_renderer_objectSpread","div","coordinates","findNode","nodeID","renderer","drawLayout","renderHTML","resolveAligment","componentData","alignWith","componentToAlign","componentMap","refNode","newNodeConfig","setAlignConfig","DrawingManager","drawing_manager_classCallCheck","_componentMap","_layoutClassName","layoutClassName","_renderer","drawing_manager_createClass","drawComponent","DefinitionManager","definition_manager_classCallCheck","_prioritySequence","_totalHeight","_totalWidth","_targetComponentMap","prepareTargetComponentMap","targetComponentMap","canvasComponent","tempDefModel","componentRef","getComponent","placeGridComponent","gridComponents","iscolumnPreffered","_placeComponent","rowpreffred","LayoutDef","layout_def_classCallCheck","_layoutDefinition","layout_def_createClass","addComponent","layoutDefinition","addMultipleComponent","componentArray","sanitizedDefinition","hostObj","hostID","childHost","resetComponentMap","LayoutManager","layout_manager_classCallCheck","_dimension","_skeletonType","skeletonType","_layoutDef","_drawingManager","_rootNodeID","con","resetNode","updateNode","compute","_layout","calLayOutDef","_context$dimension","layoutDef","prioritySequence","generateConfigModel","negotiate","broadcast","layoutComponents","componentArr","compo","elementName","removeElement","elemID","co","deleteElement","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","nameSpaceProps","equalityChecker","dispatchProps","sanitizedData","getMandatoryFields","_cachedProps","notifyAnimationEnd","viewInfo","layout","centerMatrix","viewMatricesInfo","promises","cellArr","lifeCycle","animDonePromises","applyPropagationPolicy","changeBehaviourStateOnPropagation","isMeasure","applyInteractionPolicy","splom","isSplom","interactionPolicy","_interactionPolicy","_crossInteractionPolicy","unitFireBolt","canvas_helper_defineProperty","canvas_helper_objectSpread","createLayoutManager","src_options","minUnitWidth","minUnitHeight","options_slicedToArray","_auxConfig$reset","oldConf","facetDefaultConfig","fixFacetConfig","excludeKeys","emptyValueKeyObject","fixScrollBarConfig","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_DEFAULT_CONFIGURATIO","_FieldNames$BORDER","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","rowData","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","minSecondMeasure","createMatrixEachLevel","_arr$i","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_layoutMatrix","_tree","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistributeSpaces","childDepth","createMatrixInstances","matrixInfo","breakPointer","_breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","RowVisualMatrix","row_matrix_classCallCheck","row_matrix_possibleConstructorReturn","row_matrix_getPrototypeOf","maxHeights","maxWidths","matrixInst","cellDimOptions","matrixIndex","_this2$getCellDimensi","getCellDimensions","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","remainingAvailWidth","cWidths","conditions","maxPrioritySpace","availableWidth","currentWidth","prioritySpace","logicalWidths","getPriorityDistribution","mWidth","mHeight","redistributeViewSpaces","computeViewableSpaces","rHeights","gutter","spaceTakenByColumn","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","colHeight","colWidth","heights","ColumnVisualMatrix","column_matrix_classCallCheck","column_matrix_possibleConstructorReturn","column_matrix_getPrototypeOf","heightDist","divider","condition","spaceTakenByRow","getDistributedWidth","layoutConfig","distWidth","rowLen","oldLogicalSpace","heightDistribution","getMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","paginationDetailsMap","scrollType","paginationMeasureGetter","relatedMaxMeasure","getMatrixMeasureForPagination","measureDetails","actualMeasure","scrollInfo","getMatrixHeightDetails","columnMatrixWidth","_getHeightRequiredByC","getHeightRequiredByColMatrix","maxColumnMatrixHeight","columnViewSpace","getViewableSpaces","columnPointer","columnMatrixHeight","maxHeightAvailableForRowMatrix","rowMatrixHeight","bufferCondition","isScroll","getActualBufferFromConfig","computations_slicedToArray","getBufferFromCondition","currentBufferType","horizontalBuffer","verticalBuffer","computeLayoutMeasurements","_getMatrixWidthDetail","getMatrixWidthDetails","_layout$config3","rowMatrixWidth","maxRowMatrixWidth","maxWidthAvailableForColumnMatrix","_getMatrixHeightDetai","_getActualBufferFromC","rowViewableSpaces","columnViewableSpaces","setValueMatrixMeasurements","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnHeightsPrimary","columnHeightsSecondary","measureSum","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","layout_getPrototypeOf","_layoutId","_scrollInfo","generateVisualMatrices","begColCells","endColCells","gutterSpace","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","RowMatrix","ColumnMatrix","layout_get","_computeLayoutMeasure","setViewInformation","pageNumber","pageType","totalPages","layout_defineProperty","renderGrid","currentPage","_viewInfo","maxRowHeight","maxColWidth","rowPointer","getViewMatrices","rowMatrices","getViewableMatrices","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$config","rowSpaces","colSpaces","rightWidth","topHeight","bottomHeight","centerHeight","centerWidth","viewWidth","viewHeight","actualCenterMeasures","totalMeasures","unitHeights","unitWidths","specificBorderApplier","borderTypes","showBorders","borderInfo","borderType","applySpecificBorder","applyBorders","borderApplierFn","borderApplier","border_helper_defineProperty","borderMapVal","borderMap","orderMaker","nestByStack","updateArr","optionalParams","currStack","prevStack","arrVal","stackVal","currElemIndex","newElem","arrElem","returnArr","spanCalculator","isNull","maskCreator","_nestByStack","viewMatrix","hierarchy","_nestByStack2","spanGenerator","spans","ridx","currSpan","getOrder","matrixSpanGeneratorMap","span_maker_defineProperty","_matrixSpanGeneratorM","orderGetter","viewMatrixMaker","spanMaker","matrixSpanGenerator","spanApplier","cellCounter","spaceAllocationDueToSpan","primaryUnitWidth","cumulativeWidth","spanApplierMap","_spanApplierMap","TransactionSupport","INTERFACE_IMPl","LAYER_DEF","DETAIL_FIELDS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_DEFAULT_CONFIG","_CONSTANTS$MARGIN","CONSTANTS","_CONSTANTS$PADDING","_CONSTANTS$HEADER_PAD","_CONSTANTS$TITLE_PADD","DEFAULT_PROPS","minSpacing","visual_cell_src_props_defineProperty","visual_cell_src_props_PROPS","caption","smartText","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","axis_cell_getPrototypeOf","_availHeight","_availWidth","axis_cell_assertThisInitialized","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","actualWidth","actualHeight","_axis$config2","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","blank_cell_getPrototypeOf","blank_cell_assertThisInitialized","setSmartText","_context$minSpacing","minHeightSpace","minWidthSpace","paddedHeight","paddedWidth","isTitleSubtitle","subType","returnVal","computeTextSpace","_context$minSpacing2","minText","_minTextSpace","smartSpace","smHeight","smWidth","headerPadding","text_cell_classCallCheck","text_cell_possibleConstructorReturn","text_cell_getPrototypeOf","text_cell_assertThisInitialized","titlePadding","vAlign","_this$smartText","translation","middle","setPadding","localPadding","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","geom_cell_getPrototypeOf","_unit","_datamodel","_facetByFields","_transform","_caption","geom_cell_assertThisInitialized","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","resolveTitleSubTitleContent","rawContent","createHeading","prevCell","cellType","legendInitializer","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","interactionRegistry","dataInfo","legendMeasures","titleText","legendIconShapeMapper","layerMarks","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","setParentInfo","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","_this$params$componen","updateWrapper","_this$params$componen2","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","_config$dimensions","childHeight","message","imageNode","messageNode","formatFontSize","_params$config","headerCell","configType","headerAlignmentMap","component_wrapper_maker_defineProperty","_headerAlignmentMap","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","wrapperParams","component_wrapper_maker_objectSpread","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","_i","_headerValues","defaultDimensions","canvasHeight","canvasWidth","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","addFacetDataAndMeasureNames","facetData","facetVals","firebolt_helper_defineProperty","hasMeasureNameField","dataWithFacets","canvas_firebolt_helper_toConsumableArray","measureNameArr","isDimension","isCrosstab","dispatchBehaviours","addSelectedMeasuresInPayload","groupFields","_unit$fields","propagationDataSource","getPropagationSource","attachBehaviours","crosstab","tooltipSideEffect","defaultCrossInteractionPolicy","propagationCanvasAlias","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","defaultInteractionPolicy","group_firebolt_assertThisInitialized","handleDataModelPropagation","_this$context$config$","_ref$instance","findPlaceHolderById","handlePhysicalAction","resetSelectAction","groupDataMap","linkedRows","idValue","linkedRow","group_firebolt_toConsumableArray","group_firebolt_get","auxConfig","propagateValues","sourceCanvasId","sideEfffects","propagationBehaviour","sourceBehaviour","propagationConf","propConf","behaviourInstance","_propagationInf$unit","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setComponentInfo","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","default_registry_defineProperty","_COMPONENTS","SUBREGISTRIES","utils","Smartlabel","globalCache","defaultRegistry","globalRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","Components","VisualLayer","unitHelpers","unitEnums","Encoders","encoderHelpers","groupUtils","groupEnums","SideEffects","standards","Behaviours","pkg","operators"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n BINNED: 'binned',\n ID: '__id'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name, idField) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n idField,\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n }\n};\n\nexport default fieldStore;\n","import { getNumberFormattedVal } from './helper';\n\n/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (value, rawValue, field) {\n const formattedValue = getNumberFormattedVal(field, value);\n\n Object.defineProperties(this, {\n _value: {\n enumerable: false,\n configurable: false,\n writable: false,\n value\n },\n _formattedValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: formattedValue\n },\n _internalValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: rawValue\n }\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Returns the parsed value of field\n */\n get formattedValue () {\n return this._formattedValue;\n }\n\n /**\n * Returns the internal value of field\n */\n get internalValue () {\n return this._internalValue;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[i],\n formattedValue: field.formattedData()[i],\n };\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[ii],\n formattedValue: field.formattedData()[ii],\n };\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray } from '../utils';\n\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType) {\n let retFunc;\n\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'asc') {\n retFunc = (a, b) => a - b;\n } else {\n retFunc = (a, b) => b - a;\n }\n break;\n default:\n if (sortType === 'asc') {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? 1 : -1;\n };\n } else {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? -1 : 1;\n };\n }\n }\n\n return retFunc;\n}\n\n/**\n * Resolves the actual sorting function based on sorting string value.\n *\n * @param {Object} fDetails - The target field info.\n * @param {string} strSortOrder - The sort order value.\n * @return {Function} Returns the sorting function.\n */\nfunction resolveStrSortOrder (fDetails, strSortOrder) {\n const sortOrder = String(strSortOrder).toLowerCase() === 'desc' ? 'desc' : 'asc';\n return getSortFn(fDetails.type, sortOrder);\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData (data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg (groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data by applying the standard sorting mechanism.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction applyStandardSort (data, schema, sortingDetails) {\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n const sortFn = resolveStrSortOrder(fDetails, sortMeta);\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortFn(a[fDetails.index], b[fDetails.index]));\n }\n }\n}\n\n/**\n * Creates a map based on grouping.\n *\n * @param {Array} depColumns - The dependency columns' info.\n * @param {Array} data - The input data.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - The sorting details for standard sorting.\n * @return {Map} Returns a map.\n */\nconst makeGroupMapAndSort = (depColumns, data, schema, sortingDetails) => {\n if (depColumns.length === 0) { return data; }\n\n const targetCol = depColumns[0];\n const map = new Map();\n\n data.reduce((acc, currRow) => {\n const fVal = currRow[targetCol.index];\n if (acc.has(fVal)) {\n acc.get(fVal).push(currRow);\n } else {\n acc.set(fVal, [currRow]);\n }\n return acc;\n }, map);\n\n for (let [key, val] of map) {\n const nMap = makeGroupMapAndSort(depColumns.slice(1), val, schema, sortingDetails);\n map.set(key, nMap);\n if (Array.isArray(nMap)) {\n applyStandardSort(nMap, schema, sortingDetails);\n }\n }\n\n return map;\n};\n\n/**\n * Sorts the data by retaining the position/order of a particular field.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n * @param {Array} depColumns - The dependency column list.\n * @return {Array} Returns the sorted data.\n */\nfunction applyGroupSort (data, schema, sortingDetails, depColumns) {\n sortingDetails = sortingDetails.filter((detail) => {\n if (detail[1] === null) {\n depColumns.push(detail[0]);\n return false;\n }\n return true;\n });\n if (sortingDetails.length === 0) { return data; }\n\n depColumns = depColumns.map(c => fieldInSchema(schema, c));\n\n const sortedGroupMap = makeGroupMapAndSort(depColumns, data, schema, sortingDetails);\n return data.map((row) => {\n let i = 0;\n let nextMap = sortedGroupMap;\n\n while (!Array.isArray(nextMap)) {\n nextMap = nextMap.get(row[depColumns[i++].index]);\n }\n\n return nextMap.shift();\n });\n}\n\n/**\n * Sorts the data.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nexport function sortData (dataObj, sortingDetails) {\n let { schema, data } = dataObj;\n\n sortingDetails = sortingDetails.filter(sDetial => !!fieldInSchema(schema, sDetial[0]));\n if (sortingDetails.length === 0) { return; }\n\n let groupSortingIdx = sortingDetails.findIndex(sDetial => sDetial[1] === null);\n groupSortingIdx = groupSortingIdx !== -1 ? groupSortingIdx : sortingDetails.length;\n\n const standardSortingDetails = sortingDetails.slice(0, groupSortingIdx);\n const groupSortingDetails = sortingDetails.slice(groupSortingIdx);\n\n applyStandardSort(data, schema, standardSortingDetails);\n data = applyGroupSort(data, schema, groupSortingDetails, standardSortingDetails.map(detail => detail[0]));\n\n dataObj.uids = data.map(row => row.pop());\n dataObj.data = data;\n}\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport { sortData } from './sort';\nimport { FieldType, DimensionSubtype } from '../enums';\nimport { ROW_ID } from '../constants';\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder ({ fields: fieldStore, idField }, rowDiffset, colIdentifier, sortingDetails, options) {\n const idData = idField.data();\n\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n const name = fieldStore[i].name();\n if (name === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: ROW_ID,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.ID\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = idData[i];\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(idData[i]);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(idData[i]); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].internalValue ===\n dm2Fields[fieldName].internalValue && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum, { format: this.schema.format }));\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport PartialField from '../partial-field';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n static parser() {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n\n static get BUILDER() {\n const builder = {\n _params: {},\n _context: this,\n fieldName(name) {\n this._params.name = name;\n return this;\n },\n schema(schema) {\n this._params.schema = schema;\n return this;\n },\n data(data) {\n this._params.data = data;\n return this;\n },\n partialField(partialField) {\n this._params.partialField = partialField;\n return this;\n },\n rowDiffset(rowDiffset) {\n this._params.rowDiffset = rowDiffset;\n return this;\n },\n build() {\n let partialField = null;\n if (this._params.partialField instanceof PartialField) {\n partialField = this._params.partialField;\n } else if (this._params.schema && this._params.data) {\n partialField = new PartialField(this._params.name,\n this._params.data,\n this._params.schema,\n this._context.parser());\n }\n else {\n throw new Error('Invalid Field parameters');\n }\n return new this._context(partialField, this._params.rowDiffset);\n }\n };\n return builder;\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\nimport CategoricalParser from '../parsers/categorical-parser';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n\n static parser() {\n return new CategoricalParser();\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val, { format }) {\n let result;\n // check if invalid date value\n if (!this._dtf) {\n this._dtf = new DateTimeFormatter(format);\n }\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { rowDiffsetIterator } from '../operator/row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nexport const calculateContinuousDomain = (data, rowDiffset) => {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n};\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\nimport TemporalParser from '../parsers/temporal-parser';\nimport { calculateContinuousDomain } from '../helper';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n return calculateContinuousDomain(this.partialField.data, this.rowDiffset);\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data\n * If data is of type invalid or has missing format use the raw value\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n const dataFormat = this.format();\n\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n // If value is of invalid type or format is missing\n if (InvalidAwareTypes.isInvalid(datum) || (!dataFormat && Number.isFinite(datum))) {\n // Use the invalid map value or the raw value\n const parsedDatum = InvalidAwareTypes.getInvalidType(datum) || datum;\n data.push(parsedDatum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, dataFormat));\n }\n });\n return data;\n }\n\n static parser() {\n return new TemporalParser();\n }\n}\n\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import Dimension from '../dimension';\nimport BinnedParser from '../parsers/binned-parser';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n\n static parser() {\n return new BinnedParser();\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport ContinuousParser from '../parsers/continuous-parser';\nimport { calculateContinuousDomain } from '../helper';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n return calculateContinuousDomain(this.partialField.data, this.rowDiffset);\n }\n\n static parser() {\n return new ContinuousParser();\n }\n}\n","import { FieldParser } from '..';\n/**\n * Wrapper around row identifier value. Row id value contains the unique id of each row which\n * remains same across all datamodels of same source.\n */\nexport class IdValue {\n constructor (val) {\n const valArr = val instanceof Array ? val.map(Number) : [Number(val)];\n this._val = new Set(valArr);\n this._hash = valArr[0];\n this._valArr = valArr;\n return this;\n }\n\n toString () {\n return this._hash;\n }\n\n values () {\n return this._valArr;\n }\n}\n\n/**\n * A FieldParser which parses the id values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class IdParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the instance of id value.\n */\n parse (val) {\n const result = val instanceof IdValue ? new IdValue(val.values()) : new IdValue(val);\n return result;\n }\n}\n","import { DimensionSubtype } from '../../enums';\nimport IdParser from '../parsers/id-parser';\nimport Categorical from '../categorical';\n\n/**\n * Represents id field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class ID extends Categorical {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.ID;\n }\n\n static parser () {\n return new IdParser();\n }\n}\n","import Categorical from './categorical';\nimport Temporal from './temporal';\nimport Binned from './binned';\nimport Continuous from './continuous';\nimport { DimensionSubtype, MeasureSubtype } from '../enums';\nimport ID from './id';\n\n\nclass FieldTypeRegistry {\n constructor() {\n this._fieldType = new Map();\n }\n\n registerFieldType(subtype, dimension) {\n this._fieldType.set(subtype, dimension);\n return this;\n }\n\n has(type) {\n return this._fieldType.has(type);\n }\n\n get(type) {\n return this._fieldType.get(type);\n }\n}\n\nconst registerDefaultFields = (store) => {\n store\n .registerFieldType(DimensionSubtype.CATEGORICAL, Categorical)\n .registerFieldType(DimensionSubtype.ID, ID)\n .registerFieldType(DimensionSubtype.TEMPORAL, Temporal)\n .registerFieldType(DimensionSubtype.BINNED, Binned)\n .registerFieldType(MeasureSubtype.CONTINUOUS, Continuous);\n};\n\nconst fieldRegistry = (function () {\n let store = null;\n function getStore () {\n store = new FieldTypeRegistry();\n registerDefaultFields(store);\n return store;\n }\n return store || getStore();\n}());\n\nexport default fieldRegistry;\n\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport { fieldRegistry } from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n\n if (fieldRegistry.has(schema.subtype)) {\n return fieldRegistry.get(schema.subtype)\n .BUILDER\n .fieldName(schema.name)\n .schema(schema)\n .data(data)\n .rowDiffset(`0-${data.length - 1}`)\n .build();\n }\n return fieldRegistry\n .get(schema.type === FieldType.MEASURE ? MeasureSubtype.CONTINUOUS : DimensionSubtype.CATEGORICAL)\n .BUILDER\n .fieldName(schema.name)\n .schema(schema)\n .data(data)\n .rowDiffset(`0-${data.length - 1}`)\n .build();\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n if (fieldRegistry.has(schema.subtype)) {\n return fieldRegistry.get(schema.subtype)\n .BUILDER\n .partialField(partialField)\n .rowDiffset(rowDiffset)\n .build();\n }\n return fieldRegistry\n .get(schema.type === FieldType.MEASURE ? MeasureSubtype.CONTINUOUS : DimensionSubtype.CATEGORICAL)\n .BUILDER\n .partialField(partialField)\n .rowDiffset(rowDiffset)\n .build();\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","/**\n * Interface for all data converters\n */\nexport default class DataConverter {\n constructor(type) {\n this._type = type;\n }\n\n get type() {\n return this._type;\n }\n\n convert() {\n throw new Error('Convert method not implemented.');\n }\n\n}\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import { columnMajor } from '../../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr(arr, schema, options) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n const defaultOption = {\n firstRowHeader: true,\n };\n const schemaFields = schema.map(unitSchema => unitSchema.name);\n options = Object.assign({}, defaultOption, options);\n\n const columns = [];\n const push = columnMajor(columns);\n\n let headers = schemaFields;\n if (options.firstRowHeader) {\n // If header present then remove the first header row.\n // Do in-place mutation to save space.\n headers = arr.splice(0, 1)[0];\n }\n // create a map of the headers\n const headerMap = headers.reduce((acc, h, i) => (\n Object.assign(acc, { [h]: i })\n ), {});\n\n arr.forEach((fields) => {\n const field = [];\n schemaFields.forEach((schemaField) => {\n const headIndex = headerMap[schemaField];\n field.push(fields[headIndex]);\n });\n return push(...field);\n });\n return [schemaFields, columns];\n}\n\nexport default DSVArr;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, schema, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), schema, options);\n}\n\nexport default DSVStr;\n","import DataConverter from '../model/dataConverter';\nimport DSVStr from '../utils/dsv-str';\nimport DataFormat from '../../enums/data-format';\n\nexport default class DSVStringConverter extends DataConverter {\n constructor() {\n super(DataFormat.DSV_STR);\n }\n\n convert(data, schema, options) {\n return DSVStr(data, schema, options);\n }\n}\n","import { columnMajor } from '../../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr, schema) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n const schemaFieldsName = schema.map(unitSchema => unitSchema.name);\n\n arr.forEach((item) => {\n const fields = [];\n schemaFieldsName.forEach((unitSchema) => {\n if (unitSchema in header) {\n insertionIndex = header[unitSchema];\n } else {\n header[unitSchema] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[unitSchema];\n });\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import DataConverter from '../model/dataConverter';\nimport FlatJSON from '../utils/flat-json';\nimport DataFormat from '../../enums/data-format';\n\nexport default class JSONConverter extends DataConverter {\n constructor() {\n super(DataFormat.FLAT_JSON);\n }\n\n convert(data, schema, options) {\n return FlatJSON(data, schema, options);\n }\n}\n","import DataConverter from '../model/dataConverter';\nimport DSVArr from '../utils/dsv-arr';\nimport DataFormat from '../../enums/data-format';\n\nexport default class DSVArrayConverter extends DataConverter {\n constructor() {\n super(DataFormat.DSV_ARR);\n }\n\n convert(data, schema, options) {\n return DSVArr(data, schema, options);\n }\n}\n","import DataConverter from '../model/dataConverter';\nimport AUTO from '../utils/auto-resolver';\nimport DataFormat from '../../enums/data-format';\n\nexport default class AutoDataConverter extends DataConverter {\n constructor() {\n super(DataFormat.AUTO);\n }\n\n convert(data, schema, options) {\n return AUTO(data, schema, options);\n }\n}\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, schema, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, schema, options);\n}\n\nexport default Auto;\n","import DataConverter from './model/dataConverter';\nimport { DSVStringConverter, DSVArrayConverter, JSONConverter, AutoDataConverter } from './defaultConverters';\n\nclass DataConverterStore {\n constructor() {\n this.store = new Map();\n this.converters(this._getDefaultConverters());\n }\n\n _getDefaultConverters() {\n return [\n new DSVStringConverter(),\n new DSVArrayConverter(),\n new JSONConverter(),\n new AutoDataConverter()\n ];\n }\n\n /**\n * Sets the given converters in the store and returns the store\n * @param {Array} converters : contains array of converter instance\n * @return { Map }\n */\n converters(converters = []) {\n converters.forEach(converter => this.store.set(converter.type, converter));\n return this.store;\n }\n\n /**\n * Registers a Converter of type DataConverter\n * @param {DataConverter} converter : converter Instance\n * @returns self\n */\n register(converter) {\n if (converter instanceof DataConverter) {\n this.store.set(converter.type, converter);\n return this;\n }\n return null;\n }\n\n /**\n * Rempves a converter from store\n * @param {DataConverter} converter : converter Instance\n * @returns self\n */\n\n unregister(converter) {\n this.store.delete(converter.type);\n return this;\n }\n\n get(name) {\n if (this.store.has(name)) {\n return this.store.get(name);\n }\n return null;\n }\n\n}\n\nconst converterStore = (function () {\n let store = null;\n\n function getStore () {\n store = new DataConverterStore();\n return store;\n }\n return store || getStore();\n}());\n\nexport default converterStore;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS, ROW_ID } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport { converterStore } from './converter';\nimport { fieldRegistry } from './fields';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, formattedData, rawData, i) {\n const resp = {};\n\n for (const [key, field] of fields.entries()) {\n resp[field.name()] = new Value(formattedData[key][i], rawData[key][i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n\n for (const key in fields) {\n resp[key] = new Value(fields[key].formattedValue, fields[key].rawValue, key);\n }\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nconst selectModeMap = {\n [FilteringMode.NORMAL]: {\n diffIndex: ['rowDiffset'],\n calcDiff: [true, false]\n },\n [FilteringMode.INVERSE]: {\n diffIndex: ['rejectRowDiffset'],\n calcDiff: [false, true]\n },\n [FilteringMode.ALL]: {\n diffIndex: ['rowDiffset', 'rejectRowDiffset'],\n calcDiff: [true, true]\n }\n};\n\nconst generateRowDiffset = (rowDiffset, i, lastInsertedValue) => {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n const li = rowDiffset.length - 1;\n\n rowDiffset[li] = `${rowDiffset[li].split('-')[0]}-${i}`;\n } else {\n rowDiffset.push(`${i}`);\n }\n};\n\nexport const selectRowDiffsetIterator = (rowDiffset, checker, mode) => {\n let lastInsertedValueSel = -1;\n let lastInsertedValueRej = -1;\n const newRowDiffSet = [];\n const rejRowDiffSet = [];\n\n const [shouldSelect, shouldReject] = selectModeMap[mode].calcDiff;\n\n rowDiffsetIterator(rowDiffset, (i) => {\n const checkerResult = checker(i);\n checkerResult && shouldSelect && generateRowDiffset(newRowDiffSet, i, lastInsertedValueSel);\n !checkerResult && shouldReject && generateRowDiffset(rejRowDiffSet, i, lastInsertedValueRej);\n });\n return {\n rowDiffset: newRowDiffSet.join(','),\n rejectRowDiffset: rejRowDiffSet.join(',')\n };\n};\n\n\nexport const rowSplitDiffsetIterator = (rowDiffset, checker, mode, dimensionArr, fieldStoreObj) => {\n let lastInsertedValue = {};\n const splitRowDiffset = {};\n const dimensionMap = {};\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n let hash = '';\n\n let dimensionSet = { keys: {} };\n\n dimensionArr.forEach((_) => {\n const data = fieldStoreObj[_].partialField.data[i];\n hash = `${hash}-${data}`;\n dimensionSet.keys[_] = data;\n });\n\n if (splitRowDiffset[hash] === undefined) {\n splitRowDiffset[hash] = [];\n lastInsertedValue[hash] = -1;\n dimensionMap[hash] = dimensionSet;\n }\n\n generateRowDiffset(splitRowDiffset[hash], i, lastInsertedValue[hash]);\n lastInsertedValue[hash] = i;\n }\n });\n\n return {\n splitRowDiffset,\n dimensionMap\n };\n};\n\n\nexport const selectHelper = (clonedDm, selectFn, config, sourceDm, iterator) => {\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const { mode } = config;\n const rowDiffset = clonedDm._rowDiffset;\n const cachedValueObjects = clonedDm._partialFieldspace._cachedValueObjects;\n\n const selectorHelperFn = index => selectFn(\n cachedValueObjects[index],\n index,\n cloneProvider,\n cachedStore\n );\n\n return iterator(rowDiffset, selectorHelperFn, mode);\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nconst getKey = (arr, data, fn, rowId) => {\n let key = fn(arr, data, 0, rowId);\n\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${fn(arr, data, i, rowId)}`;\n }\n return key;\n};\n\nconst keyFn = (arr, fields, idx, rowId) => {\n const field = arr[idx];\n const val = field === ROW_ID ? rowId : fields[field].internalValue;\n return val;\n};\n\nconst domainChecker = (val, domain) => {\n const domainArr = domain[0] instanceof Array ? domain : [domain];\n return domainArr.some(dom => val >= dom[0] && val <= dom[1]);\n};\n\nconst boundsChecker = {\n [MeasureSubtype.CONTINUOUS]: domainChecker,\n [DimensionSubtype.TEMPORAL]: domainChecker\n};\n\nconst isWithinDomain = (value, domain, fieldType) => boundsChecker[fieldType](value, domain);\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n let fns = [];\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const { filterByDim = true, filterByMeasure = false, clone = true } = config;\n const clonedModel = clone ? cloneWithAllFields(model) : model;\n const modelFieldsConfig = clonedModel.getFieldsConfig();\n const uids = model.getPartialFieldspace().idField.data();\n\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => (({ criteria = {} }) => {\n const { identifiers = [[], []], range } = criteria;\n let [fieldNames = [], values = []] = identifiers;\n const indices = fieldNames.reduce((map, name, i) => {\n map[name] = i;\n return map;\n }, {});\n fieldNames = fieldNames.filter(field => (field in modelFieldsConfig &&\n modelFieldsConfig[field].def.type === FieldType.DIMENSION) || field === ROW_ID);\n const dLen = fieldNames.length;\n const valuesMap = {};\n\n if (dLen) {\n for (let i = 1, len = identifiers.length; i < len; i++) {\n const row = identifiers[i];\n let key;\n if (ROW_ID in indices) {\n const ids = row[indices[ROW_ID]];\n if (ids) {\n ids.values().forEach((id) => {\n key = `${fieldNames.map((field) => {\n const idx = indices[field];\n return field === ROW_ID ? id : row[idx];\n })}`;\n valuesMap[key] = 1;\n });\n }\n } else {\n key = `${fieldNames.map((field) => {\n const idx = indices[field];\n return row[idx];\n })}`;\n valuesMap[key] = 1;\n }\n }\n }\n let rangeKeys = Object.keys(range || {}).filter(field => field in modelFieldsConfig);\n const hasData = values.length || rangeKeys.length;\n\n if (!filterByMeasure) {\n rangeKeys = rangeKeys.filter(field => modelFieldsConfig[field].def.type !== FieldType.MEASURE);\n }\n\n if (!filterByDim) {\n rangeKeys = rangeKeys.filter(field => modelFieldsConfig[field].def.type !== FieldType.DIMENSION);\n }\n\n return hasData ? (fields, i) => {\n let present = true;\n if (filterByDim) {\n present = dLen ? valuesMap[getKey(fieldNames, fields, keyFn, uids[i])] : true;\n }\n\n return rangeKeys.every((field) => {\n const val = fields[field].internalValue;\n return isWithinDomain(val, range[field], modelFieldsConfig[field].def.subtype);\n }) && present;\n } : () => false;\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = clonedModel.select((fields, i) => fns.every(fn => fn(fields, i)), {\n saveChild: false\n });\n } else {\n filteredModel = clonedModel.select((fields, i) => fns.some(fn => fn(fields, i)), {\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\n\nexport const splitWithSelect = (sourceDm, dimensionArr, reducerFn = val => val, config) => {\n const {\n saveChild,\n } = config;\n const fieldStoreObj = sourceDm.getFieldspace().fieldsObj();\n\n const {\n splitRowDiffset,\n dimensionMap\n } = selectHelper(\n sourceDm.clone(saveChild),\n reducerFn,\n config,\n sourceDm,\n (...params) => rowSplitDiffsetIterator(...params, dimensionArr, fieldStoreObj)\n );\n\n const clonedDMs = [];\n Object.keys(splitRowDiffset).sort().forEach((e) => {\n if (splitRowDiffset[e]) {\n const cloned = sourceDm.clone(saveChild);\n const derivation = dimensionMap[e];\n cloned._rowDiffset = splitRowDiffset[e].join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n const derivationFormula = fields => dimensionArr.every(_ => fields[_].internalValue === derivation.keys[_]);\n // Store reference to child model and selector function\n if (saveChild) {\n persistDerivations(sourceDm, cloned, DM_DERIVATIVES.SELECT, config, derivationFormula);\n }\n cloned._derivation[cloned._derivation.length - 1].meta = dimensionMap[e];\n\n clonedDMs.push(cloned);\n }\n });\n\n\n return clonedDMs;\n};\nexport const addDiffsetToClonedDm = (clonedDm, rowDiffset, sourceDm, selectConfig, selectFn) => {\n clonedDm._rowDiffset = rowDiffset;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n persistDerivations(\n sourceDm,\n clonedDm,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n};\n\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n let extraCloneDm = {};\n\n let { mode } = selectConfig;\n\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const setOfRowDiffsets = selectHelper(\n cloned,\n selectFn,\n selectConfig,\n sourceDm,\n selectRowDiffsetIterator\n );\n const diffIndex = selectModeMap[mode].diffIndex;\n\n addDiffsetToClonedDm(cloned, setOfRowDiffsets[diffIndex[0]], sourceDm, selectConfig, selectFn);\n\n if (diffIndex.length > 1) {\n extraCloneDm = sourceDm.clone(cloneConfig.saveChild);\n addDiffsetToClonedDm(extraCloneDm, setOfRowDiffsets[diffIndex[1]], sourceDm, selectConfig, selectFn);\n return [cloned, extraCloneDm];\n }\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\n\nexport const splitWithProject = (sourceDm, projFieldSet, config, allFields) =>\n projFieldSet.map(projFields =>\n cloneWithProject(sourceDm, projFields, config, allFields));\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const { type, subtype, name } = unitSchema;\n if (type === FieldType.DIMENSION || type === FieldType.MEASURE) {\n if (!fieldRegistry.has(subtype)) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n } else {\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converter = converterStore.get(options.dataFormat);\n\n\n if (!converter) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n let [header, formattedData] = converter.convert(data, schema, options);\n resolveFieldName(schema, header);\n\n const idIndex = schema.findIndex(field => field.subtype === DimensionSubtype.ID);\n let idData;\n\n if (idIndex !== -1) {\n idData = formattedData[idIndex] || [];\n formattedData = formattedData.filter((d, i) => i !== idIndex);\n header = header.filter((d, i) => i !== idIndex);\n schema = schema.filter(field => field.subtype !== DimensionSubtype.ID);\n } else {\n const rowLength = (formattedData[0] && formattedData[0].length) || 0;\n idData = new Array(rowLength).fill().map((d, i) => i);\n }\n\n const fieldArr = createFields(formattedData, schema, header);\n\n const idField = createFields([idData], [{\n name: ROW_ID,\n type: 'dimension',\n subtype: DimensionSubtype.ID\n }], [ROW_ID])[0];\n\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name, idField);\n relation._partialFieldspace = nameSpace;\n\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n\n // This stores the value objects which is passed to the filter method when selection operation is done.\n const valueObjects = [];\n const { fields } = nameSpace;\n const rawFieldsData = fields.map(field => field.data());\n const formattedFieldsData = fields.map(field => field.formattedData());\n const idFieldData = idField.data();\n rowDiffsetIterator(relation._rowDiffset, (i) => {\n valueObjects[i] = prepareSelectionData(fields, formattedFieldsData, rawFieldsData, i);\n valueObjects[i][ROW_ID] = new Value(idFieldData[i], idFieldData[i], idField);\n });\n nameSpace._cachedValueObjects = valueObjects;\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n name: field,\n type: schema[i].subtype || schema[i].type,\n index: i,\n };\n }\n }\n return null;\n};\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.SORT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel;\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return selectionModel;\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const excludeModels = propModelInf.excludeModels || [];\n const criterias = propModelInf.criteria;\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n const matchingCriteria = criterias.filter(val => val.groupedModel === child);\n let selectionModel = applyExistingOperationOnModel(propModel, child);\n\n if (matchingCriteria.length) {\n selectionModel = filterPropagationModel(selectionModel, matchingCriteria, {\n filterByDim: false,\n filterByMeasure: true,\n clone: false\n });\n }\n propagateIdentifiers(child, selectionModel, config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n const addGroupedModel = ({ config: conf, model }) => {\n const { criteria: crit } = conf;\n let groupedModel;\n\n if (crit !== null && crit.fields.some(d => d.type === FieldType.MEASURE)) {\n groupedModel = getRootGroupByModel(model);\n }\n return Object.assign({}, conf, {\n groupedModel\n });\n };\n\n let criterias = [];\n\n if (identifiers === null) {\n criterias = [{\n criteria: []\n }];\n criteria = [];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(addGroupedModel);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria.map(addGroupedModel), {\n criteria: identifiers,\n groupedModel: identifiers !== null && identifiers.fields.some(d => d.type === FieldType.MEASURE) ?\n getRootGroupByModel(propagationInf.propagationSource) : null\n }]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n criterias.forEach((inf) => {\n const { criteria: crit } = inf;\n const propagationModel = filterPropagationModel(rootModel, crit, {\n filterByMeasure: !!crit.find(d => d.groupedModel === rootModel)\n });\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n criteria: crit\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModel, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, {\n model: rootModel,\n groupByModel: getRootGroupByModel(actionInf.model)\n }, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId,\n propagationSource: actionInf.model\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n\n\nexport const getNormalizedProFields = (projField, allFields, fieldConfig) => {\n const normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n return Array.from(new Set(normalizedProjField)).map(field => field.trim());\n};\n\n/**\n * Get the numberFormatted value if numberFormat present,\n * else returns the supplied value.\n * @param {Object} field Field Instance\n * @param {Number|String} value\n * @return {Number|String}\n */\nexport const getNumberFormattedVal = (field, value) => {\n if (field.numberFormat) {\n return field.numberFormat()(value);\n }\n return value;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport {\n updateFields,\n cloneWithSelect,\n cloneWithProject,\n updateData,\n getNormalizedProFields\n} from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n config.mode = config.mode || defConfig.mode;\n\n const cloneConfig = { saveChild: config.saveChild };\n return cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n const normalizedProjField = getNormalizedProFields(projField, allFields, fieldConfig);\n\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat, FilteringMode } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema,\n splitWithSelect,\n splitWithProject,\n getNormalizedProFields\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport Value from './value';\nimport { converterStore } from './converter';\nimport { fieldRegistry } from './fields';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Converters are functions that transforms data in various format tpo datamodel consumabe format.\n */\n static get Converters() {\n return converterStore;\n }\n\n /**\n * Register new type of fields\n */\n static get FieldTypes() {\n return fieldRegistry;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const { idField, fields } = this.getPartialFieldspace();\n\n const dataGenerated = dataBuilder.call(\n this,\n { fields, idField },\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Returns the unique ids in an array.\n *\n * @return {Array} Returns an array of ids.\n */\n getUids () {\n const rowDiffset = this._rowDiffset;\n const ids = [];\n const idData = this.getPartialFieldspace().idField.data();\n\n rowDiffsetIterator(rowDiffset, (i) => {\n ids.push(idData[i]);\n });\n\n return ids;\n }\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails,\n withUid: true\n });\n\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n const cachedValueObjects = partialFieldspace._cachedValueObjects;\n const formattedData = field.formattedData();\n const rawData = field.partialField.data;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n cachedValueObjects.forEach((obj, i) => {\n obj[field.name()] = new Value(formattedData[i], rawData[i], field);\n });\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace,\n sourceId: propagationSourceId,\n propagationSource: this },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModel, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of rows in the source {@link DataModel}\n * instance based on a set of dimensions.\n *\n * For each unique dimensional value, a new split is created which creates a unique {@link DataModel} instance for\n * that split\n *\n * If multiple dimensions are provided, it splits the source {@link DataModel} instance with all possible\n * combinations of the dimensional values for all the dimensions provided\n *\n * Additionally, it also accepts a predicate function to reduce the set of rows provided. A\n * {@link link_to_selection | Selection} is performed on all the split {@link DataModel} instances based on\n * the predicate function\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByRow(['Origin'])\n * console.log(splitDt));\n * // This should give three unique DataModel instances, one each having rows only for 'USA',\n * // 'Europe' and 'Japan' respectively\n *\n * @example\n * // without predicate function:\n * const splitDtMulti = dt.splitByRow(['Origin', 'Cylinders'])\n * console.log(splitDtMulti));\n * // This should give DataModel instances for all unique combinations of Origin and Cylinder values\n *\n * @example\n * // with predicate function:\n * const splitWithPredDt = dt.select(['Origin'], fields => fields.Origin.value === \"USA\")\n * console.log(splitWithPredDt);\n * // This should not include the DataModel for the Origin : 'USA'\n *\n *\n * @public\n *\n * @param {Array} dimensionArr - Set of dimensions based on which the split should occur\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByRow (dimensionArr, reducerFn, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n dimensionArr.forEach((fieldName) => {\n if (!fieldsConfig[fieldName]) {\n throw new Error(`Field ${fieldName} doesn't exist in the schema`);\n }\n });\n\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n\n config = Object.assign({}, defConfig, config);\n\n return splitWithSelect(this, dimensionArr, reducerFn, config);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of fields in the source {@link DataModel}\n * instance based on a set of common and unique field names provided.\n *\n * Each DataModel created contains a set of fields which are common to all and a set of unique fields.\n * It also accepts configurations such as saveChild and mode(inverse or normal) to include/exclude the respective\n * fields\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByColumn( [['Acceleration'], ['Horsepower']], ['Origin'])\n * console.log(splitDt));\n * // This should give two unique DataModel instances, both having the field 'Origin' and\n * // one each having 'Acceleration' and 'Horsepower' fields respectively\n *\n * @example\n * // without predicate function:\n * const splitDtInv = dt.splitByColumn( [['Acceleration'], ['Horsepower'],['Origin', 'Cylinders'],\n * {mode: 'inverse'})\n * console.log(splitDtInv));\n * // This should give DataModel instances in the following way:\n * // All DataModel Instances do not have the fields 'Origin' and 'Cylinders'\n * // One DataModel Instance has rest of the fields except 'Acceleration' and the other DataModel instance\n * // has rest of the fields except 'Horsepower'\n *\n *\n *\n * @public\n *\n * @param {Array} uniqueFields - Set of unique fields included in each datamModel instance\n * @param {Array} commonFields - Set of common fields included in all datamModel instances\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByColumn (uniqueFields = [], commonFields = [], config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const normalizedProjFieldSets = [[commonFields]];\n\n config = Object.assign({}, defConfig, config);\n uniqueFields = uniqueFields.length ? uniqueFields : [[]];\n\n\n uniqueFields.forEach((fieldSet, i) => {\n normalizedProjFieldSets[i] = getNormalizedProFields(\n [...fieldSet, ...commonFields],\n allFields,\n fieldConfig);\n });\n\n return splitWithProject(this, normalizedProjFieldSets, config, allFields);\n }\n\n\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType, DimensionSubtype } from '../enums';\nimport { ROW_ID } from '../constants';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const idData = dataModel.getPartialFieldspace().idField.data();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n const idMap = [];\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n idMap.push([]);\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n idMap[rowCount] = [`${idData[i]}`];\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n idMap[hashMap[hash]].push(`${idData[i]}`);\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row, i) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n tuple[ROW_ID] = idMap[i];\n });\n\n schema.push({\n name: ROW_ID,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.ID\n });\n\n newDataModel = new DataModel(data, schema, { name: dbName });\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union,\n rowDiffsetIterator\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DataConverter } from './converter';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\nimport * as FieldsUtility from './fields';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union,\n rowDiffsetIterator\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version,\n DataConverter,\n FieldsUtility\n}, enums);\n\nexport default DataModel;\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n },\n minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\n","const swap = (arr, i, j) => {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n};\n\nconst defaultCompare = (a, b) => {\n if (a > b) {\n return -1;\n }\n return a > b ? 1 : 0;\n};\n\nconst quickselectStep = (arr, k, left, right, compare) => {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n};\n\n/**\n * Rearranges items so that all items in the [left, k] are the smallest. The k-th element will have the\n * (k - left + 1)-th smallest value in [left, right].\n * array: the array to partially sort (in place)\n * k: middle index for partial sorting (as defined above)\n * left: left index of the range to sort (0 by default)\n * right: right index (last index of the array by default)\n * compareFn: compare function\n *\n * Ref: https://github.com/mourner/quickselect\n * Example:\n * var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];\n * quickselect(arr, 8);\n * arr is [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]\n * ^^ middle index\n * @param {Array} arr the array to partially sort (in place)\n * @param {Number} k middle index for partial sorting (as defined above)\n * @param {Number} left left index of the range to sort (0 by default)\n * @param {Number} right right index (last index of the array by default)\n * @param {Function} compare compare function\n */\nconst quickselect = (arr, k, left, right, compare) => {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n};\n\nexport default quickselect;\n","import quickselect from './quick-select';\n\nconst createNode = children => ({\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n});\n\nconst extend = (a, b) => {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n};\n\n// min bounding rectangle of node children from k to p-1\nconst distBBox = (node, k, p, toBBox, destNode) => {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n};\n\n// calculate node's bbox from bboxes of its children\nconst calcBBox = (node, toBBox) => {\n distBBox(node, 0, node.children.length, toBBox, node);\n};\n\nconst compareNodeMinX = (a, b) => a.minX - b.minX;\nconst compareNodeMinY = (a, b) => a.minY - b.minY;\n\nconst bboxArea = a => (a.maxX - a.minX) * (a.maxY - a.minY);\n\nconst bboxMargin = a => (a.maxX - a.minX) + (a.maxY - a.minY);\n\nconst enlargedArea = (a, b) => (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n\nconst intersectionArea = (a, b) => {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n};\n\nconst contains = (a, b) => a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n\nconst intersects = (a, b) => b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n\nconst findItem = (item, items, equalsFn) => {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n};\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nconst multiSelect = (arr, left, right, n, compare) => {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n};\n\nconst all = (node, result) => {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n};\n\nexport default class RTree {\n constructor (maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all () {\n return all(this.data, []);\n }\n\n search (bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (const child of node.children) {\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) all(child, result);\n else nodesToSearch.push(child);\n }\n }\n\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n load (data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this.build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this.splitRoot(this.data, node);\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this.insertSingleItem(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert (item) {\n if (item) this.insertSingleItem(item, this.data.height - 1);\n return this;\n }\n\n clear () {\n this.data = createNode([]);\n return this;\n }\n\n remove (item, equalsFn) {\n if (!item) return this;\n\n let i;\n let parent;\n let goingUp;\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this.condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toJSON () { return this.data; }\n\n fromJSON (data) {\n this.data = data;\n return this;\n }\n\n toBBox (item) { return item; }\n\n compareMinX (a, b) { return a.minX - b.minX; }\n compareMinY (a, b) { return a.minY - b.minY; }\n\n build (items, left, right, height) {\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / (M ** (height - 1)));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this.build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n chooseSubtree (bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (const child of node.children) {\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n insertSingleItem (item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this.chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this.split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this.adjustParentBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n split (insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this.chooseSplitAxis(node, m, M);\n\n const splitIndex = this.chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this.splitRoot(node, newNode);\n }\n\n splitRoot (node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n chooseSplitIndex (node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n chooseSplitAxis (node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this.allDistMargin(node, m, M, compareMinX);\n const yMargin = this.allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n allDistMargin (node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n adjustParentBoxes (bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n condense (path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n } else this.clear();\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n","const ReservedFields = {\n ROW_ID: '__id__',\n MEASURE_NAMES: '__measure_names__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onLayerDraw',\n MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export var slice = Array.prototype.slice;\n","import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\n\n/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\n\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (idFn) {\n return new Selection(idFn);\n}\n\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } from 'datamodel';\n\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport { dataSelect } from './DataSystem';\nimport * as scales from './scales';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING, ReservedFields } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain = [];\n domains = domains.filter(dom => dom && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = (arr, fn = d => d) => {\n const vals = arr.reduce((acc, v) => {\n acc[fn(v)] = v;\n return acc;\n }, {});\n return Object.values(vals);\n};\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data = []) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n *\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel\n .registerImmediateListener(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n/**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n/**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\n};\n\nconst RGBAtoRGB = (r, g, b, a, r2 = 255, g2 = 255, b2 = 255) => {\n const r3 = Math.round(((1 - a) * r2) + (a * r));\n const g3 = Math.round(((1 - a) * g2) + (a * g));\n const b3 = Math.round(((1 - a) * b2) + (a * b));\n return `rgb(${r3},${g3},${b3})`;\n};\n\nconst hslaToRgb = (h, s, l, a) => {\n const [r, g, b, a1] = hslToRgb(h, s, l, a);\n return RGBAtoRGB(r, g, b, a1);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\(([\\d.]+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\nfunction RGBAToHexA (rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n for (const R in rgba) {\n const r = rgba[R];\n if (r.indexOf('%') > -1) {\n const p = r.substr(0, r.length - 1) / 100;\n\n if (R < 3) {\n rgba[R] = Math.round(p * 255);\n } else {\n rgba[R] = p;\n }\n }\n }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = `0${r}`; }\n if (g.length === 1) { g = `0${g}`; }\n if (b.length === 1) { b = `0${b}`; }\n if (a.length === 1) { a = `0${a}`; }\n\n return `#${r}${g}${b}${a}`;\n}\n\nconst transformToHex = (datumStyle, colorType) => {\n if (colorType === 'rgb') {\n const [r, g, b, a] = datumStyle.replace(/[^\\d,]/g, '').split(',');\n const aa = a || 1;\n\n const rgbaString = `rgba(${r}, ${g}, ${b}, ${aa})`;\n return RGBAToHexA(rgbaString);\n }\n // Add methods to handle hsl and hex conversion\n return null;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n *\n */\nconst getDataModelFromRange = (dataModel, criteria, mode, criteriaFields) => {\n if (criteria === null) return null;\n const fieldsConfig = dataModel.getFieldsConfig();\n const selFields = criteriaFields || Object.keys(criteria).filter(d => d in fieldsConfig);\n const selFn = fields => selFields.every((field) => {\n const fieldValue = fields[field].internalValue;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n\n if (typeof range[0] === STRING) {\n return range.find(d => d === fieldValue) !== undefined;\n }\n\n if (range) {\n // Check if the selected bar value lies insid e the selection box\n return fieldValue >= range[0] && fieldValue <= range[1];\n }\n\n return false;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\nconst getArrayIndexMap = arr => arr.reduce((acc, value, i) => {\n acc[value] = i;\n return acc;\n}, {});\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n *\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode, hasBarLayer) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig || d === ReservedFields.ROW_ID);\n filteredDataModel = dataModel.select((fields, rowId) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = propField === ReservedFields.ROW_ID ? rowId : fields[propField].internalValue;\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n } else {\n filteredDataModel = dataModel.select(() => false, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode, hasBarLayer);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key]) {\n !commonTuples[dm1Key] && (commonTuples[dm1Key] = {});\n row1.forEach((value, idx) => {\n commonTuples[dm1Key][schema1[idx].name] = value;\n });\n }\n if (!commonTuples[dm2Key]) {\n !commonTuples[dm2Key] && (commonTuples[dm2Key] = {});\n row2.forEach((value, idx) => {\n commonTuples[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\n/**\n * Returns array difference, elements in array A, not in Array B\n * @param { Array. } arr Data which needs to be grouped\n * @param { Array. } arr1 Field indices by which the data will be grouped\n * @return { Array. } Returns the array difference (A - B)\n */\nconst getArrayDiff = (arr, arr1) => arr.filter(el => arr1.indexOf(el) < 0);\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nconst getValueParser = config => (val) => {\n if (InvalidAwareTypes.getInvalidType(val)) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\nconst sortingOrder = (a, b) => {\n const sortOrder = !(a instanceof InvalidAwareTypes || b instanceof InvalidAwareTypes)\n ? a.localeCompare(b)\n : 1;\n return sortOrder;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => sortingOrder(firstVal, secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => sortingOrder(secondVal, firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position|null if sort order is invalid\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n if (!sortOrderMap[sortOrder]) return null;\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nconst difference = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => !set.has(fn1(value)));\n};\n\nconst partition = (array, filterFn) => array.reduce((acc, v, i) => {\n const pass = filterFn(v, i, array);\n\n pass ? acc[0].push(v) : acc[1].push(v);\n return acc;\n}, [[], []]);\n\nconst mix = superclass => ({\n with: (...mixins) => mixins.reduce((cls, mixin) => mixin(cls), superclass)\n});\n\nconst componentRegistry = (comps) => {\n const reg = Object.assign({}, comps);\n const regObj = {\n register: (def, customKey) => {\n const key = customKey || def.formalName();\n\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n\n return regObj;\n};\n\nconst getReadableTicks = (domain, steps) => {\n // scaling the axis based on steps provided\n const orderedDomain = [Math.min(...domain), Math.max(...domain)];\n if (steps < 3) {\n return orderedDomain;\n }\n\n const tempScale = scales.scaleQuantize().domain(orderedDomain).nice();\n let tempAxis = null;\n let legendTicks = null;\n\n tempAxis = Symbols.axisBottom().scale(tempScale);\n\n legendTicks = tempAxis.scale().ticks(steps);\n\n if (Math.max(...legendTicks) < orderedDomain[1]) {\n // legendTicks.pop();\n legendTicks.push(orderedDomain[1]);\n }\n if (Math.min(...legendTicks) > orderedDomain[0]) {\n // legendTicks.shift();\n legendTicks.unshift(orderedDomain[0]);\n }\n return legendTicks;\n};\n\nconst RGBAToHSLA = (r, g, b, a = 1) => {\n // Make r, g, and b fractions of 1\n r /= 255;\n g /= 255;\n b /= 255;\n\n // Find greatest and smallest channel values\n const cmin = Math.min(r, g, b);\n const cmax = Math.max(r, g, b);\n const delta = cmax - cmin;\n let h = 0;\n let s = 0;\n let l = 0;\n\n // Calculate hue\n // No difference\n if (delta === 0) {\n h = 0;\n } else if (cmax === r) {\n // Red is max\n h = ((g - b) / delta) % 6;\n } else if (cmax === g) {\n // Green is max\n h = (b - r) / delta + 2;\n } else {\n // Blue is max\n h = (r - g) / delta + 4;\n }\n h = Math.round(h * 60);\n\n // Make negative hues positive behind 360°\n if (h < 0) { h += 360; }\n // Calculate lightness\n l = (cmax + cmin) / 2;\n // Calculate saturation\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n // Multiply l and s by 100\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n\n return {\n color: `hsla(${h},${s}%,${l}%,${a})`,\n code: [h, s, l, a]\n };\n};\n\nconst transformColor = (rgbaValues, { h = 0, s = 0, l = 0, a }, datum, apply) => {\n const [origH, origS, origL, origA] = RGBAToHSLA(...rgbaValues).code;\n const sanitizedA = parseFloat(a || origA, 10);\n const newH = origH + h;\n const newS = origS + s;\n const newL = origL + l;\n let newA = sanitizedA + 1;\n\n if (!apply) {\n newA = sanitizedA - 1;\n }\n\n const finalcolor = {\n color: `hsla(${newH},${newS}%,${newL}%,${newA})`,\n hsla: [newH, newS, newL, newA]\n };\n return finalcolor;\n};\n\nconst pointWithinCircle = (c, point) => {\n const { x: cx, y: cy, r } = c;\n const { x, y } = point;\n\n const dist = Math.sqrt((cx - x) ** 2 + (cy - y) ** 2);\n return dist <= r;\n};\n\n/**\n * Generates a function which performs an intersection (dataModel select)\n * operation for multiple fields\n * @param {Array} targetData - Nested array with field and values in the format:\n * [\n * [field1, field2]\n * [val1, val2]\n * ]\n * @param {Object} dm - The dataModel instance\n * @return {Function} filter function\n */\nconst dmMultipleSelection = (targetData, dm) => {\n const targetFields = targetData[0];\n const targetVals = targetData.slice(1, targetData.length);\n const payloadMap = targetVals.reduce((acc, v) => {\n acc[v] = v;\n return acc;\n }, {});\n const measures = Object.keys(dm.getFieldspace().getMeasure());\n\n const filterFn = (fields, i) => {\n const row = `${targetFields.map((field) => {\n let val;\n if (field === ReservedFields.MEASURE_NAMES) {\n val = measures;\n } else if (field === ReservedFields.ROW_ID) {\n val = i;\n } else {\n const currentField = fields[field];\n const isFieldInvalid = currentField instanceof InvalidAwareTypes;\n\n val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue;\n }\n return val;\n })}`;\n return row in payloadMap;\n };\n return filterFn;\n};\n\nconst getIndexMap = (arr, prop) => arr.reduce((acc, v, i) => {\n const key = prop ? v[prop] : v;\n acc[key] = i;\n return acc;\n}, {});\n\nexport {\n getIndexMap,\n arraysEqual,\n componentRegistry,\n mix,\n partition,\n getArrayIndexMap,\n getValueParser,\n require,\n intersect,\n difference,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getArrayDiff,\n getSymbol,\n transformColor,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n transformToHex,\n hsvToRgb,\n hslaToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n unique,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff,\n getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n getReadableTicks,\n dmMultipleSelection,\n pointWithinCircle\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n const sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","import Model from 'hyperdis';\nimport { defaultValue, getObjProp, toArray } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\n }\n};\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nexport class Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (...params) {\n registerListener(this, 'on', ...params);\n }\n\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\n}\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitization: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n const paramsLen = params.length;\n if (paramsLen) {\n const { takesMultipleParams = false } = meta || {};\n // If parameters are passed then it's a setter\n let val = takesMultipleParams ? params : params[0];\n\n if (meta) {\n let values;\n const prevVal = context.get(nsProp, subNamespace);\n const { sanitization, typeCheck, typeExpected } = meta;\n if (typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n const typeCheckResult = typeCheck(val);\n\n if (typeCheckResult) {\n values = val;\n }\n } else if (typeof typeCheck === 'string' && typeCheck === 'constructor') {\n if (val && val.constructor.name === typeExpected) {\n values = val;\n }\n } else {\n values = val;\n }\n\n const preset = meta.preset;\n const oldValues = toArray(context.get(nsProp, subNamespace));\n preset && preset(values, holder);\n if (takesMultipleParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values && context.commit(nsProp, values, subNamespace);\n } else {\n context.commit(nsProp, val, subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, Array.isArray(conf.value));\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = resolver(resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\nimport RTree from './r-tree';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColor,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n hslaToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect,\n partition,\n mix,\n componentRegistry,\n getArrayDiff,\n difference,\n getArrayIndexMap,\n arraysEqual,\n getReadableTicks,\n unique,\n dmMultipleSelection,\n pointWithinCircle,\n getIndexMap\n} from './common-utils';\n\nexport {\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint,\n hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\nexport {\n RTree\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const TEXT = 'text';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0',\n RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0',\n COLOR: 'color',\n SHAPE: 'shape',\n SIZE: 'size',\n TEXT: 'text'\n};\n\nexport const STROKE_DASHARRAY = 'stroke-dasharray';\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\n","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n },\n encodingTransform: {},\n encodingFieldsInf: {},\n dependencies: {},\n dataProps: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n *\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n *\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n adjustRange: false,\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 7,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0,\n defaultSort: 'asc'\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n // selectElement(this).transition()\n // .duration(1000).text(datum);\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const renderConfig = axisInstance.renderConfig();\n const config = axisInstance.config();\n\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\n const mount = axisInstance.mount();\n\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n\n let availableSpace;\n let labelProps;\n let tickSize;\n if (axisInstance.domain().length > 0) {\n const labelManager = axisInstance.dependencies().labelManager;\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n\n const {\n _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n\n tickSize = axisInstance.getTickSize();\n\n // Set style for tick labels\n labelManager.setStyle(tickLabelStyle);\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\n\n // Get range(length of range)\n availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n labelProps = axisInstance.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n setFixedBaseline(axisInstance);\n if (!labels.rotation && labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .call(axis);\n } else {\n selectContainer.call(axis);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n }\n\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n }\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = Math.min(minTickSpace.width, tickDimWidth);\n const minTickHeight = Math.min(minTickSpace.height, tickDimHeight);\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n\n if (heightForTicks < minTickWidth) {\n context.renderConfig({ showAxisName: false });\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimHeight / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\n\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n\n context.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return {\n allTickDimensions,\n tickSize: 0,\n tickDimensions: { height: 0, width: 0 },\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n height = ((max - min) / Math.abs(minTickDiff)) * tickDimHeight;\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + (tickValues ? axisNamePadding : 0);\n\n return {\n height,\n width\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._axisDimensions = {};\n this._smartTicks = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n resetDomain () {\n this._domain = [];\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (value) {\n return this.scale().invert(value);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n\n /**\n * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n _getRawTickValue (data) {\n return data;\n }\n\n getTicksBasedOnData (tickData) {\n const allTicks = selectElement(this.mount()).selectAll('.tick');\n let elementToBeModified = null;\n let elementNotToBeModified = null;\n if (tickData) {\n elementToBeModified = allTicks.filter(tickValue => tickData === this._getRawTickValue(tickValue));\n elementNotToBeModified = allTicks.filter(tickValue => !(tickData === this._getRawTickValue(tickValue)));\n }\n return {\n selectionSet: elementToBeModified,\n rejectionSet: elementNotToBeModified || allTicks\n };\n }\n}\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return tickValues;\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.renderConfig().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation\n } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n *\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\n }\n _getRawTickValue (data) {\n return (new Date(data)).getTime();\n }\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#1f77b4',\n '#ff7f0e',\n '#2ca02c',\n '#d62728',\n '#9467bd',\n '#8c564b',\n '#e377c2',\n '#7f7f7f',\n '#bcbd22',\n '#17becf'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv, defaultValue } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR, DEFAULT_CONFIG } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, defaultValue(Number(color[3]), 1)];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops ?\n config.stops :\n config.range && config.range.length > 2 ?\n config.range.length :\n DEFAULT_CONFIG.stops;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n\nexport const sanitiseConfigIntervals = (intervals) => {\n if (intervals) {\n return intervals;\n }\n return 5;\n};\n","import { piecewiseInterpolator,\n hslInterpolator,\n sanitizeDomainWhenEqual, getReadableTicks } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n newStops = getReadableTicks(domain, stops);\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n*\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n *\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(sanitizeDomainWhenEqual(domain), range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType) =>\n strategies()[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv, defaultValue } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType, scaleMap } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, ORDINAL, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString, getActualHslColor } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (color) {\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n }\n return [...this.config().value];\n }\n\n setRangeWithInterpolatedColors (scaleType, scaleInfo) {\n const { domain: originalDomain, range: originalRange } = scaleInfo;\n const originalDomainLen = originalDomain.length;\n const originalRangeLen = originalRange.length;\n\n if (scaleType === ORDINAL && originalDomainLen > originalRangeLen) {\n const newRange = [];\n const newDomain = originalDomain.map((d, i) => i / originalDomainLen);\n\n this._linearScale = scaleMap.linear()\n .range(this._config.range)\n .domain(newDomain);\n\n for (let i = 0, len = originalDomainLen; i < len; i++) {\n const rangeVal = (1 / len) * i;\n newRange.push([...this._linearScale(rangeVal)]);\n }\n this.scale().range(newRange);\n }\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleType = this._colorStrategy.scale;\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n\n // Interpolate colors using linear scale if domain exceeds range\n this.setRangeWithInterpolatedColors(scaleType, scaleInfo);\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = Math.min(defaultValue(color[3], 0), 1);\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = Math.min(a + transformationArr[3] || 0, 1);\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n getHslArray (color) {\n return getActualHslColor(color);\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 51,\n range: [51, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator, getReadableTicks } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n // const interpolator = numberInterpolator()(...domain);\n // for (let i = 0; i < intervals; i++) {\n // newIntervals[i] = interpolator(i / (intervals - 1));\n // }\n newIntervals = getReadableTicks(domain, intervals);\n }\n // if (newIntervals[0] < domain[0]) {\n // newIntervals.shift();\n // }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => {\n context._userRange = value.range;\n return mergeRecursive(context._config || {}, value);\n }\n },\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\nimport { sanitiseConfigIntervals } from '../helper';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this.config(this.constructor.defaultConfig());\n this.config(config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n\n this._config.range = this._userRange ? this._userRange : this._config.range;\n\n this._config.stops = sanitiseConfigIntervals(this._config.stops);\n this._rangeType = this._config.type === 'linear' && !!this._config.stops ? DISCRETE : CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1] || domain.length === 1) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().stops);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive, InvalidAwareTypes } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n *\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\n}\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing data\n */\nexport const DATA = 'data';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n\nexport const ANGLE0 = 'angle0';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\nexport const DEFAULT = 'default';\n/**\n * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\n\nexport const DARK = 'dark';\nexport const NONE = 'none';\nexport const NORMAL = 'normal';\nexport const DARKER = 'darker';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack, InvalidAwareTypes } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n if (row[valueFieldIndex] instanceof InvalidAwareTypes) {\n row[valueFieldIndex] = null;\n }\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const { uniqueField, value: valueField, groupBy } = config;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype,\n retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps,\n defaultValue,\n isSimpleObject,\n InvalidAwareTypes\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nexport const transformColor = (colorAxis, datum, styleType, intensity, interactionType) => {\n const meta = datum.meta;\n const stateColor = defaultValue(meta.currentState[interactionType][styleType], meta.originalState[styleType]);\n const colorInfo = colorAxis.transformColor(stateColor, intensity);\n\n // meta.stateColor[styleType] = colorInfo.hsla;\n meta.currentState[interactionType][styleType] = colorInfo.hsla;\n return colorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const { apply, interactionType, reset } = config;\n const mountPoint = selectElement(context.mount()).select('.muze-overlay-paths').node();\n\n elements.forEach((elem) => {\n const options = { mountPoint, apply, reset };\n context.applyLayerStyle(elem, interactionType, interactionStyles, options);\n\n // const interactionStylesEntries = Object.entries(interactionStyles.style);\n\n // for (const [type, value] of interactionStylesEntries) {\n // const style = { type, value };\n // const options = { mountPoint, apply, reset };\n // context.applyLayerStyle(elem, interactionType, style, options);\n // }\n });\n};\n\nexport const retrieveEncodingInf = (encoding, fieldsConfig, encodingNames) => {\n const encodingInf = {};\n\n encodingNames\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n return encodingInf;\n};\n\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const fields = [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT];\n return retrieveEncodingInf(encoding, fieldsConfig, fields);\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const fields = [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT];\n return retrieveEncodingInf(encoding, fieldsConfig, fields);\n }\n};\n\nexport const setNullsInStack = (transformedData, schema, value, setNulls) => {\n const uniqueFieldIndex = schema.findIndex(d => d.name === value);\n transformedData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n if (dataObj.data[uniqueFieldIndex] === null && !setNulls) {\n dataObj[0] = new InvalidAwareTypes();\n dataObj[1] = new InvalidAwareTypes();\n }\n });\n });\n return transformedData;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const { transform, connectNullData: setNullData } = config;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n const value = yFieldType === FieldType.MEASURE ? yField : xField;\n let transformedData = transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value\n }, data.uids);\n\n if (transformType === STACK) {\n transformedData = setNullsInStack(transformedData, schema, value, setNullData);\n }\n return transformedData;\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\nexport const dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsArr = Object.keys(fieldsConfig);\n const fieldsLen = fieldsArr.length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n const source = pointObj.source;\n pointObj.dataObj = fieldsArr.reduce((acc, name) => {\n acc[name] = source[fieldsConfig[name].index];\n return acc;\n }, {});\n return pointObj;\n });\n }).filter(d => d.length);\n }\n};\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n }\n};\n\nconst defFn = (d) => {\n const { x, y } = d.update;\n return {\n x,\n y\n };\n};\n\nexport const attachDataToVoronoi = (voronoi, points, accessor = defFn) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== undefined).map((d) => {\n const { x, y } = accessor(d);\n return {\n x,\n y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n const { xField, yField, xFieldType, yFieldType } = encodingFieldInf;\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n\n return [\n !xField,\n !yField,\n !groupByField,\n getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE,\n xFieldType === FieldType.DIMENSION && yFieldType === FieldType.DIMENSION,\n dimensionField && encodingFieldInf[dimensionField] === groupByField\n ];\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates(encodingFieldInf, context, groupByField).some(value => value)) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (initialStyle, conf = {}) => ({\n originalStyle: Object.assign({}, {\n styles: initialStyle\n }, conf),\n currentState: new Map()\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n\nexport const getBoundBoxes = points => points.map((point) => {\n const { x, y } = point.update;\n const data = point.data;\n return {\n minX: x,\n maxX: x,\n minY: y,\n maxY: y,\n data\n };\n});\n\nexport const getDataFromEvent = (context, event, data) => {\n const dataPoint = data || selectElement(event.target).data()[0];\n if (isSimpleObject(dataPoint) && getObjProp(dataPoint, 'meta', 'layerId') === context.id()) {\n const values = dataPoint && dataPoint.source;\n let identifiers = null;\n if (values) {\n identifiers = context.getIdentifiersFromData(values, dataPoint.rowId);\n }\n return {\n dimensions: [dataPoint],\n id: identifiers,\n layerId: context.id()\n };\n }\n return null;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [prevData, data]) => {\n context.dataDidSet([prevData, data]);\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import { partition } from 'muze-utils';\n\nconst getLastItemInMap = map => Array.from(map)[map.size - 1];\n\nconst getPreviousStyle = (meta, interactionType) => {\n const { originalStyle, currentState } = meta;\n let stylesForCurrentLevel = Object.assign({}, originalStyle);\n\n if (currentState.size > 0) {\n interactionType = getLastItemInMap(currentState)[0];\n stylesForCurrentLevel = currentState.get(interactionType) || {};\n // const elemFill = elem.style('fill');\n // const newStyle = Object.assign({}, stylesForCurrentLevel, { fill: elemFill });\n }\n return stylesForCurrentLevel;\n};\n\nconst strokeProps = {\n 'stroke-width': 1,\n stroke: 1,\n 'stroke-opacity': 1\n};\n\nconst parseStyle = (value, { datum, datumStyle }, apply) => {\n if (typeof value === 'function') {\n if (isNaN(datumStyle)) {\n // const colorType = detectColor(datumStyle);\n const rgbaValues = datumStyle.replace(/[^\\d,.]/g, '').split(',').map(s => Number(s));\n value = value(rgbaValues, datum, apply);\n } else {\n const numValue = parseFloat(datumStyle, 10);\n value = value(numValue, datum, apply);\n }\n return value;\n }\n return value;\n};\n\nexport const applyStylesOnInteraction = (context, elem, interactionType, conf, options) => {\n const { mountPoint, apply, reset } = options;\n\n const d = elem.data()[0];\n let datum;\n\n if (Array.isArray(d)) {\n datum = d[0];\n } else {\n datum = Array.isArray(d.data) ? d.data[0] : d;\n }\n const { currentState, originalStyle } = datum.meta;\n\n let applicableStyles = {};\n\n const { style: styles, strokePosition } = conf;\n let applicableStrokePos = strokePosition;\n\n if (reset) {\n currentState.clear();\n }\n\n let applyStyle = true;\n\n if (apply) {\n const sanitizedStyles = {\n styles: {},\n strokePosition\n };\n for (const type in styles) {\n const parsedStyleVal = parseStyle(styles[type], {\n datum,\n datumStyle: elem.style(type)\n }, apply);\n\n sanitizedStyles.styles[type] = parsedStyleVal;\n }\n currentState.set(interactionType, sanitizedStyles);\n applicableStyles = sanitizedStyles.styles;\n } else if (!currentState.has(interactionType) && !reset) {\n applyStyle = false;\n } else {\n currentState.delete(interactionType);\n const currentStyle = getPreviousStyle(datum.meta, interactionType);\n applicableStyles = Object.assign({}, originalStyle.styles, currentStyle.styles);\n applicableStrokePos = currentStyle.strokePosition || originalStyle.strokePosition;\n }\n\n const styleKeys = Object.keys(applicableStyles);\n const [strokeStyles, otherStyles] = partition(styleKeys, v => v in strokeProps);\n\n applyStyle && context.applyStyles({\n strokeStyles,\n otherStyles,\n styleObj: applicableStyles,\n elem,\n datum,\n applicableStrokePos,\n mountPoint\n });\n};\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n transactor,\n defaultValue,\n getObjProp,\n InvalidAwareTypes\n} from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer,\n encodingFieldInfRetriever\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\nimport { BASE_LAYER, AREA_LAYER } from '../enums/constants';\nimport { applyStylesOnInteraction } from './helper';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\nexport const BaseLayerMixin = superclass => class extends superclass {\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a\n * layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.size Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor () {\n super();\n\n generateGetterSetters(this, this.constructor.getterSetters());\n this.axes({});\n this.alias(this.constructor.formalName() + getUniqueId());\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(this.localOptions()).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: this.getRenderProps(),\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = this.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BASE_LAYER, this);\n\n transactor(this, this.constructor.localOptions(), store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n static getterSetters () {\n return props;\n }\n\n static localOptions () {\n return localOptions;\n }\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among\n * multiple layers of same type if one layer has to be referred, alias is used. If no alias is given then\n * `formalName` is set as the alias name.\n *\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a categorical field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n getUidsFromPayload ({ model, uids }, targetData) {\n let uidsArr = uids;\n let dm = model;\n\n if (targetData) {\n const targetFields = targetData[0];\n const targetVals = targetData.slice(1, targetData.length);\n const payloadMap = targetVals.reduce((acc, v) => {\n acc[v] = v;\n return acc;\n }, {});\n const measures = Object.keys(this.data().getFieldspace().getMeasure());\n\n dm = model.select((fields) => {\n const row = `${targetFields.map((field) => {\n let val;\n if (field === ReservedFields.MEASURE_NAMES) {\n val = measures;\n } else if (field === ReservedFields.ROW_ID) {\n val = fields[ReservedFields.ROW_ID];\n } else {\n const currentField = fields[field];\n const isFieldInvalid = currentField instanceof InvalidAwareTypes;\n\n val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue;\n }\n return val;\n })}`;\n return row in payloadMap;\n }, {\n saveChild: false\n });\n\n const dmUids = dm.getUids();\n uidsArr = uids.filter(d => dmUids.find(id => `${id}` === `${d[0]}`));\n }\n\n return {\n model: dm,\n uids: uidsArr,\n length: uidsArr.length\n };\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the\n * data // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, options) {\n const interactionConfig = this.config().interaction || {};\n const { apply, styles, reset } = options;\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType,\n reset\n });\n }\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BASE_LAYER);\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n getInteractionStyles () {\n return applyStylesOnInteraction;\n }\n\n addOverlayPath () {\n return null;\n }\n\n removeOverlayPath () {\n return null;\n }\n\n applyLayerStyle (elem, interactionType, style, options) {\n const interactionFn = this.getInteractionStyles();\n return interactionFn(this, elem, interactionType, style, options);\n }\n\n getIdentifiersFromData (data, rowId) {\n const schema = this.data().getSchema();\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n\n const allMeasures = schema.every(field => field.type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n const { type } = fieldsConfig[name].def;\n if (type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n const measures = schema.filter(d => d.type === FieldType.MEASURE).map(d => d.name);\n if (allMeasures) {\n identifiers[0].push(...[ReservedFields.ROW_ID]);\n identifiers[1].push(...[rowId]);\n }\n if (measures.length) {\n identifiers[0].push(ReservedFields.MEASURE_NAMES);\n identifiers[1].push(measures.join());\n }\n return identifiers;\n }\n\n hasPlotSpan () {\n return false;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n * Returns the information of the marks corresponding to the supplied identifiers.\n * Identifiers are a set of field names and their corresponding values in an array.\n * It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { source, rowId } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers, idx = 0) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this._normalizedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n const layerName = this.constructor.formalName();\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n if (layerName === AREA_LAYER) {\n enc = (idx % 2 === 0) ? 'y' : 'y0';\n }\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj.source;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc] || 0;\n const row = dataObj.source;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids,\n * it returns all the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n /**\n * Called when the layer datamodel is set.\n *\n * @param {Array} arr Old and new datamodel instance.\n * @param {DataModel} arr[0] Previous datamodel instance.\n * @param {DataModel} arr[1] Current datamodel instance.\n *\n * @return {BaseLayer} Instance of layer.\n */\n dataDidSet ([, data]) {\n const config = this.config();\n\n if (data && config) {\n if (this._cacheEnabled) {\n this._cachedData.push(data);\n } else {\n this._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = this.retrieveEncodingFields(encodingValue, this.coord(), data);\n this.encodingFieldsInf(encodingFieldsInf);\n this.resolveTransformType();\n this._transformedData = this.getTransformedData(data, config,\n this.transformType(), encodingFieldsInf);\n this._normalizedData = this.getNormalizedData(this._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = this.calculateDomainFromData(this._normalizedData,\n this.encodingFieldsInf(), this.data().getFieldsConfig());\n this.domain(domain);\n }\n }\n }\n return this;\n }\n\n retrieveEncodingFields (encoding, coord, data) {\n const fieldsConfig = data.getFieldsConfig();\n\n return encodingFieldInfRetriever[coord](encoding, fieldsConfig);\n }\n\n static getRenderProps () {\n return [`${layerNs[1]}.${PROPS.DATA}`, ...['x', 'y', 'radius'].map(type =>\n `${groupNs}.domain.${type}`)];\n }\n\n applyStyles ({ strokeStyles, otherStyles, styleObj, elem, mountPoint, applicableStrokePos, datum }) {\n strokeStyles.forEach((type) => {\n this.addOverlayPath(\n elem.node(),\n datum,\n { type, value: styleObj[type] },\n applicableStrokePos,\n mountPoint\n );\n });\n\n this.applyElementStyles(elem, otherStyles, styleObj);\n }\n\n applyElementStyles (elem, styles, styleObj) {\n styles.forEach((type) => {\n elem.style(type, styleObj[type]);\n });\n }\n\n getBoundBoxes () {\n return null;\n }\n};\n","import {\n mix\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport { BaseLayerMixin } from './base-mixin';\nimport { BASE_LAYER } from '../enums/constants';\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @module BaseLayer\n */\nexport default class BaseLayer extends mix(SimpleLayer).with(BaseLayerMixin) {\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return BASE_LAYER;\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols,\n setStyles\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\n\nconst containsNull = (elem) => {\n const { x, y } = elem ? elem.update : {};\n if (x === null || y === null) {\n return true;\n }\n return false;\n};\n\nconst settIndexPrevOrNext = (arr, index, indexesObj) => {\n const prevContainsNull = containsNull(arr[index - 1], index - 1);\n const nextContainsNull = containsNull(arr[index + 1], index + 1);\n\n !prevContainsNull && indexesObj.prevOfNull.push(index - 1);\n !nextContainsNull && indexesObj.nextOfNull.push(index + 1);\n};\n\nconst getborderIndexes = (arr) => {\n const indexes = {\n prevOfNull: [],\n nextOfNull: []\n };\n arr.forEach((value, index) => {\n const { update } = value;\n if (update.y === null || update.x === null) {\n settIndexPrevOrNext(arr, index, indexes);\n }\n });\n return indexes;\n};\n\nconst makeStartEndPair = (arr, borderIndexes) => {\n const pairArray = [];\n const { prevOfNull, nextOfNull } = borderIndexes;\n const length = prevOfNull.length;\n if (!length) {\n return pairArray;\n }\n\n for (let i = 0; i < length; i++) {\n const pair = [];\n const prevValue = arr[prevOfNull[i]];\n const nextValue = arr[nextOfNull[i]];\n if (prevValue) {\n pair.push(prevValue);\n }\n if (nextValue) {\n pair.push(nextValue);\n }\n pairArray.push(pair);\n }\n return pairArray;\n};\n\nconst sanitizeNullConfig = (arr) => {\n const borderIndexes = getborderIndexes(arr);\n return makeStartEndPair(arr, borderIndexes);\n};\n\nconst getElementsForLine = (params) => {\n const { mount, data, className, layer, strokeStyle, linepath, transition, updateFns } = params;\n let element = makeElement(mount, 'path', data.length ? [data] : [], className, updateFns);\n element.attr('class', (d, i) => d[i].className);\n setStyles(element, strokeStyle);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n element.attr('d', linepath(data))\n .style('fill-opacity', 0);\n return element;\n};\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n const { layer, container, points, interpolate, connectNullData, className, style, transition } = context;\n const containerSelection = selectElement(container);\n const strokeStyle = layer.config().nullDataLineStyle;\n const nullDataLineClass = layer.config().nullDataLineClass;\n const mount = containerSelection.attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(filterFn);\n\n const graphicElems = layer._graphicElems;\n const updateFns = {\n update: (group, d) => {\n d.forEach((dd) => {\n graphicElems[dd.rowId] = containerSelection;\n });\n }\n };\n\n updateStyle(mount, style);\n\n const elementWithNullData = getElementsForLine({\n mount,\n data: points,\n strokeStyle: undefined,\n layer,\n linepath,\n transition,\n updateFns\n });\n const sanitizedPoints = sanitizeNullConfig(points);\n\n sanitizedPoints.map((d) => {\n if (connectNullData && d.length > 1) {\n getElementsForLine({\n mount,\n data: d,\n strokeStyle,\n className: `.${className}-${nullDataLineClass}`,\n layer,\n linepath,\n transition,\n updateFns\n });\n }\n return null;\n });\n return elementWithNullData;\n};\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n fade: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n focus: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n brushStroke: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n crossline: true,\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n },\n fillOpacity: {\n value: 0\n },\n strokeWidth: {\n value: '2px'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false,\n nullDataLineStyle: {},\n nullDataLineClass: 'null'\n};\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n InvalidAwareTypes,\n getObjProp\n} from 'muze-utils';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData,\n getBoundBoxes\n} from '../../helpers';\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport const LineLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of LineLayer.\n *\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n static formalName () {\n return 'line';\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = super.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n static shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const axes = this.axes();\n const encoding = this.config().encoding;\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const style = {\n stroke: resolvedEncodings.color,\n 'fill-opacity': encoding.fillOpacity.value,\n 'stroke-width': encoding.strokeWidth.value\n };\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style,\n rowId: d.rowId,\n source: d.source,\n data: d.dataObj,\n meta: getColorMetaInf(style)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n getTranslatedData (normalizedData, colorValFn, colorFieldIndex, axes) {\n return normalizedData.map((data, i) => {\n let color;\n const colorVal = data.find(d => d.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(data, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n return {\n data: this.translatePoints(data),\n style: this.getPathStyle(color)\n };\n });\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n\n const colorValFn = encoding.color.value;\n const translatedPoints = this.getTranslatedData(normalizedData, colorValFn, colorFieldIndex, axes);\n\n makeElement(container, 'g', translatedPoints, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n const points = dataArr.data;\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n const style = dataArr.style;\n\n this._points.push(points);\n this.getDrawFn()({\n layer: this,\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d.data[0].source[colorFieldIndex] || d.data[0].rowId);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n\n applyStyles ({ strokeStyles, otherStyles, styleObj, elem }) {\n [...otherStyles, ...strokeStyles].forEach((type) => {\n elem.style(type, styleObj[type]);\n });\n }\n\n getBoundBoxes () {\n return getBoundBoxes(this._points.flat());\n }\n};\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n fade: {\n style: {\n 'fill-opacity': 0.7\n }\n },\n focus: {\n style: {\n 'fill-opacity': 0.7\n }\n },\n brushStroke: {\n style: {\n 'fill-opacity': 0.7\n }\n }\n },\n crossline: true,\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n },\n fillOpacity: {\n value: 0.3\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n const { layer, container, style, points, transition, className, interpolate, connectNullData } = params;\n const graphicElems = layer._graphicElems;\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data(points.length ? [points] : []);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null));\n\n mount.attr('class', className);\n\n let filteredPoints = points;\n if (connectNullData) {\n filteredPoints = filteredPoints.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection\n .enter()\n .append('path')\n .attr('d', enterAreaPath(filteredPoints))\n .each((d) => {\n d.forEach((dd) => {\n if (dd.rowId !== null) {\n graphicElems[dd.rowId] = mount.select('path');\n }\n });\n });\n\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function () {\n const element = selectElement(this);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport {\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport const AreaLayerMixin = superclass => class extends superclass {\n\n /** Default configuration of area layer\n *\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n let point = this._voronoi.find(x, y, searchRadius);\n let index;\n let nearestPoint = null;\n\n if (!point && config.dimValue && this._pointMap) {\n const pointArr = this._pointMap[config.dimValue[1][0]] || [];\n\n for (let i = 0, len = pointArr.length; i < len; i++) {\n const { y: pointY, y0: pointY0 } = pointArr[i].update;\n if (pointY < y && y < pointY0) {\n index = i;\n nearestPoint = pointArr[i];\n break;\n }\n }\n\n // Index is a number(0 or more)\n if (index !== undefined) {\n point = {\n index,\n data: {\n x,\n y,\n data: nearestPoint\n }\n };\n }\n }\n\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y0: dimensions.y0,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.encodingFieldsInf();\n const { x: xAxis, y: yAxis } = axes;\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const style = {\n fill: color,\n 'fill-opacity': encoding.fillOpacity.value\n };\n\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n data: d.dataObj,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta: getColorMetaInf(style)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color,\n 'fill-opacity': 0.30\n };\n }\n};\n","import { mix } from 'muze-utils';\nimport { AREA_LAYER } from '../../enums/constants';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { LineLayerMixin } from '../line/line-mixin';\nimport { AreaLayerMixin } from './area-mixin';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport default class AreaLayer extends mix(BaseLayer).with(BaseLayerMixin, LineLayerMixin, AreaLayerMixin) {\n static formalName () {\n return AREA_LAYER;\n }\n}\n\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n interaction: {\n highlight: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.1\n }, data, apply).color\n }\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.3\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n height: 100,\n width: 100,\n sort: '',\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\nexport const ArcLayerMixin = superclass => class extends superclass {\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\n }\n\n getNearestPoint (x, y, config = {}) {\n return this.getDataFromEvent(config.event);\n }\n\n getDataFromEvent (event) {\n const dataPoint = selectElement(event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf({\n fill: color\n }),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\n\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n};\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayerMixin, BaseLayer } from '../../base-layer';\nimport { ArcLayerMixin } from './arc-mixin';\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\n */\nexport default class ArcLayer extends mix(BaseLayer).with(BaseLayerMixin, ArcLayerMixin) {\n static formalName () {\n return 'arc';\n }\n}\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { LineLayerMixin } from './line-mixin';\nimport { LINE_LAYER } from '../../enums/constants';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport default class LineLayer extends mix(BaseLayer).with(BaseLayerMixin, LineLayerMixin) {\n static formalName () {\n return LINE_LAYER;\n }\n}\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n graphicElems[dataObj.rowId] = element;\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: -15\n }, data, apply).color\n }\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n }\n },\n crossline: false,\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport {\n positionPoints,\n getIndividualClassName,\n resolveEncodingValues,\n getColorMetaInf,\n toCartesianCoordinates,\n getDataFromEvent\n} from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: { ...{ layerId: layerInst.id() },\n ...getColorMetaInf({\n fill: resolvedVal.color\n }) },\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d.source;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const color = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: { ...{ layerId: layerInst.id() },\n ...getColorMetaInf({\n fill: resolvedEncodings.color\n }) },\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport const TextLayerMixin = superclass => class extends superclass {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n getPointTranslator (val) {\n return pointTranslators[val];\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\n }\n });\n return this;\n }\n\n getNearestPoint (x, y, { event }) {\n if (!this.data()) {\n return null;\n }\n return this.getDataFromEvent(event);\n }\n\n getDataFromEvent (event) {\n return getDataFromEvent(this, event);\n }\n};\n\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { TextLayerMixin } from './text-mixin';\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport default class TextLayer extends mix(BaseLayer).with(BaseLayerMixin, TextLayerMixin) {\n static formalName () {\n return 'text';\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol,\n setStyles\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, groupElement) {\n const { shape, size, update, style } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n makeElement(groupElement, () => newShape, [1]);\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n const pathEl = makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n setStyles(pathEl, style);\n } else {\n d.shape = 'circle';\n createShape(d, groupElement);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\n};\n\nexport default drawSymbols;\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: {\n className: 'highlight-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n // fill: 'red'\n },\n strokePosition: 'center'\n },\n focusStroke: {\n className: 'focus-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n commonDoubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n brushStroke: {\n className: 'brush-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n // fill: 'blue'\n },\n strokePosition: 'outside'\n },\n doubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n innerPadding: 0.1,\n nearestPointThreshold: 5,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: {},\n stroke: {\n value: '#000'\n },\n 'stroke-width': {\n value: 0\n },\n fill: {},\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n 'stroke-opacity': {\n value: 1\n },\n 'fill-opacity': {\n value: 0.5\n },\n strokePosition: {\n value: 'center'\n },\n interaction: {\n anchors: 'highlight',\n 'persistent-anchors': 'focusStroke',\n 'brush-anchors': 'brushStroke'\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import { FieldType, COORD_TYPES } from 'muze-utils';\nimport { ENCODING } from '../../enums/constants';\nimport {\n getIndividualClassName,\n resolveEncodingValues,\n getColorMetaInf,\n positionPoints\n} from '../../helpers';\n\nexport const prepareDrawingInf = ({ data, datum, i, layerInst, xPx, yPx }) => {\n const axes = layerInst.axes();\n const { shape: shapeAxis, color: colorAxis, size: sizeAxis } = axes;\n let shape = shapeAxis.getShape(datum.shape);\n let size = sizeAxis.getSize(datum.size);\n let color = colorAxis.getColor(datum.color);\n const layerEncoding = layerInst.config().encoding;\n const stroke = layerEncoding.stroke.value;\n const strokeWidth = layerEncoding['stroke-width'].value;\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n stroke,\n 'stroke-width': strokeWidth,\n size,\n shape,\n data: datum\n },\n data: datum\n }, i, data, layerInst);\n const { rowId, source } = datum;\n ({ shape, size, color } = resolvedEncodings);\n const style = {\n fill: color,\n stroke: resolvedEncodings.stroke,\n 'stroke-width': resolvedEncodings['stroke-width']\n };\n const { x, y } = resolvedEncodings;\n const pos = { x, y };\n return {\n enter: pos,\n update: pos,\n shape,\n source,\n rowId,\n style,\n data: datum.dataObj,\n meta: Object.assign({\n layerId: layerInst.id()\n }, getColorMetaInf(style, {\n strokePosition: layerEncoding.strokePosition.value\n })),\n size\n };\n};\n\nexport const pointTranslators = {\n [COORD_TYPES.CARTESIAN]: (data, config, layerInst) => {\n let points = [];\n const encoding = layerInst.config().encoding;\n const axes = layerInst.axes();\n const { x, y } = encoding;\n const xField = x.field;\n const yField = y.field;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = prepareDrawingInf({\n data,\n datum: d,\n i,\n layerInst,\n xPx,\n yPx\n });\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\nexport const getStrokeWidthByPosition = (position, radius) => {\n const strokeWidthWithOffsetMap = {\n center: -radius,\n inside: -(radius * Math.PI),\n outside: +(radius * Math.PI)\n };\n return strokeWidthWithOffsetMap[position];\n};\n","import {\n Voronoi,\n Scales,\n makeElement,\n getQualifiedClassName,\n selectElement,\n appendElement,\n getSymbol,\n pointWithinCircle\n} from 'muze-utils';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport {\n attachDataToVoronoi,\n getPlotMeasurement,\n getMarkId,\n getBoundBoxes\n} from '../../helpers';\nimport './styles.scss';\nimport { pointTranslators, getStrokeWidthByPosition } from './helper';\n\nexport const PointLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n this._overlayPath = {};\n this.formattedUids = [];\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = super.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n this._graphicElems = {};\n\n const schema = this.data().getSchema();\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size || 0));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n this.attachDataToVoronoi(this._points);\n return this;\n }\n\n attachDataToVoronoi (points) {\n attachDataToVoronoi(this._voronoi, points);\n }\n\n generateDataPoints (normalizedData, keys) {\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const nearestPointThreshold = this.config().nearestPointThreshold;\n const distanceLimit = Math.max(this._maxSize, nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const insideShape = pointWithinCircle({\n x: dimensions.x,\n y: dimensions.y,\n r: radius + nearestPointThreshold\n }, { x, y });\n if (insideShape) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n }\n return null;\n }\n\n addOverlayPath (refElement, data, style, strokePosition) {\n const container = refElement.parentElement;\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n pathElement = makeElement(container, 'path', [data.update], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n if (style.type === 'stroke-width') {\n const position = strokePosition;\n // get radius as per stroke position\n let radius = Math.sqrt(data.size / Math.PI);\n radius = getStrokeWidthByPosition(position, radius);\n\n const size = data.size + radius;\n if (typeof data.shape === 'string') {\n const path = getSymbol(data.shape).size(size);\n pathElement.attr('d', path);\n }\n }\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(refElement, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n }\n }\n\n getBoundBoxes () {\n return getBoundBoxes(this._points.flat());\n }\n\n applyElementStyles (elem, styles, styleObj) {\n styles.forEach((type) => {\n elem.select('path').style(type, styleObj[type]);\n });\n }\n};\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { POINT_LAYER } from '../../enums/constants';\nimport { PointLayerMixin } from './point-mixin';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\n */\nexport default class PointLayer extends mix(BaseLayer).with(PointLayerMixin) {\n static formalName () {\n return POINT_LAYER;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { layer, points, container, keyFn, className } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) {\n barEnterFn(elem, d);\n },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\n };\n\n return makeElement(container, 'g', points, null, {\n update: (group, d) => {\n makeElement(group.node(), 'rect', data => [data], null, updateFns, keyFn);\n group.attr('class', `${className}-${d.rowId}`);\n group.classed(d.className, true);\n }\n }, keyFn);\n};\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: {\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'center'\n },\n focusStroke: {\n className: 'focus-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n brushStroke: {\n className: 'brush-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n doubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n commonDoubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.3\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {},\n stroke: {\n value: '#000'\n },\n strokeWidth: {\n value: '0px'\n },\n strokePosition: {\n value: 'center'\n }\n }\n};\n","import { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport {\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === MeasureSubtype.CONTINUOUS || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n *\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\nexport const strokeWidthPositionMap = ({ width, position }) => {\n const offset = width / 2;\n const strokeWidthWithOffsetMap = {\n center: {\n M: { x: 0, y: 0 },\n L1: { x: 0, y: 0 },\n L2: { x: 0, y: 0 },\n L3: { x: 0, y: 0 }\n },\n inside: {\n M: { x: +offset, y: +offset },\n L1: { x: -offset, y: +offset },\n L2: { x: -offset, y: -offset },\n L3: { x: +offset, y: -offset }\n },\n outside: {\n M: { x: -offset, y: -offset },\n L1: { x: +offset, y: -offset },\n L2: { x: +offset, y: +offset },\n L3: { x: -offset, y: +offset }\n }\n };\n return strokeWidthWithOffsetMap[position];\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.measurement();\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n // const layerEncoding = layerInst.config().encoding;\n\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n const style = {\n fill: color,\n stroke: encoding.stroke.value,\n 'stroke-width': encoding.strokeWidth.value\n };\n const conf = {\n strokePosition: encoding.strokePosition.value\n };\n\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n data: d.dataObj,\n style,\n meta: Object.assign({\n layerId: context.id()\n }, getColorMetaInf(style, conf))\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n FieldType,\n Scales,\n getObjProp,\n makeElement,\n appendElement,\n RTree\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn, getDataFromEvent } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints, strokeWidthPositionMap } from './bar-helper';\n\nconst { MEASURE } = FieldType;\n\nexport const BarLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = Scales.band();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n this._overlayPath = {};\n this._rtree = new RTree();\n }\n\n elemType () {\n return 'rect';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n this._graphicElems = {};\n const paths = Object.keys(this._overlayPath);\n paths.forEach(path => this._overlayPath[path].remove());\n this._overlayPath = {};\n\n const barContainer = makeElement(containerSelection, 'g', [1], 'muze-layer-bars', {}, null);\n makeElement(containerSelection, 'g', [1], 'muze-overlay-paths', {}, null);\n createElements({\n data: this._points,\n container: barContainer.node(),\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n const elements = this.getBoundBoxes().flat().filter(d => d !== null);\n this._rtree = new RTree();\n this._rtree.load(elements);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n const data = this._rtree.search({\n minX: Math.max(x - 1, 0),\n minY: Math.max(y - 1, 0),\n maxX: x + 1,\n maxY: y + 1\n });\n\n if (data.length) {\n return this.getDataFromEvent(null, data[0].point);\n }\n return null;\n }\n\n getDataFromEvent (event, data) {\n return getDataFromEvent(this, event, data);\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n\n hasPlotSpan () {\n return true;\n }\n\n addOverlayPath (refElement, data, style, strokePosition, mountPoint) {\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n const pathGroup = makeElement(mountPoint, 'g', [1], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement = makeElement(pathGroup, 'path', [data], null, {}, d => `${d.update.x} ${data.rowId}`);\n\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n if (style.type === 'stroke-width') {\n const { L1, L2, L3, M } = strokeWidthPositionMap({\n width: parseInt(style.value, 10),\n position: strokePosition\n });\n\n pathElement.attr('d', d => `M ${d.update.x + M.x} ${d.update.y + M.y}\n L ${d.update.x + d.update.width + L1.x} ${d.update.y + L1.y}\n L ${d.update.x + d.update.width + L2.x} ${d.update.y + d.update.height + L2.y}\n L${d.update.x + L3.x} ${d.update.y + d.update.height + L3.y} Z`);\n }\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(mountPoint, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n\n // Apply the path shape get the correct path position\n currentPath.attr('d', d => `M ${d.update.x} ${d.update.y}\n L ${d.update.x + d.update.width} ${d.update.y}\n L ${d.update.x + d.update.width} ${d.update.y + d.update.height}\n L${d.update.x} ${d.update.y + d.update.height} Z`);\n }\n }\n\n getBoundBoxes () {\n const points = this._points.flat();\n\n return points.map((point) => {\n const { x, y, width, height } = point.update;\n const data = point.data;\n return {\n minX: x,\n maxX: x + width,\n minY: y,\n maxY: y + height,\n data,\n point\n };\n });\n }\n};\n\n","import { mix } from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { BAR_LAYER } from '../../enums/constants';\nimport { BarLayerMixin } from './bar-mixin';\nimport { BaseLayerMixin } from '../../base-layer/base-mixin';\nimport './styles.scss';\n\n/**\n * Bar layer creates rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\n */\nexport default class BarLayer extends mix(BaseLayer).with(BaseLayerMixin, BarLayerMixin) {\n static formalName () {\n return BAR_LAYER;\n }\n}\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n nearestPointThreshold: 10,\n interaction: {\n fade: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n }\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n\n","import {\n selectElement,\n Symbols,\n pathInterpolators,\n makeElement\n} from 'muze-utils';\n\nconst line = Symbols.line;\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className, interpolate, layer, transition } = params;\n const { disabled } = transition;\n\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && group.attr(attr[0], attr[1])));\n },\n update: (group, d) => {\n const pathElem = makeElement(group, 'path', [1]);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n group.attr('class', className);\n group.classed(d.className, true);\n\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n\n d.className && group.classed(d.className, true);\n pathElem.attr('d', linepath([[update.x, update.y], [x0, y0]]));\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n Object.entries(style).forEach(styleObj => group.style(styleObj[0], styleObj[1]));\n },\n exit: (exitGroup) => {\n exitGroup.remove();\n }\n }, keyFn);\n};\n","import { FieldType, makeElement, appendElement } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates, attachDataToVoronoi } from '../../helpers';\nimport { strokeWidthPositionMap } from './helper';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedVal.color\n };\n\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style,\n source: d.source,\n rowId: d.rowId,\n data: d,\n meta: { ...{ layerId: layerInst.id() }, ...getColorMetaInf(style) }\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { x: xAxis, y: yAxis } = axes;\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d.source;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedEncodings.color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style,\n source: row,\n rowId: d.rowId,\n data: d.dataObj,\n meta: { ...{ layerId: layerInst.id() }, ...getColorMetaInf(style) }\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport const TickLayerMixin = superclass => class extends superclass {\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'tick';\n }\n\n static drawFn () {\n return drawTicks;\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n attachDataToVoronoi (points) {\n attachDataToVoronoi(this._voronoi, points, (d) => {\n const { x, x0, y, y0 } = d.update;\n\n return {\n x: x + (x0 - x) / 2,\n y: y + (y0 - y) / 2\n };\n });\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n addOverlayPath (refElement, data, style, strokePosition) {\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n pathElement = makeElement(refElement, 'path', [data.update], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n let offsetM = { x: 0, y: 0 };\n let offsetL = { x: 0, y: 0 };\n\n if (style.type === 'stroke-width') {\n const { L, M } = strokeWidthPositionMap({\n width: parseInt(style.value, 10),\n position: strokePosition\n });\n offsetM = M;\n offsetL = L;\n }\n\n pathElement.attr('d', (d) => {\n if (d.update) {\n return `M ${d.update.x + offsetM.x} ${d.update.y + offsetM.y}\n L ${d.update.x0 + offsetL.x} ${d.update.y0 + offsetL.y}`;\n }\n return `M ${d.x + offsetM.x} ${d.y + offsetM.y}\n L ${d.x0 + offsetL.x} ${d.y0 + offsetL.y}`;\n });\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(refElement, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n }\n }\n};\n","export const strokeWidthPositionMap = ({ width, position = 'center' }) => {\n const offset = width ? width / 2 : 1;\n const strokeWidthWithOffsetMap = {\n center: {\n M: { x: 0, y: 0 },\n L: { x: 0, y: 0 }\n },\n inside: {\n M: { x: +offset, y: +offset },\n L: { x: -offset, y: +offset }\n },\n outside: {\n M: { x: -offset, y: -offset },\n L: { x: +offset, y: -offset }\n }\n };\n return strokeWidthWithOffsetMap[position];\n};\n","import { mix } from 'muze-utils';\nimport { PointLayerMixin } from '../point';\nimport { BaseLayerMixin, BaseLayer } from '../../base-layer';\nimport { TickLayerMixin } from './tick-mixin';\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends mix(BaseLayer).with(BaseLayerMixin, PointLayerMixin, TickLayerMixin) {\n static formalName () {\n return 'tick';\n }\n}\n","export const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef, ...params) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\n */\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import layerFactory from './layer-factory';\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default (layers = DEFAULT_LAYERS) => {\n const reg = Object.assign({}, layers);\n const regObj = {\n register: (def) => {\n const key = def.formalName();\n\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import { AreaLayer, AreaLayerMixin } from './layers/area';\nimport { ArcLayer, ArcLayerMixin } from './layers/arc';\nimport { LineLayer, LineLayerMixin } from './layers/line';\nimport { TextLayer, TextLayerMixin } from './layers/text';\nimport { PointLayer, PointLayerMixin } from './layers/point';\nimport { BarLayer, BarLayerMixin } from './layers/bar';\nimport { TickLayer, TickLayerMixin } from './layers/tick';\nimport { SimpleLayer } from './simple-layer';\nimport { BaseLayer, BaseLayerMixin } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport layerFactory from './layer-factory';\nimport layerRegistry from './layer-registry';\nimport { ENCODING } from './enums/constants';\nimport * as pointLayerHelpers from './layers/point/helper';\nimport * as commonHelpers from './helpers';\nimport * as enums from './enums';\n\nconst helpers = Object.assign(commonHelpers, {\n pointLayerHelpers\n});\n\nconst layerMixins = {\n BarLayerMixin,\n BaseLayerMixin,\n LineLayerMixin,\n AreaLayerMixin,\n PointLayerMixin,\n TextLayerMixin,\n TickLayerMixin,\n ArcLayerMixin\n};\n\nexport {\n BaseLayer,\n BarLayer,\n LineLayer,\n AreaLayer,\n PointLayer,\n ArcLayer,\n TextLayer,\n TickLayer,\n layerFactory,\n SimpleLayer,\n layerRegistry,\n LAYER_TYPES,\n ENCODING,\n helpers,\n enums,\n layerMixins\n};\n","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue,\n RTree\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) :\n (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n [X, Y, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n // const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = layers.sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]).filter(d => d !== undefined);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = getNearestValue(filterData, key);\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const createRTree = (context) => {\n const elements = [].concat(...context.layers().filter(layer => layer.config().interactive !== false)\n .map((layer) => {\n const points = layer.getBoundBoxes();\n return points;\n })).flat().filter(d => d !== null);\n\n const rtree = new RTree();\n rtree.load(elements);\n return rtree;\n};\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import SelectionSet from './selection-set';\n\nexport default SelectionSet;\n","import { ReservedFields } from 'muze-utils';\nimport {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor ({ keys, fields }, _volatile) {\n this.completeSet = keys;\n this._set = {};\n this._uidMap = {};\n this._measureNames = {};\n this._dimVals = {};\n\n for (const key in keys) {\n this._set[key] = SELECTION_NULL;\n this._uidMap[key] = keys[key].uid;\n this._measureNames[key] = keys[key].measureNames;\n this._dimVals[key] = keys[key].dims;\n }\n this._fields = fields;\n this._fieldIndices = fields.reduce((acc, v, i) => {\n acc[v] = i;\n return acc;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = Object.keys(keys).length;\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n if (i in set) {\n set[i] = SELECTION_NEW_ENTRY;\n }\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n if (i in set) {\n set[i] = SELECTION_OLD_ENTRY;\n }\n });\n\n return this;\n }\n\n /**\n * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n i in set && (set[i] = SELECTION_NEW_EXIT);\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets (config = {}) {\n const set = this._set;\n const uidMap = this._uidMap;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n mergedEnter: [],\n mergedExit: [],\n completeSet: []\n };\n const dimVals = this._dimVals;\n const { keepDims, fields = [], keys = false } = config;\n const measureNames = this._measureNames;\n\n for (const key in set) {\n const measureNamesArr = measureNames[key] || [];\n let val;\n if (keepDims) {\n val = fields.map((field) => {\n if (field === ReservedFields.MEASURE_NAMES) {\n return measureNamesArr;\n } else if (field === ReservedFields.ROW_ID) {\n return uidMap[key];\n }\n return dimVals[key][this._fieldIndices[field]];\n });\n } else if (keys) {\n val = key;\n } else {\n val = measureNamesArr.length ? [uidMap[key], measureNamesArr] : [uidMap[key]];\n }\n\n if (set[key] > 0) {\n [SELECTION_OLD_ENTRY, SELECTION_NEW_ENTRY].forEach((v, i) => {\n if (set[key] === v) {\n retObj.entrySet[i].push(val);\n }\n });\n if (set[key] === SELECTION_OLD_ENTRY || set[key] === SELECTION_NEW_ENTRY) {\n retObj.mergedEnter.push(val);\n }\n } else if (set[key] < 0) {\n [SELECTION_OLD_EXIT, SELECTION_NEW_EXIT].forEach((v, i) => {\n if (set[key] === v) {\n retObj.exitSet[i].push(val);\n }\n });\n if (set[key] === SELECTION_OLD_EXIT || set[key] === SELECTION_NEW_EXIT) {\n retObj.mergedExit.push(val);\n }\n }\n retObj.completeSet.push(val);\n }\n\n return retObj;\n }\n\n /**\n * Resets an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n i in set && (set[i] = SELECTION_NULL);\n });\n } else {\n for (const key in set) {\n set[key] = SELECTION_NULL;\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n *\n * @public\n *\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\n */\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the array of ids which are in the exit set.\n *\n * @public\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\n */\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n}\n\nexport default SelectionSet;\n","export const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const target = SideEffect.target();\n if (target === context.target() || target === 'all') {\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n }\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.fields.map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\n","import {\n mergeRecursive,\n hasTouch,\n selectElement,\n isSimpleObject,\n getDataModelFromRange,\n ReservedFields,\n FieldType,\n defaultValue\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n getSideEffects,\n setSideEffectConfig\n} from './helper';\n\nexport const getUidsFromCriteria = (data, { dm, dimensionsMap, dimsMapGetter, addMeasures = true }) => {\n const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(dm.getFieldsConfig()).length,\n def: {\n name: ReservedFields.ROW_ID,\n type: FieldType.DIMENSION\n }\n }\n });\n\n if (data === null) {\n return null;\n }\n\n const criteriaFields = data[0];\n const fields = criteriaFields.length ? criteriaFields.map((d, i) => ({\n name: d,\n index: i\n })) : [];\n\n const fieldIndexMap = fields.reduce((acc, v, i) => {\n acc[v.name] = i;\n return acc;\n }, {});\n\n const uids = [];\n const measureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES);\n const propDims = fields.filter(d => d.name in fieldsConfig).map(d => d.name);\n\n const dimsMap = dimsMapGetter(propDims, fieldsConfig);\n for (let i = 1, len = data.length; i < len; i++) {\n const row = data[i];\n const dimKey = propDims.map(field => row[fieldIndexMap[field]]);\n const origRow = dimsMap[dimKey];\n if (origRow) {\n origRow.forEach((rowVal) => {\n const rowId = rowVal[rowVal.length - 1];\n if (!measureNameField) {\n const measuresArr = dimensionsMap[rowId].length ? dimensionsMap[rowId] : [[]];\n measuresArr.forEach((measures) => {\n uids.push([rowId, ...(addMeasures ? measures : [])]);\n });\n } else {\n let measuresArr = row[fieldIndexMap[measureNameField]];\n\n if (!measuresArr.length) {\n measuresArr = dimensionsMap[rowId].length ? dimensionsMap[rowId] : [];\n if (measuresArr.length) {\n measuresArr.forEach((measures) => {\n uids.push([rowId, measures]);\n });\n } else {\n uids.push([rowId]);\n }\n } else {\n uids.push(measuresArr.length ? [rowId, measuresArr] : [rowId]);\n }\n }\n });\n }\n }\n\n return uids;\n};\n\nconst cloneObj = (behaviourEffectMap) => {\n const keys = Object.keys(behaviourEffectMap);\n\n return keys.reduce((acc, key) => {\n const value = behaviourEffectMap[key];\n const cloned = value.map((d) => {\n let clonedVal = d;\n if (isSimpleObject(d)) {\n clonedVal = mergeRecursive({}, d);\n }\n return clonedVal;\n });\n acc[key] = cloned;\n return acc;\n }, {});\n};\n\nconst getKeysFromCriteria = (criteria, firebolt) => {\n if (criteria) {\n const data = firebolt.data();\n const { dimensionsMap } = firebolt._metaData;\n\n let values = [];\n if (isSimpleObject(criteria)) {\n const dm = getDataModelFromRange(data, criteria);\n dm.getData({ withUid: true }).data.forEach((row) => {\n const id = row[row.length - 1];\n const measures = criteria[ReservedFields.MEASURE_NAMES] || dimensionsMap[id] || [];\n if (measures.length) {\n measures.forEach((measureArr) => {\n values.push(`${[id, ...measureArr]}`);\n });\n } else {\n values.push([id]);\n }\n });\n } else {\n const dimsMapGetter = firebolt._dimsMapGetter;\n values = getUidsFromCriteria(criteria, {\n dm: firebolt.data(),\n dimensionsMap,\n dimsMapGetter\n });\n }\n return values;\n }\n return null;\n};\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._sourceSelectionSet = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sideEffectPolicies = {};\n this._propagationBehaviourMap = {};\n this._behaviourPolicies = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._handlers = {};\n this._payloadGenerators = {};\n this._payloads = {};\n\n this.mapSideEffects(cloneObj(behaviourEffectMap));\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n effectNames = effectNames.map((effect) => {\n if (!isSimpleObject(effect)) {\n return {\n name: effect\n };\n }\n return effect;\n });\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n effects.forEach((effect) => {\n let options = {};\n let name;\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options || {};\n } else {\n name = effect;\n }\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance && sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [selectionSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, selectionSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n const { setTransform } = options;\n selectionSet = setTransform ? setTransform(selectionSet, payload, sideEffect) : selectionSet;\n sideEffect.apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n shouldApplyHighlightEffect () {\n return true;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n // payload = this.sanitizePayload(payload);\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n this._payloads[behaviour] = payload;\n\n if (action) {\n action.dispatch(payload);\n this._entryExitSet[behaviour] = action.entryExitSet();\n const shouldApplySideEffects = this.shouldApplySideEffects(propagationInfo);\n const shouldApplyHighlightEffect = this.shouldApplyHighlightEffect(behaviour);\n\n if (shouldApplyHighlightEffect) {\n if (propagate) {\n this.propagate(behaviour, payload, action.propagationIdentifiers(), { sideEffects });\n }\n\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, this.getEntryExitSet(behaviour), payload);\n }\n }\n }\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value, key = 'default') {\n const behaviourConditions = this._behaviourPolicies[behaviour] || (this._behaviourPolicies[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sideEffectPolicies[sideEffect] ||\n (this._sideEffectPolicies[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sideEffectPolicies[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._behaviourPolicies[behaviour][key];\n return this;\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n this.mapActionsAndBehaviour(key);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel, handler = this.onDataModelPropagation()) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', handler);\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n this._entryExitSet[key] = null;\n }\n }\n\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n target () {\n return 'all';\n }\n\n registerPhysicalActions (actions, context = this) {\n const initedActions = initializePhysicalActions(context, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n this.registerPhysicalActionHandlers();\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (!nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n return {\n model: propagationInf.data ? propagationInf.data : null,\n uids: criteria ? getKeysFromCriteria(criteria, this) : null\n };\n }\n\n getSelectionSet (action) {\n return this.selectionSet()[action];\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n\n data () {\n return this.context.data();\n }\n\n currentData () {\n return this.data();\n }\n\n triggerPhysicalAction (event, payload) {\n const handlers = this._handlers[event] || [];\n const genericHandlers = this._handlers['*'];\n\n const allHandlers = [...Object.values(handlers), ...Object.values(genericHandlers)];\n allHandlers.forEach((fn) => {\n fn(event, payload);\n });\n\n return this;\n }\n\n onPhysicalAction (event, fn, namespace) {\n !this._handlers[event] && (this._handlers[event] = {});\n this._handlers[event][namespace] = fn;\n\n return this;\n }\n\n registerPhysicalActionHandlers () {\n this.onPhysicalAction('*', (event, payload) => {\n const { behaviours } = this._actionBehaviourMap[event];\n behaviours.forEach(beh => this.dispatchBehaviour(beh, payload));\n });\n }\n\n id () {\n return this.context.id();\n }\n\n getRangeFromIdentifiers (...params) {\n return this.context.getRangeFromIdentifiers(...params);\n }\n\n sanitizePayload (payload) {\n return payload;\n }\n\n payloadGenerators (...params) {\n if (params.length) {\n Object.assign(this._payloadGenerators, params[0]);\n }\n return this._payloadGenerators;\n }\n\n getPayloadGeneratorFor (action) {\n const defaultFn = this._payloadGenerators.__default;\n const fn = this._payloadGenerators[action];\n\n return defaultValue(fn, defaultFn);\n }\n\n getPayload (action) {\n return this._payloads[action];\n }\n\n actions () {\n return this._actions;\n }\n}\n","import { retrieveNearestGroupByReducers } from 'muze-utils';\n\nexport class EntryExitSet {\n constructor ({ uids, data, filteredModel }) {\n this._uids = uids;\n this._data = data;\n this._filteredModel = filteredModel;\n this._model = null;\n }\n\n get uids () {\n return this._uids;\n }\n\n get model () {\n if (!this._model) {\n this._model = this._filteredModel(this._data);\n }\n return this._model;\n }\n\n get length () {\n return this._uids.length;\n }\n\n get aggFns () {\n return retrieveNearestGroupByReducers(this._model);\n }\n}\n","import {\n isSimpleObject,\n DimensionSubtype,\n partition,\n ReservedFields\n} from 'muze-utils';\nimport { getSourceFields } from '../../helper';\nimport { EntryExitSet } from '../../entry-exit-set';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\n */\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSet = firebolt.getSelectionSet(formalName);\n const propInf = this.firebolt.getPropagationInf();\n const {\n model: filteredDataModel,\n uids\n } = this.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n this._payload = payload;\n\n this.setSelectionSet(uids, selectionSet, {\n filteredDataModel,\n payload\n });\n if (!propInf.sourceId) {\n this.propagationIdentifiers(selectionSet, payload);\n }\n this.entryExitSet(selectionSet, filteredDataModel, payload);\n }\n\n getAddSetFromCriteria (...params) {\n return this.firebolt.getAddSetFromCriteria(...params);\n }\n\n /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\n */\n setSelectionSet () {\n return this;\n }\n\n entryExitSet (...params) {\n if (params.length) {\n const [selectionSet, filteredDataModel, payload] = params;\n const {\n entrySet,\n exitSet,\n mergedEnter,\n mergedExit,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n\n this._entryExitSet = {\n entrySet: [this.getSetInfo('oldEntry', entrySet[0], filteredDataModel),\n this.getSetInfo('newEntry', entrySet[1], filteredDataModel)],\n exitSet: [this.getSetInfo('oldEntry', exitSet[0], filteredDataModel),\n this.getSetInfo('newExit', exitSet[1], filteredDataModel)],\n mergedEnter: this.getSetInfo('mergedEnter', mergedEnter, filteredDataModel),\n mergedExit: this.getSetInfo('mergedExit', mergedExit, filteredDataModel),\n completeSet: this.getSetInfo('complete', completeSet, filteredDataModel),\n fields: getSourceFields(propagationInf, payload.criteria)\n };\n\n return this;\n }\n return this._entryExitSet;\n }\n\n getSetInfo (type, set, filteredDataModel) {\n const { sourceId } = this.firebolt.getPropagationInf();\n const data = this.firebolt.data();\n\n return new EntryExitSet({\n uids: set,\n filteredModel: (fullData) => {\n let model = null;\n if (type === 'complete') {\n return fullData;\n } else if (type === 'mergedEnter' && sourceId) {\n model = filteredDataModel;\n } else {\n const uidMap = set.reduce((acc, v) => {\n acc[v[0]] = 1;\n return acc;\n }, {});\n model = fullData.select(fields => fields[ReservedFields.ROW_ID] in uidMap, {\n saveChild: false\n });\n }\n return model;\n },\n data\n });\n }\n\n propagationIdentifiers (...params) {\n if (params.length) {\n let propData = null;\n const [selectionSet, payload] = params;\n const fieldsConfig = this.firebolt.data().getFieldsConfig();\n const { criteria } = payload;\n const propagationFields = this._propagationFields;\n\n if (selectionSet.resetted() || criteria === null) {\n propData = null;\n } else if (isSimpleObject(criteria)) {\n const fields = Object.keys(criteria);\n const [, otherFields] =\n partition(fields, (d => (fieldsConfig[d] ? fieldsConfig[d].def.subtype ===\n DimensionSubtype.CATEGORICAL : d === ReservedFields.MEASURE_NAMES)));\n const allFields = fields.filter(d => d === ReservedFields.ROW_ID ||\n fieldsConfig[d] && fieldsConfig[d].def.subtype === DimensionSubtype.CATEGORICAL);\n const { mergedEnter } = selectionSet.getSets({ keepDims: true, fields: allFields });\n propData = {\n fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : {\n name: d\n })),\n range: this.firebolt.getRangeFromIdentifiers({\n criteria,\n entrySet: selectionSet.getSets().mergedEnter,\n fields: otherFields\n }),\n identifiers: [[...allFields, ReservedFields.MEASURE_NAMES], ...mergedEnter]\n };\n } else {\n const fields = propagationFields ? [...propagationFields, ReservedFields.MEASURE_NAMES] :\n criteria[0];\n const { mergedEnter } = selectionSet.getSets({ keepDims: true, fields });\n\n propData = {\n fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : {\n name: d\n })),\n identifiers: [fields, ...mergedEnter]\n };\n }\n this._propagationIdentifiers = propData;\n return this;\n }\n return this._propagationIdentifiers;\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n propagateWith (...params) {\n this._propagationFields = params[0];\n\n return this;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keys: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.sourceId) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keys: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\nimport { SELECTION } from '../..';\nimport { getMergedSet } from '../../helper';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.sourceId) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets({ keys: true });\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n\n","import { COORD_TYPES } from 'muze-utils';\n\nconst dragCriteriaRetriever = {\n [COORD_TYPES.CARTESIAN]: (firebolt, sourceInfo, { startPos, endPos }) => {\n if (startPos.x === endPos.x && startPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n const ranges = firebolt.context.getRangeFromPositions({\n startPos,\n endPos\n });\n const dimensions = {};\n dimensions.x = [startPos.x, endPos.x];\n dimensions.y = [startPos.y, endPos.y];\n\n return {\n criteria: ranges,\n dimensions\n };\n },\n [COORD_TYPES.POLAR]: () => ({\n criteria: null\n })\n};\n\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (firebolt, config) => {\n const context = firebolt.context;\n const sourceInfo = context.getSourceInfo();\n const coordType = context.coord();\n return dragCriteriaRetriever[coordType](firebolt, sourceInfo, config);\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n} from 'muze-utils';\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, action, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n const newStartPos = Object.assign({}, startPos);\n const newEndPos = Object.assign({}, endPos);\n if (startPos.x > endPos.x) {\n newStartPos.x = endPos.x;\n newEndPos.x = startPos.x;\n }\n\n if (startPos.y > endPos.y) {\n const y = startPos.y;\n newStartPos.y = endPos.y;\n newEndPos.y = y;\n }\n const payload = getDragActionConfig(firebolt, {\n startPos: newStartPos,\n endPos: newEndPos\n });\n payload.dragging = true;\n payload.dragDiff = Math.abs(startPos.x - endPos.x) + Math.abs(startPos.y - endPos.y);\n firebolt.triggerPhysicalAction(action, payload);\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n if (startPos.x > endPos.x) {\n const x = startPos.x;\n startPos.x = endPos.x;\n endPos.x = x;\n }\n\n if (startPos.y > endPos.y) {\n const y = startPos.y;\n startPos.y = endPos.y;\n endPos.y = y;\n }\n\n const payload = getDragActionConfig(firebolt, {\n startPos,\n endPos\n });\n payload.dragEnd = true;\n payload.hideSelBox = true;\n firebolt.triggerPhysicalAction(action, payload);\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: true,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n getAllPoints: false,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n // console.log('payload', payload.criteria);\n firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, payload);\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, {\n criteria: null\n });\n });\n};\n\nexport default hover;\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\nimport { ACTIONS } from '../..';\n\nexport const selectionBoxDrag = firebolt => (targetEl) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n firebolt.triggerPhysicalAction(ACTIONS.SELECTIONDRAG, payload);\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(firebolt, {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n });\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(firebolt, {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n });\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n firebolt.triggerPhysicalAction(ACTION_NAMES.CLICK, payload);\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport { selectionBoxDrag } from './selection-box-drag';\nimport * as ACTION_NAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTION_NAMES.DRAG]: drag,\n [ACTION_NAMES.HOVER]: hover,\n [ACTION_NAMES.CLICK]: click,\n [ACTION_NAMES.LONGTOUCH]: longtouch,\n [ACTION_NAMES.TOUCHDRAG]: touchdrag,\n [ACTION_NAMES.SELECTIONDRAG]: selectionBoxDrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl) => {\n attachDragEvent(targetEl, ACTION_NAMES.DRAG, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport * as ACTION_NAMES from '../../enums/actions';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n firebolt.triggerPhysicalAction(ACTION_NAMES.LONGTOUCH, payload);\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n firebolt.triggerPhysicalAction(ACTION_NAMES.LONGTOUCH, {\n criteria: null\n });\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\nconst FRAGMENTED_TOOLTIP = 'fragmented-tooltip';\nconst AXIS_LABEL_HIGHLIGHTER = 'axis-label-highlighter';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP,\n FRAGMENTED_TOOLTIP,\n AXIS_LABEL_HIGHLIGHTER\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\n */\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n this.sourceInfo(() => this.firebolt.context.getSourceInfo());\n this.layers(() => this.firebolt.context.layers());\n this.plotPointsFromIdentifiers((...args) => this.firebolt.context.getPlotPointsFromIdentifiers(...args));\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\n */\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n\n sourceInfo (...sourceInfo) {\n if (sourceInfo.length) {\n this._sourceInfo = sourceInfo[0];\n return this;\n }\n return this._sourceInfo();\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers();\n }\n\n plotPointsFromIdentifiers (...params) {\n if (params.length && params[0] instanceof Function) {\n this._plotPointsFromIdentifiers = params[0];\n return this;\n }\n return this._plotPointsFromIdentifiers(...params);\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\n applyInteractionStyle (set, config = {}, layers) {\n const { interactionType, apply, reset = false } = config;\n const allLayers = layers || this.firebolt.context.layers();\n allLayers.forEach((layer) => {\n const { interactive } = layer.config();\n if (interactive !== false) {\n const layerFields = layer.data().getFieldsConfig();\n const filteredUids = set.uids.filter(([, measures = []]) => measures.every(m => m in layerFields))\n .map(d => d[0]);\n const options = { apply, reset, styles: null };\n layer.applyInteractionStyle(interactionType, filteredUids, options);\n }\n });\n return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\n * ```\n */\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const { x: xDim, y: yDim } = dimensions;\n\n if (!criteria) return null;\n\n if (axes.x && axes.y) {\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n\n if (xRange && xRange.length) {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val = xRange[0];\n let x2Val = xRange[xRange.length - 1];\n\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n }\n\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n\n if (yRange && yRange.length) {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val = yRange[0];\n let y2Val = yRange[yRange.length - 1];\n\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n }\n\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction: 'both'\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { SELECTIONDRAG } from '../../enums/actions';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\nimport { BEHAVIOURS } from '../..';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n },\n persistent: false\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x = 0;\n let y = 0;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n width = unitWidth;\n height = unitHeight;\n\n // Hide selection-box on dragEnd or when criteria is empty\n if (!payload.criteria || (payload.hideSelBox && !config.persistent)) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = this.sourceInfo();\n const { dimension, direction } =\n getBoxDimensionsFromPayload(payload, sourceInf.axes, sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both') {\n x = Math.min(dimension.x1, dimension.x2);\n y = Math.min(dimension.y1, dimension.y2);\n width = Math.abs(dimension.x2 - dimension.x1);\n height = Math.abs(dimension.y2 - dimension.y1);\n }\n\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n // Add selectiondrag entry in firebolt._actionBehaviourMap\n firebolt.registerPhysicalBehaviouralMap({\n [SELECTIONDRAG]: {\n target: [selectElement(this)],\n behaviours: [BEHAVIOURS.BRUSH]\n }\n });\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const NULL = 'null';\nexport const UNDEFINED = 'undefined';\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n parentClassName: 'tooltip-parent-container',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n spacing: 5,\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '4px 0 4px 0',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\nexport const TABLE_FORMAT = 'table';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { TABLE_FORMAT } from './constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n const { classPrefix } = config;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n const mountHtmlTooltip = makeElement(mount, 'div', [1], `${classPrefix}-tooltip-html-container`);\n mountHtmlTooltip.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === TABLE_FORMAT) {\n const table = makeElement(body, 'table', [1], `${classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, '', {\n update: (elem, elemData) => elem.attr('class', elemData.className)\n });\n const cells = makeElement(rows, 'span', d => d.data, `${classPrefix}-tooltip-content`);\n cells.attr('class', `${classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block' // 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n makeElement,\n getMaxPoint\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM,\n TOOLTIP_TOP } from './constants';\nimport { defaultConfig } from './default-config';\nimport { reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class',\n `${classPrefix}-${tooltipConf.defClassName} ${classPrefix}-${contentClass}\n ${tooltipConf.className}`);\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.parentClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n this.addClass(qualifiedClassName.join(' '));\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = `${classPrefix}-${contentClass}-${name}`;\n const specificClass = `${classPrefix}-${contentConfig.className}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className} ${specificClass}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n\n if (target) {\n const node = this._tooltipContainer.node();\n const tooltipPos = this._orientation;\n const outsidePlot = tooltipPos === TOOLTIP_LEFT || tooltipPos === TOOLTIP_RIGHT ?\n (y + node.offsetHeight) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth) < target.x || x > (target.x + target.width);\n\n if (outsidePlot) {\n let path;\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (tooltipPos === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (tooltipPos === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (tooltipPos === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n const orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const contentContainer = this._contentContainer.node();\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px')\n .style('width', '2000px')\n .style('height', '2000px');\n\n const offsetWidth = contentContainer.offsetWidth + 4;\n const offsetHeight = contentContainer.offsetHeight + 4;\n const config = this._config;\n const offset = this._offset;\n const spacing = config.spacing;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const bottomSpace = extent.height - (dim.y + dim.height + offset.y);\n const arrowSize = spacing;\n const tooltipHeight = offsetHeight + arrowSize;\n const tooltipWidth = offsetWidth + arrowSize;\n\n const spaces = [{\n position: 'top',\n value: topSpace - tooltipHeight\n }, {\n position: 'right',\n value: rightSpace - tooltipWidth\n }, {\n position: 'left',\n value: leftSpace - tooltipWidth\n }, {\n position: 'bottom',\n value: bottomSpace - tooltipHeight\n }];\n\n const positionHorizontal = (positionVal) => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionVal === 'right') {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionVal === 'left') {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n }\n\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n return {\n position,\n x,\n y\n };\n };\n\n const positionVertical = (positionVal) => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionVal === 'top') {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n return {\n position,\n x,\n y\n };\n };\n\n this._target = dim;\n\n const hMax = getMaxPoint(spaces.filter(d => d.position === 'left' || d.position === 'right'),\n 'value');\n const vMax = getMaxPoint(spaces.filter(d => d.position === 'top' || d.position === 'bottom'),\n 'value');\n if (!orientation) {\n if (hMax.value > 0) {\n const position = hMax.position;\n obj = positionHorizontal(position);\n } else {\n const position = vMax.position;\n obj = positionVertical(position);\n }\n } else if (orientation === 'horizontal') {\n const position = hMax.position;\n obj = positionHorizontal(position);\n } else {\n const position = vMax.position;\n obj = positionVertical(position);\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._tooltipContainer.style('height', `${offsetHeight}px`)\n .style('width', `${offsetWidth}px`);\n this._orientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","export const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect,\n ReservedFields\n} from 'muze-utils';\nimport { TABLE_FORMAT } from '@chartshq/muze-tooltip';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\nimport { BAR } from '../../../../visual-group/src/enums/constants';\nimport { NULL, UNDEFINED } from '../../enums/constants';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\nconst FIRST_VALUE_MARGIN = '10px';\nconst STACK = 'stack';\nconst SINGLE_DATA_MARGIN = 10;\nconst defNumberFormat = value => `${value % value.toFixed(0) === 0 ? value : value.toFixed(2)}`;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(defNumberFormat(value))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst isSingleValue = (dataLen, stackedSum) => dataLen === 1 && !stackedSum;\n\nconst getStackedKeyValue = (params) => {\n const { field, value, classPrefix } = params;\n return ({\n className: `${classPrefix}-tooltip-stacked-row`,\n data: [{\n value: field,\n className: `${classPrefix}-tooltip-stacked-row-key`\n }, {\n value: `${value}`,\n className: `${classPrefix}-tooltip-stacked-row-value`\n }]\n });\n};\n\nconst getKeyValue = (params) => {\n const { field, value, classPrefix, margin, isSelected, removeKey, stackedSum, isStackedBar } = params;\n let { stackedValue } = params;\n\n if (!removeKey) {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n const valueObj = {\n value,\n className: `${classPrefix}-tooltip-value`\n };\n\n if (stackedValue === NULL || stackedValue === UNDEFINED) {\n stackedValue = 0;\n }\n\n const stackedValueObj = {\n value: stackedSum ? `(${(stackedValue * 100 / stackedSum).toFixed(2)} %)` : undefined,\n className: `${classPrefix}-tooltip-stacked-percentage`\n };\n\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n valueObj.style = {\n 'margin-left': `${margin}px`\n };\n stackedValueObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n\n return ({\n className: isSelected ? `${classPrefix}-tooltip-row ${classPrefix}-tooltip-selected-row`\n : `${classPrefix}-tooltip-row`,\n data: stackedSum && isStackedBar ? [keyObj, stackedValueObj, valueObj] : [keyObj, valueObj]\n });\n }\n return ({\n data: [{\n className: '',\n value,\n style: {\n 'margin-left': FIRST_VALUE_MARGIN\n }\n }],\n className: `${classPrefix}-tooltip-first`\n });\n};\n\nexport const getStackedSum = (values, index) => values.reduce((a, b) => {\n if (b[index] instanceof InvalidAwareTypes) {\n return a + 0;\n }\n return a + b[index];\n}, 0);\n\nexport const isStackedChart = layers => layers.some(d => d.transformType() === STACK);\nexport const isStackedBarChart = layers => layers.some(d => d.transformType() === STACK && d.config().mark === BAR);\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const {\n fieldsConfig,\n dimensionMeasureMap,\n axes,\n config,\n fieldInf,\n dataLen,\n target,\n stackedSum,\n isStackedBar\n } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const REF_VALUES_INDEX = 1;\n const REF_KEYS_INDEX = 0;\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n size: sizeAxis.config().value,\n shape: shapeAxis.getShape(retinalFieldValue)\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (isSingleValue(dataLen, stackedSum)) {\n content.push(getKeyValue({\n field: displayName,\n value: formattedRetinalValue,\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push({ data: [icon, formattedRetinalValue] }));\n const selectedContext = target && target[REF_VALUES_INDEX][target[REF_KEYS_INDEX].indexOf(retField)];\n const isSelected = selectedContext === retinalFieldValue;\n\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const currentMeasureValue = valueArr[measureIndex];\n const value = formatterFn(currentMeasureValue);\n const keyValue = getKeyValue({\n field: hasMultipleMeasures ? `${dName}${separator}` : formattedRetinalValue,\n value,\n classPrefix,\n margin: hasMultipleMeasures ? margin : undefined,\n isSelected,\n stackedSum,\n stackedValue: currentMeasureValue instanceof InvalidAwareTypes\n ? currentMeasureValue.value()\n : currentMeasureValue.toFixed(2),\n isStackedBar\n });\n\n if (!hasMultipleMeasures) {\n keyValue.data = [icon, ...keyValue.data];\n }\n content.push(keyValue);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.retinalFields;\n const detailFields = context.detailFields || [];\n const { showStackSum = true } = context.config || {};\n const { selectedMeasures = [] } = context.payload;\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n const containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = TABLE_FORMAT;\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const isStacked = isStackedChart(context.layers);\n const isStackedBar = isStackedBarChart(context.layers);\n const filteredMeasures = !isSingleValue(dataLen, isStacked)\n ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n\n nestedDataObj = !('key' in nestedDataObj[0]) ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const { values, key } = nestedData[i];\n const field = getObjProp(schema, indices[index], 'name');\n const margin = dataLen === 1 || Object.keys(retinalFields).length === 0\n ? SINGLE_DATA_MARGIN : undefined;\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(key);\n const removeKey = !isSingleValue(dataLen, isStacked);\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: formattedValue,\n classPrefix,\n margin,\n isSelected: undefined,\n removeKey\n }));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n let stackedSum = 0;\n if (isStacked && showStackSum) {\n stackedSum = getStackedSum(\n values,\n fieldsConfig[measures[0].name].index\n );\n const nf = measures[0].numberFormat;\n content.push(getStackedKeyValue({\n field: `${'Total'}${separator}`,\n value: nf ? nf(stackedSum.toFixed(2)) : stackedSum.toFixed(2),\n classPrefix\n }));\n }\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen,\n target: context.payload.target,\n stackedSum,\n isStackedBar\n });\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n isSelected: selectedMeasures.indexOf(name) !== -1,\n value: fn(valueArr[fieldsConfig[name].index]),\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * Calculate aggregated values of measures from entry set and datamodel.\n *\n * @param {DataModel} dm DataModel instance\n * @param {EntrySet} entrySet Entry set\n */\nconst getAggregatedValues = (dm, entrySet) => {\n // const fields = entrySet.fields;\n const aggFns = entrySet.aggFns;\n // Create a map of all the dimensions and the measures\n const dimsMap = entrySet.uids.reduce((acc, v) => {\n const dims = v[0];\n\n !acc[dims] && (acc[dims] = []);\n acc[dims].push(v[1]);\n return acc;\n }, {});\n const aggMeasures = Object.keys(dm.getFieldspace().getMeasure());\n const aggregatedValues = {};\n aggMeasures.forEach((measure) => {\n // Filter all the rows which has this measure and dimensions and apply aggregation.\n const groupedDm = dm.select((dmFields) => {\n const id = dmFields[ReservedFields.ROW_ID];\n const measures = dimsMap[id];\n if (measures) {\n return measures.find(arr => arr.indexOf(measure) !== -1);\n }\n return false;\n }, {\n saveChild: false\n }).groupBy([''], {\n [measure]: aggFns[measure] === COUNT ? SUM : aggFns[measure]\n }, {\n saveChild: false\n });\n const fieldsConfig = groupedDm.getFieldsConfig();\n if (!groupedDm.isEmpty()) {\n aggregatedValues[measure] = groupedDm.getData().data[0][fieldsConfig[measure].index];\n }\n });\n return aggregatedValues;\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const { classPrefix } = config;\n const tooltipConf = context.config;\n const { showMultipleMeasures } = tooltipConf;\n const aggFns = selectionSet.mergedEnter.aggFns;\n const entryUids = selectionSet.mergedEnter.uids;\n const fieldsConf = dm.getFieldsConfig();\n const aggregatedValues = getAggregatedValues(dm, selectionSet.mergedEnter);\n const values = [{\n className: `${classPrefix}-tooltip-row`,\n data: [{\n value: `${entryUids.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected']\n }];\n let measures = Object.keys(aggregatedValues);\n if (!showMultipleMeasures) {\n measures = measures.slice(0, 1);\n }\n // Prepare the tooltip content\n measures.forEach((measure) => {\n const { numberFormat = defNumberFormat } = fieldsConf[measure].def;\n const value = aggregatedValues[measure];\n const rowValues = value instanceof InvalidAwareTypes ? [] : [`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}:`,\n {\n value: numberFormat(value),\n style: {\n 'font-weight': 'bold'\n },\n className: `${classPrefix}-tooltip-value`\n }];\n if (showMultipleMeasures) {\n values.push({\n className: `${classPrefix}-tooltip-row`,\n data: rowValues\n });\n } else {\n values[0].data.push(...rowValues);\n }\n });\n\n return values;\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { intersect } from 'muze-utils';\n\nexport const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n};\n\nexport const shouldApplySideEffect = (dm, sideEffect) => {\n const propagationInf = sideEffect.firebolt.getPropagationInf();\n if (propagationInf.sourceIdentifiers && dm) {\n const { fields } = propagationInf.sourceIdentifiers;\n const sourceDims = fields.filter(field => field.type === 'dimension').map(d => d.name);\n const dims = Object.keys(dm.getFieldspace().getDimension());\n return intersect(sourceDims, dims).length;\n }\n return true;\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { mergeRecursive, defaultValue } from 'muze-utils';\nimport { strategies } from './strategies';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\nimport { shouldApplySideEffect } from '../helper';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n order: 1,\n dataTransform: (dm, fields) => (fields ? dm.project(fields, { saveChild: false }) : dm)\n },\n selectionSummary: {\n order: 0,\n dataTransform: dm => dm\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\n }\n\n apply (selectionSet, payload, options = {}) {\n const dataModel = selectionSet && selectionSet.mergedEnter.model;\n if (!shouldApplySideEffect(dataModel, this)) {\n return this;\n }\n if ((payload.criteria === null || (dataModel && dataModel.isEmpty())) || selectionSet === null) {\n this.hide(options, null);\n return this;\n }\n\n const strategy = defaultValue(options.strategy, this._strategy);\n\n this.createTooltip(dataModel, Object.assign({}, {\n payload,\n selectionSet,\n strategy,\n options\n }), null, 0);\n\n return this;\n }\n\n static target () {\n return 'all';\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n const { orientation } = this.config();\n\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const tooltip = tooltips[key];\n const strategy = options.strategy || this._strategy;\n tooltip.content(strategy, null);\n if (!Object.keys(tooltip._contents).length) {\n tooltip.hide();\n } else {\n tooltip.positionRelativeTo(tooltip._target, {\n orientation\n });\n }\n }\n }\n }\n\n getPlotPointsFromIdentifiers (payload) {\n const target = payload.target;\n // if (target) {\n // targetFields = target[0] || [];\n // const sourceFields = payload.sourceFields;\n // const indices = [];\n // for (let i = 0, len = targetFields.length; i < len; i++) {\n // if (sourceFields.indexOf(targetFields[i]) !== -1) {\n // indices.push(i);\n // }\n // }\n // target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n // }\n\n return super.plotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n }\n\n createTooltip (dataModel, props = {}, plotDim, key) {\n const drawingInf = this.drawingContext();\n const sourceInf = this.sourceInfo();\n const config = this.config();\n const {\n strategy,\n payload,\n selectionSet\n } = props;\n plotDim = defaultValue(plotDim, this.getPlotPointsFromIdentifiers(payload));\n plotDim = plotDim && plotDim[0];\n const pad = config.padding;\n const { showInPosition, position: tooltipPos } = payload;\n const { fields: projectFields, dataTransform } = config[strategy];\n\n const strategyFn = this._strategies[strategy];\n const dt = dataTransform(dataModel, projectFields, this);\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = this._tooltips[key] = this._tooltips[key] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n Object.assign(sourceInf, {\n payload,\n firebolt: this.firebolt,\n detailFields: [],\n timeDiffs: sourceInf.timeDiffs,\n valueParser: this.valueParser(),\n selectionSet,\n config: config[strategy]\n });\n\n tooltipInst.context(sourceInf);\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: config[strategy].order,\n className: config[strategy].className\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: config.orientation\n }\n );\n } else {\n tooltipInst.hide();\n }\n }\n}\n","import { FieldType, ReservedFields } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { FRAGMENTED_TOOLTIP } from '../../enums/side-effects';\nimport Tooltip from '../tooltip';\n\nexport default class FragmentedTooltip extends Tooltip {\n static formalName () {\n return FRAGMENTED_TOOLTIP;\n }\n\n createTooltip (dataModel, props) {\n let totalHeight = 0;\n let totalWidth = 0;\n const config = this.config();\n const { strategy } = props;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n\n const tooltips = this._tooltips;\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const pad = config.padding;\n const dataModels = [];\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const boxes = [];\n const uids = dataModel.getUids();\n\n dataModels.push(...uids.map(uid => dataModel.select(fieldsArr =>\n fieldsArr[ReservedFields.ROW_ID].value === uid, {\n saveChild: false\n })));\n\n const enter = {};\n for (let i = 0, len = dataModels.length; i < len; i++) {\n const dm = dataModels[i];\n const dimensions = dm.getData().schema.filter(d => d.type === FieldType.DIMENSION).map(d => d.name);\n const plotDim = context.getPlotPointsFromIdentifiers(dm.project(dimensions), { getBBox: true });\n\n super.createTooltip(dm, props, plotDim, i);\n const tooltipInst = this._tooltips[i];\n enter[i] = this._tooltips[i];\n\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n\n position && boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(strategy, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n\n boxes.length && spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { CROSSLINE } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return CROSSLINE;\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n const isEmptyDataModel = dataModel && dataModel.isEmpty();\n if (payload.criteria && isEmptyDataModel) {\n this.hide();\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n\n let layers = this.firebolt.context.layers();\n layers = layers.filter(layer => !!layer.config().crossline);\n\n if (layers.length) {\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...layers.map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n !isNaN(px) && elemData.push(dataPoint);\n }\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n\n static target () {\n return 'visual-unit';\n }\n}\n","import { difference, intersect } from 'muze-utils';\n\n/**\n * @private\n * @param {Object} set Points set\n * @param {Array.} selectedPointsId array of id of selected points\n * @return {Object} Returns the set with the selected points removed\n */\nexport const getFormattedSet = (set, selectedPointsId, intersection = false) => {\n const fn = intersection ? intersect : difference;\n const formattedSet = fn(set.uids, selectedPointsId,\n [d => d[0], d => d[0]]);\n return {\n ...set,\n ...{\n uids: formattedSet,\n length: formattedSet.length\n }\n };\n};\n","import { intersect, difference } from 'muze-utils';\nimport { getFormattedSet } from './helper';\nimport { BEHAVIOURS } from '../..';\n\nconst fadeFn = (set, context) => {\n const { formattedSet } = set;\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = formattedSet;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType: 'fade', apply: false });\n } else {\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n // Apply style only on the hovered layer\n if (layerName === 'area') {\n context.applyInteractionStyle(mergedEnter, { interactionType: 'fade', apply: true }, [layer]);\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: false }, [layer]);\n } else {\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: true }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'fade', apply: false }, [layer]);\n }\n });\n }\n};\n\nconst fadeOnBrushFn = (set, context, payload) => {\n const { formattedSet } = set;\n const {\n exitSet,\n mergedEnter,\n mergedExit,\n completeSet\n } = formattedSet;\n\n const { dragEnd } = payload;\n let interactionType = 'brushStroke';\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType, apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'doubleStroke', apply: false });\n } else {\n if (dragEnd) {\n interactionType = 'doubleStroke';\n // onDrag style\n context.applyInteractionStyle(completeSet, { interactionType: 'brushStroke', apply: false });\n }\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n // Apply style only on the hovered layer\n if (layerName === 'area') {\n if (dragEnd) {\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: false }, [layer]);\n mergedEnter.length &&\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]);\n }\n } else {\n // dragEnd style\n context.applyInteractionStyle(mergedExit, { interactionType, apply: false }, [layer]);\n if (!payload.dragEnd) {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]);\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]);\n }\n\n interactionType !== 'doubleStroke' &&\n context.applyInteractionStyle(mergedExit, { interactionType: 'doubleStroke', apply: false });\n context.applyInteractionStyle(mergedEnter, { interactionType, apply: true }, [layer]);\n }\n });\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n fadeOnBrush: fadeOnBrushFn,\n focus: (set, context) => {\n const { formattedSet } = set;\n const {\n entrySet,\n mergedEnter,\n mergedExit,\n completeSet\n } = formattedSet;\n const { firebolt } = context;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType: 'focus', apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'focusStroke', apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'commonDoubleStroke', apply: false });\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focusStroke', apply: false });\n context.applyInteractionStyle(entrySet, { interactionType: 'focusStroke', apply: true });\n\n const payload = firebolt.getPayload(BEHAVIOURS.HIGHLIGHT) || {};\n const entryExitSet = firebolt.getEntryExitSet(BEHAVIOURS.HIGHLIGHT);\n const layers = firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n if (layerName === 'area') {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]);\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false }, [layer]);\n }\n\n if (payload.target !== null && entryExitSet) {\n // get uids of only the currently highlighted point\n const actualPoint = layer.getUidsFromPayload(entryExitSet.mergedEnter, payload.target);\n\n const commonSet = intersect(mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n\n if (commonSet.length) {\n context.applyInteractionStyle({ uids: commonSet },\n { interactionType: 'commonDoubleStroke', apply: true },\n [layer]\n );\n } else {\n context.applyInteractionStyle({ uids: mergedExit.uids },\n { interactionType: 'commonDoubleStroke', apply: false },\n [layer]\n );\n }\n }\n });\n }\n },\n highlight: (set, context, payload, excludeSetIds) => {\n const { selectionSet } = set;\n\n if (!selectionSet.mergedEnter.length && !selectionSet.mergedExit.length) {\n // Remove focusStroke on selected but currently non-highlighted set\n context.applyInteractionStyle(selectionSet.completeSet, { interactionType: 'highlight', apply: false });\n context.applyInteractionStyle(selectionSet.completeSet,\n { interactionType: 'commonDoubleStroke', apply: false }\n );\n } else {\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n if (payload.target !== null) {\n // get uids of only the currently highlighted point\n const actualPoint = layer.getUidsFromPayload(selectionSet.mergedEnter, payload.target);\n // get uids of only the currently highlighted point excluding the excludeSet ids\n const currentHighlightedSet = getFormattedSet(actualPoint, excludeSetIds);\n\n // Apply highlight on the currently hovered point\n context.applyInteractionStyle(currentHighlightedSet,\n { interactionType: 'highlight', apply: true },\n [layer]\n );\n\n context.applyInteractionStyle(selectionSet.mergedExit,\n { interactionType: 'highlight', apply: false },\n [layer]\n );\n\n const selectEntrySet = context.firebolt.getEntryExitSet('select');\n if (selectEntrySet) {\n const commonSet = intersect(selectEntrySet.mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n const diffSet = difference(selectEntrySet.mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n\n if (commonSet.length) {\n context.applyInteractionStyle({ uids: commonSet },\n { interactionType: 'commonDoubleStroke', apply: true },\n [layer]\n );\n }\n context.applyInteractionStyle({ uids: diffSet },\n { interactionType: 'commonDoubleStroke', apply: false },\n [layer]\n );\n }\n }\n });\n }\n },\n pseudoFocus: (set, context) => {\n const { formattedSet } = set;\n const {\n mergedEnter\n } = formattedSet;\n\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false });\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\nimport { getFormattedSet } from './helper';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return HIGHLIGHTER;\n }\n\n static target () {\n return 'visual-unit';\n }\n\n getExcludeSetIds (excludeSet = []) {\n // Get excludeSetIds if excludeSet is a function\n if (excludeSet instanceof Function) {\n return excludeSet(this.firebolt.getEntryExitSet);\n }\n // Get excludeSetIds if excludeSet is not a function\n return excludeSet.reduce((acc, behaviour) => {\n const selectedPoints = this.firebolt.getEntryExitSet(behaviour) || {};\n const selectedPointsIds = (selectedPoints.mergedEnter || {}).uids;\n if (selectedPointsIds) acc.push(...selectedPointsIds);\n return acc;\n }, []);\n }\n\n apply (selectionSet, payload, options = {}) {\n const currentStrategy = this._strategies[options.strategy || this._strategy];\n const excludeSetIds = this.getExcludeSetIds(options.excludeSet);\n\n // Get all sets except the excludeSet points\n const formattedSet = {\n ...selectionSet,\n completeSet: getFormattedSet(selectionSet.completeSet, excludeSetIds),\n entrySet: getFormattedSet(selectionSet.entrySet[1], excludeSetIds),\n exitSet: getFormattedSet(selectionSet.exitSet[1], excludeSetIds),\n mergedEnter: getFormattedSet(selectionSet.mergedEnter, excludeSetIds),\n mergedExit: getFormattedSet(selectionSet.mergedExit, excludeSetIds)\n };\n\n const totalSet = { selectionSet, formattedSet };\n\n currentStrategy(totalSet, this, payload, excludeSetIds);\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const firebolt = this.firebolt;\n const entryModel = selectionSet.mergedEnter.model;\n\n if (payload.criteria === null) {\n firebolt.resetData();\n } else {\n firebolt.data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel, getObjProp, mergeRecursive, ReservedFields, dmMultipleSelection } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: {\n field: getObjProp(depLayerEncoding, 'color', 'field'),\n value: getObjProp(depLayerEncoding, 'color', 'value')\n },\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: () => sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const layerOwner = layerDef.def.name;\n const name = `${layerOwner}-${commonName}`;\n const defaultClassName = `${sideEffect.constructor.defaultConfig().className}`;\n\n layers.push({\n name: `${name}-upper`,\n mark: 'point',\n groupId: `${commonName}-upper`,\n className: `${defaultClassName}-upper`,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n\n if (mark === 'area') {\n layers.push({\n name: `${name}-lower`,\n mark: 'point',\n groupId: `${commonName}-lower`,\n className: `${defaultClassName}-lower`,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return ANCHORS;\n }\n\n addAnchorLayers () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 70;\n }\n\n // Default offset by which anchor size is changed\n getAnchorSizeOnInteraction ({ dragEnd }) {\n if (dragEnd) {\n return 40;\n }\n return 0;\n }\n\n apply (selectionSet, payload) {\n const dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n const context = this.firebolt.context;\n const upperAnchors = context.layers().filter(layer => layer.config().groupId === `${formalName}-upper`);\n const lowerAnchors = context.layers().filter(layer => layer.config().groupId === `${formalName}-lower`);\n\n const { target, action } = payload;\n let targetObj = null;\n if (target) {\n targetObj = target[1].reduce((acc, v, i) => {\n const field = target[0][i];\n if (field !== ReservedFields.MEASURE_NAMES) {\n acc[field] = v;\n }\n return acc;\n }, {});\n }\n\n [...upperAnchors, ...lowerAnchors].forEach((layer, index) => {\n const layerConfig = layer.config();\n const linkedLayer = context.getLayerByName(layerConfig.owner);\n const linkedLayerName = linkedLayer.constructor.formalName();\n const groupId = layerConfig.groupId;\n const isUpperAnchor = groupId === `${formalName}-upper`;\n let transformedData = [];\n let schema = [];\n\n [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel, index);\n\n // Render both upper and lower anchors for area plot if hovered over an anchor\n if (linkedLayerName === 'area' && target && action === 'highlight') {\n const filterFn = dmMultipleSelection(target, dataModel);\n const dmFromPayload = dataModel.select(filterFn, {});\n\n if (!isUpperAnchor) {\n [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dmFromPayload, index);\n }\n }\n\n const transformedDataModel = new DataModel(transformedData, schema);\n const anchorSizeConfig = {\n encoding: {\n size: {\n value: () => this.defaultSizeValue() + this.getAnchorSizeOnInteraction(payload)\n },\n 'stroke-width': {\n value: this.getAnchorStroke(payload, targetObj)\n }\n }\n };\n const newConfig = mergeRecursive(layerConfig, anchorSizeConfig);\n\n layer\n .data(transformedDataModel)\n .config(newConfig);\n\n return this;\n });\n }\n\n getAnchorStroke (payload, targetObj) {\n return (d) => {\n const dataObj = d.data.dataObj;\n const matchingData = targetObj ? Object.keys(targetObj).every((key) => {\n const val = dataObj[key];\n return val === targetObj[key];\n }) : false;\n return matchingData ? '1px' : '0px';\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return PERSISTENT_ANCHORS;\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n setAnchorLayerStyle (layers) {\n const anchorLayers = layers.filter(l => l.config().groupId === PERSISTENT_ANCHORS);\n anchorLayers.forEach((anchor) => {\n // Execute focusStroke interaction of anchor point layer\n const ids = anchor.data().getUids();\n const layerName = this.constructor.formalName();\n const defaultInteractionLayerEncoding = anchor.config().encoding.interaction;\n anchor.applyInteractionStyle(defaultInteractionLayerEncoding[layerName], ids, { apply: true });\n });\n }\n\n // offset value by which anchor size is changed\n // Applied only on select interaction\n getAnchorSizeonInteraction () {\n return 50;\n }\n\n getAnchorStroke () {\n return '2px';\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return BRUSH_ANCHORS;\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n setAnchorLayerStyle (layers) {\n const anchorLayers = layers.filter(l => l.config().groupId === BRUSH_ANCHORS);\n anchorLayers.forEach((anchor) => {\n // Execute focusStroke interaction of anchor point layer\n const ids = anchor.data().getUids();\n const layerName = this.constructor.formalName();\n const defaultInteractionLayerEncoding = anchor.config().encoding.interaction;\n anchor.applyInteractionStyle(defaultInteractionLayerEncoding[layerName], ids, { apply: true });\n });\n }\n\n getAnchorStroke (payload) {\n return payload.dragEnd ? '2px' : '1px';\n }\n}\n","import SurrogateSideEffect from '../surrogate';\nimport { AXIS_LABEL_HIGHLIGHTER } from '../../enums/side-effects';\nimport './styles.scss';\nimport { shouldApplySideEffect } from '../helper';\n\nexport default class AxisLabelHighLighter extends SurrogateSideEffect {\n static formalName () {\n return AXIS_LABEL_HIGHLIGHTER;\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet) {\n const context = this.firebolt.context;\n const dataModel = selectionSet && selectionSet.mergedEnter.model;\n if (!shouldApplySideEffect(dataModel, this)) {\n return this;\n }\n const selectedData = dataModel && dataModel.getData().data;\n const selectedDataValues = selectedData && selectedData.length ? selectedData[0] : [];\n const { x = [], y = [] } = context.axes();\n [...x, ...y].forEach((axis) => {\n const fieldMeta = dataModel ? dataModel.getFieldsConfig()[axis.config().field] : undefined;\n const selData = selectedDataValues[fieldMeta && fieldMeta.index !== undefined\n ? fieldMeta.index : undefined];\n const { selectionSet: selectedElements, rejectionSet } = axis.getTicksBasedOnData(selData);\n selectedElements && selectedElements.selectAll('text').classed('muze-axis-ticks-highlight', true);\n rejectionSet.selectAll('text').classed('muze-axis-ticks-highlight', false);\n });\n\n return this;\n }\n}\n","import { intersect, getObjProp } from 'muze-utils';\nimport * as BEHAVIOURS from './enums/behaviours';\nimport * as SIDE_EFFECTS from './enums/side-effects';\n\nconst nullDataTooltipMap = {\n area: true,\n arc: false,\n line: true,\n text: false,\n point: false,\n bar: false,\n tick: false\n};\n\nconst applySideEffectOnEmptyTarget = (sideEffect, { target }) => {\n const layers = sideEffect.layers();\n const showTooltipOnEmptyTarget = layers.some((l) => {\n const layerName = l.constructor.formalName();\n return nullDataTooltipMap[layerName];\n });\n return showTooltipOnEmptyTarget || target;\n};\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fadeOnBrush'\n }\n }, 'brush-anchors'],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active) {\n return null;\n }\n if (applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return selectionSet;\n }\n return null;\n }\n }\n }, 'anchors', {\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary',\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active === true ||\n !applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return null;\n }\n const selectEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.SELECT);\n const brushEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.BRUSH);\n if (selectEntrySet || brushEntrySet) {\n let uids = [];\n let returnEntrySet = null;\n if (getObjProp(selectEntrySet, 'mergedEnter', 'uids', 'length')) {\n uids = selectEntrySet.mergedEnter.uids;\n returnEntrySet = selectEntrySet;\n } else if (getObjProp(brushEntrySet, 'mergedEnter', 'uids', 'length')) {\n uids = brushEntrySet.mergedEnter.uids;\n returnEntrySet = brushEntrySet;\n }\n\n const { uids: highlightUids } = selectionSet.mergedEnter;\n\n if (intersect(uids, highlightUids, [id => id[0], id => id[0]]).length) {\n return returnEntrySet;\n }\n }\n\n return null;\n }\n }\n }, {\n name: SIDE_EFFECTS.AXIS_LABEL_HIGHLIGHTER,\n options: {\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active) {\n return null;\n }\n if (applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return selectionSet;\n }\n return null;\n }\n }\n }],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors', {\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary'\n }\n }],\n pseudoSelect: [{\n name: 'highlighter',\n options: {\n strategy: 'pseudoFocus'\n }\n }]\n};\n","import { componentRegistry } from 'muze-utils';\nimport * as behaviours from './actions/behavioural';\nimport { physicalActions } from './actions/physical';\nimport * as sideEffects from './side-effects';\n\nconst convertToObj = (comps) => {\n const obj = {};\n\n for (const key in comps) {\n const val = comps[key];\n\n obj[val.formalName()] = val;\n }\n return obj;\n};\n\nexport const registry = {\n behaviours: componentRegistry(convertToObj(behaviours)),\n physicalActions: componentRegistry(physicalActions),\n sideEffects: componentRegistry(convertToObj(sideEffects))\n};\n","import { ReservedFields, difference, isSimpleObject, getIndexMap } from 'muze-utils';\n\nconst getIdentifierMeasureMap = (identifiers, fields, facetsMap) => {\n const identifierIdxMap = getIndexMap(identifiers[0]);\n const identifierValues = identifiers.slice(1, identifiers.length);\n\n return identifierValues.reduce((acc, row) => {\n let facetPresent = true;\n\n for (const field in facetsMap) {\n const facetVal = row[identifierIdxMap[field]];\n facetPresent = facetPresent && facetVal === facetsMap[field];\n }\n\n if (facetPresent) {\n const key = fields.map((field) => {\n const fieldIndex = identifierIdxMap[field];\n\n return row[fieldIndex];\n });\n const measureNamesIdx = identifierIdxMap[ReservedFields.MEASURE_NAMES];\n\n if (measureNamesIdx !== undefined) {\n const measureArr = row[measureNamesIdx];\n !acc[key] && (acc[key] = []);\n\n if (measureArr && measureArr.length) {\n acc[key].push([measureArr]);\n }\n }\n }\n\n return acc;\n }, {});\n};\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n const dataObj = selectionDataModel.getData();\n const { includeMeasures = true, sourceIdentifiers } = propConfig;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const selectionDataFields = selectionDataModel.getFieldspace().fieldsObj();\n let criteria = null;\n if (sourceIdentifiers !== null) {\n criteria = schema.reduce((ranges, obj) => {\n const field = obj.name;\n const fieldObj = fieldMap[field];\n\n if (!fieldObj) {\n return ranges;\n }\n\n ranges[field] = selectionDataFields[field].domain();\n return ranges;\n }, {});\n const measureNamesIdx = sourceIdentifiers.identifiers[0]\n .findIndex(field => field === ReservedFields.MEASURE_NAMES);\n if (measureNamesIdx !== undefined && includeMeasures) {\n const measureNames = sourceIdentifiers.identifiers.slice(1, sourceIdentifiers.identifiers.length)\n .map(d => d[measureNamesIdx]);\n criteria[ReservedFields.MEASURE_NAMES] = measureNames.map(d => [d]);\n }\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig, facetByFields) => {\n const propPayload = propConfig.payload;\n let payload;\n if (isSimpleObject(propPayload.criteria)) {\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n } else {\n payload = payloadGenerator.__default(instance, selectionDataModel, propConfig, facetByFields);\n }\n\n return payload;\n },\n\n __default: (instance, propagationDataModel, propConfig, facetByFields = {}) => {\n let propagationDataDims = [];\n let criteria = null;\n\n const { payload: propPayload, sourceIdentifiers, excludeSelectedMeasures } = propConfig;\n const { data } = propagationDataModel.getData({ withUid: true });\n const payload = Object.assign({}, propPayload);\n const fieldsConfig = Object.assign({}, propagationDataModel.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(propagationDataModel.getFieldsConfig()).length\n }\n });\n\n propagationDataDims = Object.keys(propagationDataModel.getFieldspace().getDimension());\n !propagationDataDims.length && (propagationDataDims = [ReservedFields.ROW_ID]);\n\n if (sourceIdentifiers) {\n const identifierMap = getIdentifierMeasureMap(sourceIdentifiers.identifiers, propagationDataDims,\n facetByFields);\n const dataArr = [];\n\n for (let i = 0, len = data.length; i < len; i++) {\n const row = data[i];\n const dims = [];\n\n propagationDataDims.forEach((field) => {\n const idx = fieldsConfig[field].index;\n dims.push(row[idx]);\n });\n const uid = row[row.length - 1];\n const dimKey = `${dims}`;\n\n if (dimKey in identifierMap) {\n const measures = identifierMap[dimKey];\n const allMeasures = instance._metaData.dimensionsMap[uid];\n\n if (excludeSelectedMeasures) {\n const diffMeasures = difference(allMeasures, measures);\n diffMeasures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n } else if (measures && measures.length) {\n measures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n } else {\n dataArr.push([...dims, []]);\n }\n } else {\n dataArr.push([...dims, []]);\n }\n }\n\n criteria = [[...propagationDataDims, ReservedFields.MEASURE_NAMES], ...dataArr];\n }\n\n payload.criteria = criteria;\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : [];\n return payload;\n },\n pseudoSelect: (instance, selectionDataModel, propConfig) =>\n payloadGenerator.__default(instance, selectionDataModel, Object.assign({}, {\n excludeSelectedMeasures: true\n }, propConfig))\n};\n\nexport const getPayloadGenerator = (action, criteria) => {\n if (criteria instanceof Array || !payloadGenerator[action]) {\n return payloadGenerator.__default;\n }\n\n return payloadGenerator[action];\n};\n","import { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { FieldType, defaultValue } from 'muze-utils';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const isSideEffectEnabled = (firebolt, { se, propagationInf }) => {\n const sideEffectPolicies = firebolt._sideEffectPolicies;\n const sideEffectCheckers = Object.values(sideEffectPolicies[se.name || se] || {});\n const { sourceIdentifiers, data: propagationData } = propagationInf;\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, firebolt, {\n sourceIdentifiers,\n propagationData\n })) : true;\n};\n\nconst getUniqueKeys = (data, { layers, uids, keys = {}, dimensionsMap = {}, dimensions }) => {\n data.forEach((row, i) => {\n const key = [uids[i]];\n const dims = dimensions.map(d => row[d.index]);\n layers.forEach((layer) => {\n const measureNames = Object.keys(layer.data().getFieldspace().getMeasure());\n const mKey = `${[key, ...measureNames]}`;\n keys[mKey] = defaultValue(keys[mKey], {});\n keys[mKey] = {\n dims,\n measureNames,\n uid: uids[i]\n };\n dimensionsMap[key] = defaultValue(dimensionsMap[key], []);\n measureNames.length && dimensionsMap[key].push(measureNames);\n });\n });\n\n return {\n keys,\n dimensionsMap\n };\n};\n\nexport const prepareSelectionSetMap = ({ data, uids, dimensions }, layers, maps = {}) => {\n const obj = getUniqueKeys(data, {\n layers,\n uids,\n keys: maps.keys,\n dimensions,\n dimensionsMap: maps.dimensionsMap\n });\n\n return {\n keys: obj.keys,\n dimensionsMap: obj.dimensionsMap\n };\n};\n\nexport const prepareSelectionSetData = (dataModel, unit) => {\n const { data, uids } = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.values(fieldsConfig).filter(d => d.def.type === FieldType.DIMENSION);\n const layers = unit.layers();\n const { keys, dimensionsMap } = prepareSelectionSetMap({ data, uids, dimensions }, layers);\n\n return {\n keys,\n dimensions,\n dimensionsMap\n };\n};\n\nexport const dispatchSecondaryActions = (firebolt, { action, propagationData, config, propagationInf }) => {\n const context = firebolt.context;\n\n const secondaryActions = firebolt._connectedBehaviours[action] || [];\n\n secondaryActions.forEach((secAction) => {\n const payloadGeneratorFn = firebolt.getPayloadGeneratorFor(secAction);\n const generatedPayload = payloadGeneratorFn(firebolt, propagationData, config,\n context.facetByFields());\n firebolt.dispatchBehaviour(secAction, generatedPayload, propagationInf);\n });\n};\n\nexport const createMapByDimensions = (context, dm) => {\n let cacheMap = context._cacheMap = {};\n return (propDims, fieldsConfig) => {\n cacheMap = context._cacheMap;\n if (!cacheMap[propDims]) {\n cacheMap[propDims] = dm.getData({ withUid: true }).data.reduce((acc, row) => {\n const key = propDims.map(d => row[fieldsConfig[d].index]);\n acc[key] || (acc[key] = []);\n acc[key].push(row);\n return acc;\n }, {});\n }\n return cacheMap[propDims];\n };\n};\n","import { FieldType, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { payloadGenerator } from './payload-generator';\nimport {\n isSideEffectEnabled,\n dispatchSecondaryActions,\n createMapByDimensions\n} from './helper';\n\nconst sideEffectPolicy = (propPayload, firebolt, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fields = sourceIdentifiers.fields;\n const sourceIdentifierFields = Object.keys(fields).filter(field =>\n field.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData.getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === firebolt.sourceCanvas();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n const {\n TOOLTIP,\n HIGHLIGHTER,\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS\n } = SIDE_EFFECTS;\n this._handlers = {};\n this._propagationIdentifiers = {};\n this._connectedBehaviours = {};\n this.payloadGenerators(payloadGenerator);\n this.sideEffects().tooltip.disable();\n const disabledSideEffects = [TOOLTIP, HIGHLIGHTER, ANCHORS, BRUSH_ANCHORS, PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n return isSideEffectEnabled(this, { se, propagationInf });\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propInf) {\n return propInf.propagate === false && propInf.applySideEffect !== false;\n }\n\n data (...params) {\n if (params.length) {\n const model = params[0];\n this.context.enableCaching().data(model);\n return this;\n }\n return this.context.data();\n }\n\n resetData () {\n this.context.clearCaching().resetData();\n return this;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const propagationData = data;\n\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = this.getPayloadGeneratorFor(action);\n const payload = payloadFn(this, propagationData, config, context.facetFieldsMap());\n const behaviourPolicies = this._behaviourPolicies;\n const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, this, {\n sourceIdentifiers,\n propagationData\n }));\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data: propagationData,\n propPayload,\n sourceIdentifiers,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n\n this.dispatchBehaviour(action, payload, propagationInf);\n\n dispatchSecondaryActions(this, {\n action,\n propagationInf,\n propagationData,\n config\n });\n }\n };\n }\n\n target () {\n return 'visual-unit';\n }\n\n createSelectionSet (...params) {\n super.createSelectionSet(...params);\n\n this._dimsMapGetter = createMapByDimensions(this, this.data());\n\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n\n propagationIdentifiers (action, identifiers) {\n if (identifiers) {\n this._propagationIdentifiers = identifiers;\n }\n return this._propagationIdentifiers[action];\n }\n\n registerPhysicalActionHandlers () {\n return this;\n }\n\n id () {\n return this.context.id();\n }\n\n getPropagationSource () {\n return this.context.cachedData()[0];\n }\n\n sourceCanvas () {\n return this.context.parentAlias();\n }\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n","import { VolatileBehaviour } from '@chartshq/muze-firebolt';\nimport { BRUSH } from '../../enums/behaviours';\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class UnitBrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BRUSH;\n }\n\n dispatch (...params) {\n this.active = params[0].dragging;\n this.start = params[0].dragStart;\n return super.dispatch(...params);\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const PSEUDO_SELECT = 'pseudoSelect';\n\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === GRID_BAND ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === GRID_BAND && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_BAND) {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\n\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import {\n STATE_NAMESPACES,\n temporalFields,\n getObjProp,\n defaultValue,\n isSimpleObject\n} from 'muze-utils';\nimport { FRAGMENTED } from '@chartshq/muze-firebolt/src/enums/constants';\nimport { TOOLTIP, FRAGMENTED_TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\nimport { prepareSelectionSetData } from './firebolt/helper';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n const { keys, dimensionsMap, dimensions } = prepareSelectionSetData(context.data(), context);\n firebolt._metaData = {\n dimensionsMap,\n dimensions\n\n };\n firebolt.createSelectionSet({ keys, fields: dimensions.map(d => d.def.name) });\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n const firebolt = context.firebolt();\n const { interaction } = config;\n firebolt.config(interaction);\n const { mode } = interaction.tooltip;\n if (mode === FRAGMENTED) {\n const map = firebolt._behaviourEffectMap;\n for (const key in map) {\n const sideEffects = map[key];\n\n map[key] = sideEffects.map((val) => {\n let name = val;\n if (isSimpleObject(val)) {\n name = val.name;\n }\n if (name === TOOLTIP) {\n return FRAGMENTED_TOOLTIP;\n }\n return val;\n });\n }\n }\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\n }\n }\n];\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {\n onset: (context, facets) => {\n const facetKeys = facets[0].reduce((acc, v, i) => {\n acc[`${v}`] = facets[1][i];\n return acc;\n }, {});\n context.facetFieldsMap(facetKeys);\n }\n },\n facetFieldsMap: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n minOuterRadius: 10,\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef } from './helper';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null,\n meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { VolatileBehaviour } from '@chartshq/muze-firebolt';\nimport { PSEUDO_SELECT } from '../../enums/behaviours';\n\nexport default class PseudoSelectBehaviour extends VolatileBehaviour {\n static formalName () {\n return PSEUDO_SELECT;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport UnitBrushBehaviour from './firebolt/behaviours/brush';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange,\n unionDomainFromLayers,\n createRTree\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\nimport { REACTIVE_PROPS } from './enums';\nimport { PSEUDO_SELECT } from './enums/behaviours';\nimport PseudoSelectBehaviour from './firebolt/behaviours/pseudo-select';\n\nconst FORMAL_NAME = 'VisualUnit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, this.constructor.getterSetters());\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((this.localOptions())).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getterSetters () {\n return PROPS;\n }\n\n static localOptions () {\n return localOptions;\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: (context) => {\n const domain = context.calculateDomainFromData();\n context.dataDomain(domain);\n }\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n context._rtree = createRTree(context);\n\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, this.constructor.localOptions(), store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n this.createFireboltInstance();\n\n return this;\n }\n return this._store;\n }\n\n createFireboltInstance () {\n const { interactions } = this.registry();\n const { fireboltDeps } = this._dependencies;\n const Cls = this.getFireboltCls();\n\n this.firebolt(new Cls(this, {\n physical: Object.assign({}, interactions.physicalActions.get(), fireboltDeps.physicalActions),\n behavioural: Object.assign({}, interactions.behaviours.get(), {\n [UnitBrushBehaviour.formalName()]: UnitBrushBehaviour,\n [PSEUDO_SELECT]: PseudoSelectBehaviour\n }, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: this.getActionBehaviourMap()\n }, Object.assign({}, interactions.sideEffects.get(), fireboltDeps.sideEffects), this.getBehaviourEffectMap()));\n\n return this;\n }\n\n getFireboltCls () {\n return UnitFireBolt;\n }\n\n getBehaviourEffectMap () {\n return behaviourEffectMap;\n }\n\n getActionBehaviourMap () {\n return actionBehaviourMap;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n this.createRootContainers(container);\n\n setAxisRange(this);\n this.renderLayers();\n const node = this._rootSvg.node();\n const { sideEffectClassName, classPrefix } = this.config();\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n createRootContainers (container) {\n const config = this.config();\n const { className, defClassName } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n return this;\n }\n\n renderLayers () {\n const width = this.width();\n const height = this.height();\n const node = this._rootSvg.node();\n\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: layers, action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel, hasBarLayer) {\n if (!identifiers) return null;\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode, hasBarLayer);\n }\n\n /**\n * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes(),\n retinalFields: this.retinalFields(),\n layers: this.layers(),\n timeDiffs: this.timeDiffsByField()\n };\n }\n\n dataDomain (...params) {\n const { namespace } = this.metaInf();\n const store = this.store();\n const prop = `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${REACTIVE_PROPS.DOMAIN}`;\n if (params.length) {\n const domain = params[0];\n store.commit(prop, domain, namespace);\n }\n return store.get(prop, namespace);\n }\n\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n dimValue[0].push(ReservedFields.MEASURE_NAMES);\n pointObj.id = dimValue;\n const layers = this.layers();\n const pointInf = this.getMarkInfFromLayers(x, y, { ...config, dimValue });\n layers.forEach((layer) => {\n const measures = layer.data().getSchema()\n .filter(d => d.type === FieldType.MEASURE).map(d => d.name);\n for (let i = 1, len = dimValue.length; i < len; i++) {\n dimValue[i].push(measures.join());\n }\n });\n pointObj.target = pointInf && pointInf.id ? pointInf.id : null;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, { ...config, dimValue }) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n calculateDomainFromData () {\n const domain = unionDomainFromLayers(this.layers(), this.fields(), this._layerAxisIndex,\n this.data().getFieldsConfig());\n return domain;\n }\n\n getRangeFromIdentifiers ({ criteria, fields }) {\n return fields.reduce((acc, v) => {\n acc[v] = criteria[v];\n return acc;\n }, {});\n }\n\n getRangeFromPositions ({ startPos, endPos }) {\n const { x, y } = this.fields();\n const axes = this.axes();\n const xField = x[0];\n const yField = y[0];\n const xFieldType = x[0].type();\n const yFieldType = y[0].type();\n const dimensions = Object.keys(this.data().getFieldspace().getDimension());\n\n if (xFieldType === FieldType.MEASURE && yFieldType === FieldType.MEASURE) {\n const dom = {\n x: axes.x[0].invertExtent(startPos.x, endPos.x).sort((a, b) => a - b),\n y: axes.y[0].invertExtent(startPos.y, endPos.y).sort((a, b) => a - b)\n };\n const range = {};\n if (`${xField}` === `${yField}`) {\n const xdom = dom.x;\n const ydom = dom.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n range[xField] = [];\n } else {\n range[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n } else {\n range[xField] = dom.x;\n range[yField] = dom.y;\n }\n return range;\n } else if (xFieldType === FieldType.DIMENSION || yFieldType === FieldType.DIMENSION) {\n const points = this._rtree.search({\n minX: startPos.x,\n minY: startPos.y,\n maxX: endPos.x,\n maxY: endPos.y\n });\n\n const criteria = [[]];\n dimensions.forEach((field) => {\n criteria[0].push(`${field}`);\n });\n\n points.forEach((point) => {\n const data = point.data;\n const vals = [];\n dimensions.forEach((field) => {\n vals.push(data[field]);\n });\n criteria.push(vals);\n });\n return criteria;\n }\n return null;\n }\n}\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n *\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n *\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\nexport const BORDER_WIDTH = {\n default: 2,\n facet: 1\n};\n","import {\n DARK,\n NONE,\n LEFT,\n RIGHT,\n NORMAL,\n TOP,\n DARKER,\n BOTTOM\n} from '../enums/constants';\n\nconst handleBlankCell = (data) => {\n data.config().externalClassname.push(`${NONE}-${LEFT}`);\n data.config().externalClassname.push(`${NONE}-${RIGHT}`);\n};\n\nexport const sanitiseHeaderMatrix = (matrices, header) => {\n if (header) {\n for (let i = 0; i < matrices.length; i++) {\n if (i !== 0) {\n matrices[i].config({\n externalClassname: [`${DARK}`]\n });\n } else {\n matrices[i].config({\n externalClassname: [`${NONE}-${LEFT}`, `${DARK}`]\n });\n }\n }\n } else {\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [`${DARK}`]\n });\n }\n }\n }\n};\n\nexport const sanitiseGeomMatrix = (matrices, arr = {}) => {\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [`${NORMAL}`]\n });\n\n if (i === 0) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${TOP}`);\n } else if (i === matrices.length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n }\n\n if (j === matrices[i].length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARK}-${RIGHT}`);\n }\n\n if (arr[i]) {\n matrices[i - 1][j].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n }\n }\n};\n\nexport const sanitiseFacetValues = (matrices, type, blankCell) => {\n const normal = type === `${RIGHT}` ? `${DARK}` : `${NORMAL}`;\n const length = matrices.length;\n let latestSource = matrices[0][0].source();\n const lastSource = matrices[matrices.length - 1][0].source();\n const arr = {};\n\n // initialise the classname\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [normal]\n });\n }\n\n // seperate wrt the corner most facet\n if (matrices[i][0].source() !== latestSource) {\n arr[i] = i;\n latestSource = matrices[i][0].source();\n }\n }\n\n // add custom classname\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n if (j === 0) {\n matrices[i][0].config().externalClassname.push(`${NONE}-${type}`);\n if (matrices[i][j].source() === lastSource) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n } else {\n matrices[i][0].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n if (matrices[i][j] instanceof blankCell) {\n matrices[i][j].config().externalClassname.push(`${NONE}-${TOP}`);\n matrices[i][j].config().externalClassname.push(`${NONE}-${BOTTOM}`);\n }\n } else if (j !== matrices[i].length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARK}-${type}`);\n }\n\n if (i === 0) {\n matrices[0][j].config().externalClassname.push(`${DARKER}-${TOP}`);\n } else if (i === length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n }\n\n if (arr[i]) {\n matrices[i - 1][j].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n\n if (matrices[i][j] instanceof blankCell) {\n handleBlankCell(matrices[i][j], blankCell);\n }\n }\n }\n return arr;\n};\n\nexport const sanitiseBorderMatrix = (matrices, blankCell) => {\n const { leftMatrix, rightMatrix, topMatrix, bottomMatrix } = matrices;\n let bottomBorderObj = {};\n if (rightMatrix.length) {\n bottomBorderObj = sanitiseFacetValues(rightMatrix, `${RIGHT}`, blankCell);\n }\n if (leftMatrix.length) {\n bottomBorderObj = sanitiseFacetValues(leftMatrix, `${LEFT}`, blankCell);\n }\n topMatrix.length && sanitiseHeaderMatrix(topMatrix);\n bottomMatrix.length && sanitiseHeaderMatrix(bottomMatrix);\n return bottomBorderObj;\n};\n","import { Store, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport { sanitiseHeaderMatrix } from './cell-border-applier';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, ...params) => `${axisName}-axis-${params.join('-')}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n *\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\nexport const hasOneField = (fields) => {\n let hasField = false;\n const keys = Object.keys(fields);\n hasField = keys.some(d => fields[d].length > 0);\n return hasField;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n *\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager, sanitizeCheck }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n labelManager\n }).source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n sanitizeCheck && sanitiseHeaderMatrix(headers, true);\n return headers;\n};\n\n/**\n * @param {*} facetConfig\n *\n */\nexport const sanitizeCheck = (facetConfig = {}) => {\n const { isBorderPresent } = facetConfig;\n const updateBorderMap = ['color', 'showRowBorders', 'showColBorders', 'showValueBorders'];\n return (!isBorderPresent || updateBorderMap.every(d => !isBorderPresent[d]));\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n *\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.name() === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n *\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {\n top: false,\n bottom: false,\n left: false,\n right: false\n };\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n borders.left = true;\n borders.right = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {\n top: false,\n bottom: false,\n left: false,\n right: false\n };\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.top = true;\n borders.bottom = true;\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false, left: false, right: false };\n let showColBorders = { top: false, bottom: false, left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig) => {\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n const fields = [].concat(...encodingArr.map(enc => Object.values(enc).map(d => (typeof d === 'object' ?\n d.field : d))));\n return [...new Set(fields.filter(d => d))];\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n\n/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n facetNames.push(name);\n\n const facetSortConfig = sortConfig[name];\n\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n } else {\n sortInfo.push([name, null]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).getData({ sort: sortInfo }).data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","export const PROPS = {\n layers: {},\n data: {},\n globalConfig: {}\n};\n","import { ERROR_MSG, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom, getFieldsFromSuppliedLayers, hasOneField } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\nimport { PROPS } from './props';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n constructor () {\n generateGetterSetters(this, PROPS);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n *\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n\n getProjectionFields (layers) {\n return getFieldsFromSuppliedLayers(layers);\n }\n\n hasMandatoryFields (fields) {\n return hasOneField(fields);\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { DataModel, mergeRecursive } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\nimport { BORDER_WIDTH } from '../enums/defaults';\nimport { FACET } from '../enums/constants';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\nconst setDefaultConfigForFacet = (facetInfo, projectionInfo, config) => {\n let conf = {};\n\n if (config && (facetInfo.allFacets.length || projectionInfo.indices.length > 1)) {\n const { facetsUserConfig = {}, border } = config;\n const { isBorderPresent = {}, isGridLinePresent = {} } = facetsUserConfig;\n const gridLinesShowLength = Object.keys(isGridLinePresent).length;\n const {\n width: borderWidth,\n color: borderColor,\n style: borderStyle,\n showValueBorders,\n showRowBorders,\n showColBorders\n } = border;\n let gridLines = {};\n let borderConf = {};\n\n if (Object.keys(isBorderPresent).length === 0 || !(isBorderPresent.width)) {\n borderConf = {\n width: BORDER_WIDTH[FACET]\n };\n } else {\n Object.assign(borderConf,\n borderWidth ? { width: borderWidth } : null,\n borderColor ? { color: borderColor } : null,\n showValueBorders ? { showValueBorders } : null,\n showRowBorders ? { showRowBorders } : null,\n showColBorders ? { showColBorders } : null,\n borderStyle ? { style: borderStyle } : null);\n }\n if (gridLinesShowLength <= 0) {\n gridLines = {\n x: {\n show: false\n }\n };\n }\n conf = {\n border: borderConf,\n gridLines\n };\n }\n return conf;\n};\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator Callback executed after datamodels are prepared after sel/proj\n* @return {Object} set of matrices with the corresponding row and column keys\n*/\nexport const getMatrixModel = (dataModel, fieldInfo, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const defaultConfig = setDefaultConfigForFacet(facetInfo, projectionInfo, globalConfig);\n globalConfig = mergeRecursive(globalConfig, defaultConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells,\n sanitizeCheck\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\nimport { sanitiseBorderMatrix, sanitiseGeomMatrix } from './cell-border-applier';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n *\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const sortedFields = config.sort;\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n // Sort datamodel if user has sorted a field\n const sortConfig = Object.keys(sortedFields).map(field => [field, sortedFields[field]]);\n if (sortConfig.length) {\n datamodel = datamodel.sort(sortConfig, { saveChild: true });\n }\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return `${e}-${id}`;\n }, '')).map((currObj, axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n (label) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facet,\n encoders,\n resolver\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj,\n colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n\n const fields = getFieldsFromSuppliedLayers(suppliedLayers).filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const allFields = extractFields(facetsAndProjections, fields);\n\n groupedModel = dataModel.project(allFields);\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const newFieldsConfig = groupedModel.getFieldsConfig();\n const dimensions = allFields.filter(field =>\n getObjProp(newFieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n resolver.transformedData(groupedModel);\n return groupedModel;\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (resolverConfig) => {\n let placeholderInfo = {};\n const {\n datamodel,\n encoders,\n resolver,\n globalConfig,\n selection,\n transform,\n componentRegistry,\n groupBy,\n labelManager,\n fieldMap,\n layerConfig,\n registry,\n normalizedRows,\n normalizedColumns,\n otherEncodings,\n facetsAndProjections,\n simpleEncoder,\n config\n } = resolverConfig;\n\n const { rowFacets, colFacets } = facetsAndProjections;\n const isFacet = rowFacets.length > 0 || colFacets.length > 0;\n\n if (isFacet) {\n globalConfig.isFacet = true;\n }\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.cells.GeomCell),\n AxisCell: resolver.getCellDef(registry.cells.AxisCell),\n BlankCell: resolver.getCellDef(registry.cells.BlankCell),\n TextCell: resolver.getCellDef(registry.cells.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: simpleEncoder,\n newCacheMap,\n detailFields: config.detail,\n retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\n simpleEncoder.data(groupedModel);\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n if (isFacet) {\n const sanitizeCheckBorder = sanitizeCheck(globalConfig.facetsUserConfig);\n const arr = sanitizeCheckBorder && sanitiseBorderMatrix({\n leftMatrix: rows[0],\n rightMatrix: rows[1],\n topMatrix: columns[0],\n bottomMatrix: columns[1]\n }, registry.cells.BlankCell);\n valueMatrixInfo.matrix = sanitizeCheckBorder && sanitiseGeomMatrix(valueMatrixInfo.matrix, arr);\n }\n\n placeholderInfo = {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n return placeholderInfo;\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {},\n transformedData: {},\n store: {}\n};\n","import { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections,\n sanitizeCheck\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\nimport { RESOLVER_PROPS } from './resolver-props';\n\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n this._placeholderInfo = {};\n generateGetterSetters(this, this.constructor.getterSetters());\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n static getterSetters () {\n return RESOLVER_PROPS;\n }\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n optionalProjections (config, layerConfig, schema) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n const encoder = this.encoder();\n optionalProjections.push(...encoder.getProjectionFields(layerConfig, schema));\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry().cells;\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set(),\n radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias,\n coord\n } = config;\n const {\n layerRegistry,\n interactions\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n const { VisualUnit } = this.registry();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n interactions\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setRetinalAxisDomain (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.getRetinalAxes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n createRetinalAxes (fieldsConfig, config, encoders) {\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n\n this.axes(retinalAxes);\n\n this.updateVisualUnit(config);\n\n return this;\n }\n\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const {\n showHeaders,\n classPrefix\n } = config;\n const { TextCell, BlankCell } = this.registry().cells;\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n const sanitizeCheckBorder = sanitizeCheck(config.facetsUserConfig);\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager, sanitizeCheckBorder }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager, sanitizeCheckBorder })\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n updateVisualUnit (retinalConfig) {\n const retinalAxes = this.getRetinalAxes();\n\n const { lifeCycleManager } = this.dependencies();\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(retinalConfig);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n getMatrices (resolverConfig) {\n this._placeholderInfo = computeMatrices(resolverConfig);\n\n return this._placeholderInfo;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","import { MeasureSubtype, DimensionSubtype, FieldType } from 'muze-utils';\n\nimport { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [FieldType.DIMENSION]: ScaleType.BAND,\n [DimensionSubtype.CATEGORICAL]: ScaleType.BAND,\n [DimensionSubtype.TEMPORAL]: ScaleType.TIME,\n [FieldType.MEASURE]: ScaleType.LINEAR,\n [MeasureSubtype.CONTINUOUS]: ScaleType.LINEAR,\n [DimensionSubtype.BINNED]: ScaleType.BAND\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return [\n [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n }\n });\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n *\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n *\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n\nexport const getSortingConfig = (context, currentFieldName, axesConfig) => {\n const config = context.config();\n const dataModel = context.data();\n\n let lastSortConfig = null;\n if (Object.keys(config.sort).length !== 0) {\n return config.sort[currentFieldName];\n }\n\n const operations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n\n while (lastSortConfig = operations.pop()) {\n if (lastSortConfig.op === 'sort') break;\n }\n if (lastSortConfig &&\n lastSortConfig.criteria.length &&\n lastSortConfig.criteria[0][0] === currentFieldName) {\n return lastSortConfig.criteria[0][1];\n }\n return axesConfig().defaultSort;\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig,\n getSortingConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y, TEMPORAL } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const { resolver, facetFields, geomCell } = context;\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.dataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = getSortingConfig(context, currentFieldName, axes[0].config);\n if (sortingOrder && domains[axisType][key] instanceof Array) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n let domain = retriveDomainFromData(groupedModel, field);\n const fieldInstance = groupedModel.getFieldspace().fieldsObj()[field];\n const isTemporalField = fieldInstance.schema().subtype === TEMPORAL;\n\n if (isTemporalField) {\n domain = fieldInstance.data();\n }\n\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n\n hasMandatoryFields (fields) {\n const { colProjections, rowProjections } = fields;\n const colFields = super.hasMandatoryFields({ colProjections });\n const rowFields = super.hasMandatoryFields({ rowProjections });\n return colFields && rowFields;\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.dataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.groupedModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: GROUP_BY_FUNCTIONS.SUM\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n hasMandatoryFields (fields) {\n const { optionalProjections } = fields;\n return super.hasMandatoryFields({ optionalProjections });\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n *\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n\n return axes;\n }\n}\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr || []);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n\n data () {\n\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps, InvalidAwareTypes } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\nimport { ROWS, COLUMNS, DATA } from '../enums/constants';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nconst hasValue = (val) => {\n let hasOneValue = false;\n for (let i = 0; i < val.length && !hasOneValue; i++) {\n for (let j = 0; j < val[i].length; j++) {\n if (!(val[i][j] instanceof InvalidAwareTypes)) {\n hasOneValue = true;\n break;\n }\n }\n }\n return hasOneValue;\n};\n\nexport const updateChecker = (context, props) => props.every((option) => {\n const val = context[option]();\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n case DATA:\n return val && !val.isEmpty() && hasValue(val.getData().data);\n\n default:\n return true;\n }\n});\n\nexport const initializeFields = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n // Get the resolver for the matrices\n const resolver = context.resolver();\n\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = context.createEncoderInstance();\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n\n return {\n rows,\n columns,\n color,\n datamodel,\n size,\n detail,\n layers,\n transform,\n config,\n shape,\n resolver,\n matrixConfig,\n retinalConfig,\n encoders,\n fields\n };\n};\n\nexport const createMatrices = (context, sanitizedConfig) => {\n const { groupConfig, resolverConfig } = sanitizedConfig;\n const {\n config,\n resolver,\n matrixConfig,\n encoders,\n retinalConfig,\n fields\n } = groupConfig;\n\n const placeholderInfo = resolver.getMatrices(resolverConfig);\n\n context._originalGroupedData = context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setRetinalAxisDomain(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n\n resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n\nexport const initializeResolverFields = (context, config) => {\n const {\n datamodel,\n encoders,\n resolver,\n componentRegistry\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig, datamodel.getSchema());\n const facetsAndProjections = resolver.getAllFields();\n const { simpleEncoder } = encoders;\n const shouldRender = simpleEncoder.hasMandatoryFields(facetsAndProjections);\n return {\n datamodel,\n encoders,\n resolver,\n globalConfig,\n selection,\n transform,\n componentRegistry,\n groupBy,\n labelManager,\n fieldMap,\n layerConfig,\n registry,\n normalizedRows,\n normalizedColumns,\n otherEncodings,\n facetsAndProjections,\n simpleEncoder,\n shouldRender,\n config\n };\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n const { VisualUnit, layerRegistry } = context.registry();\n const { base: BaseLayer } = layerRegistry;\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {\n preset: (context) => {\n context._prevData = null;\n }\n },\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry({\n cells: value.cellRegistry,\n VisualUnit: value.VisualUnit\n });\n }\n return value;\n }\n },\n selection: {},\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup,\n getEncoder\n} from '../group-helper';\nimport {\n createUnitState,\n initializeGlobalState,\n setMatrixInstances,\n createMatrices,\n createLayerState,\n initializeResolverFields,\n initializeFields,\n updateChecker\n} from './helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y,\n ROWS,\n COLUMNS,\n DATA\n} from '../enums/constants';\n\n/**\n * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units.\n *\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n components,\n componentSubRegistry,\n interactions\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, this.constructor.getterSetters());\n generateGetterSetters(this, this.constructor.localOptions());\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n this._prevData = null;\n this._groupedDataModel = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.createMatrixResolver();\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layers.get(),\n cellRegistry: componentSubRegistry.cells.get(),\n VisualUnit: components.VisualUnit,\n interactions\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n static formalName () {\n return 'VisualGroup';\n }\n\n static localOptions () {\n return localOptions;\n }\n static getterSetters () {\n return PROPS;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\n */\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices (sanitizedConfig) {\n createMatrices(this, sanitizedConfig);\n }\n\n getMandatoryFields () {\n const updateProps = updateChecker(this, [ROWS, COLUMNS, DATA]);\n let sanitizedValue = {\n groupConfig: {},\n resolverConfig: {},\n shouldRender: false\n };\n if (updateProps) {\n const localFields = initializeFields(this);\n const {\n datamodel,\n encoders,\n resolver,\n matrixConfig\n } = localFields;\n const context = {\n datamodel,\n componentRegistry: this.registry(),\n encoders,\n resolver\n };\n const resolverFields = initializeResolverFields(context, matrixConfig);\n sanitizedValue = {\n groupConfig: localFields,\n resolverConfig: resolverFields,\n shouldRender: resolverFields.shouldRender\n };\n }\n return sanitizedValue;\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\n }\n\n createEncoderInstance () {\n const layers = this.layers();\n\n return getEncoder(layers);\n }\n\n createMatrixResolver () {\n this.resolver(new MatrixResolver(this._dependencies));\n\n return this;\n }\n\n groupedData (...params) {\n if (params.length) {\n this._groupedDataModel = params[0];\n return this;\n }\n return this.getGroupByData();\n }\n\n resetData () {\n const oriData = this._originalGroupedData;\n if (oriData) {\n this._groupedDataModel = oriData;\n }\n\n return this;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt._propagationInf;\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n\n if (propagationInf.sourceId) {\n selectionSet.reset();\n selectionSet.add(addSet);\n } else {\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets({ keys: true });\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\nexport const Marker = 'marker';\n\n","import { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\n\nexport const propagate = (firebolt, action, identifiers) => {\n const context = firebolt.context;\n const data = context.metaData();\n\n const propPayload = {};\n propPayload.action = propagationBehaviourMap[action] || action;\n // @TODO: Change fade propagationSideEffect for area layer\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n\n const propConfig = {\n sourceId: firebolt.id(),\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : identifiers,\n isMutableAction,\n action: propPayload.action\n };\n\n data.propagate(identifiers, propConfig, true);\n};\n\nexport const payloadGenerator = {\n __default: (selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel.getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel.isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : [];\n return payload;\n },\n brush: (dm, propConfig) => {\n const { criteria } = propConfig;\n return {\n criteria: criteria ? criteria.range : criteria\n };\n }\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const MAXWIDTH = 'max-width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const VERTICAL_BUFFER = 10;\nexport const HORIZONTAL_BUFFER = 2;\nexport const DEFAULTICONSIZE = { // approximately the (size needed) * Math.PI value\n circle: 64,\n square: 45.8,\n default: 42.8\n};\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\nexport const DEFAULT = 'default';\n\nexport const POSITION_ALIGNMENT_MAP = {\n [LEFT]: VERTICAL,\n [RIGHT]: VERTICAL,\n [TOP]: HORIZONTAL,\n [BOTTOM]: HORIZONTAL\n};\n\nexport const OPPOSITE_POSITION = {\n [LEFT]: RIGHT,\n [RIGHT]: LEFT\n};\n\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate, payloadGenerator } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\nimport { HIGHLIGHT, SELECT } from '../enums/behaviours';\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria;\n if (values instanceof Array) {\n values = values.slice(1, criteria.length);\n uniqueIds = [...new Set([].concat(...values))];\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const payloadFn = payloadGenerator[config.action] || payloadGenerator.__default;\n const payload = payloadFn(data, config);\n const { propagationSourceId } = config;\n const propagationInf = {\n propagate: false,\n data,\n sourceId: propagationSourceId\n };\n const isActionSourceSame = config.sourceId === this.id();\n if (!isActionSourceSame && config.action === HIGHLIGHT) {\n // @todo make it configurable\n this.dispatchBehaviour(HIGHLIGHT, payload, propagationInf);\n }\n };\n }\n\n data () {\n return this.context.metaData();\n }\n\n id () {\n return `legend-${this.context._id}`;\n }\n\n sourceCanvas () {\n return this.context.canvasAlias();\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n /**\n * Finds out if a deselected legend item is hovered\n * @param {string} behaviour type of interaction\n * @return {bool} true if highlight should work on the legend item, false otherwise\n */\n shouldApplyHighlightEffect (behaviour) {\n const highlightedSet = this.getEntryExitSet(HIGHLIGHT);\n const selectionSet = this.getEntryExitSet(SELECT);\n\n if (highlightedSet && selectionSet) {\n const currentHighlightedSet = highlightedSet.mergedEnter.uids;\n const deselectedLegendItemsSet = selectionSet.mergedExit.uids;\n\n // Find out if the currently highlighted item is also the deselected item\n if (behaviour === HIGHLIGHT) {\n const disabledLegendItems = [].concat(...currentHighlightedSet).filter(\n id => [].concat(...deselectedLegendItemsSet).includes(id)\n );\n if (disabledLegendItems.length) {\n return false;\n }\n }\n }\n return true;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: null\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","import { getEvent } from 'muze-utils';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n firebolt.triggerPhysicalAction('hover', payload);\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n const event = getEvent();\n firebolt.triggerPhysicalAction('hover', {\n criteria: null\n });\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { getSymbol, mergeRecursive } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n marginHorizontal: 3,\n paddingRight: 4,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n buffer: {\n [ALIGN.HORIZONTAL]: 10,\n [ALIGN.VERTICAL]: 10\n },\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n marker: {\n text: {\n formatter: data => data\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: (val, i, data, context) => context.valueParser()(val)\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(192,192,192,0.6)',\n type: 'square'\n }\n }\n // stops: 5\n};\n\nconst tempConfig = mergeRecursive({}, DEFAULT_CONFIG);\n\nconst ITEM_FORMATTER = {\n item: {\n text: {\n formatter: val => `${val[0]} - ${val[1]}`\n }\n }\n};\n\nexport const STEP_DEFAULT_CONFIG = mergeRecursive(tempConfig, ITEM_FORMATTER);\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n\nexport const LEGEND_MARKER_PROPS = {\n size: 8,\n BUFFER: 4,\n ROTATE_HORIZONTAL: 180,\n ROTATE_VERTICAL: 90,\n shape: 'triangle'\n};\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport { LEGEND_MARKER_PROPS } from '../../../legend/defaults';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._graphicElems = {\n rect: null\n };\n }\n\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n const { criteria } = payload;\n const { rect } = this._graphicElems;\n\n if (criteria === null) {\n rect && rect.remove();\n return this;\n }\n\n const domain = criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1],\n `${config.classPrefix}-selection-box-group`);\n\n const { size, BUFFER } = LEGEND_MARKER_PROPS;\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = size + BUFFER;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = size + BUFFER;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n this._graphicElems.rect = selBox;\n return this;\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n const uids = set.uids.map(d => d[0]);\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { makeElement, getSymbol } from 'muze-utils';\nimport { Marker } from '../../../enums/side-effects';\nimport { CLASSPREFIX, HORIZONTAL } from '../../../enums/constants';\nimport { LEGEND_MARKER_PROPS } from '../../../legend/defaults';\nimport './styles.scss';\n\nconst SYMBOL_PADDING = (Math.sqrt(3) * 3);\nconst AXIS_STROKE = 1;\nconst MARKER_BUFFER = 10;\n\nconst createTextCell = (className, labelManagerRef, cells) => {\n const { TextCell } = cells;\n const cell = new TextCell(\n {\n type: 'text',\n className: `${className}-text`\n }, {\n labelManager: labelManagerRef()\n }).config({ maxLines: 1 });\n cell._minTickDiff = { height: 0, width: 0 };\n\n return cell;\n};\n\nconst getRelativePosition = (canvas, legendContainer) => ({\n top: legendContainer.getBoundingClientRect().top - canvas.getBoundingClientRect().top,\n left: legendContainer.getBoundingClientRect().left - canvas.getBoundingClientRect().left\n});\nexport default class LegendMarker extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._graphicElements = {\n markerElement: null,\n legendmarkerTextContainer: null,\n legendmarkerText: null\n };\n }\n\n static formalName () {\n return Marker;\n }\n\n /**\n * It returns the default configuration needed by legend-marker.\n * @return {Object} Default configuration of the legend-marker.\n */\n static defaultConfig () {\n return {\n className: 'legend-marker',\n classPrefix: CLASSPREFIX,\n size: LEGEND_MARKER_PROPS.size,\n shape: LEGEND_MARKER_PROPS.shape\n };\n }\n\n apply (selectionSet, payload) {\n const className = `${this.config().classPrefix}-${this.config().className}`;\n if (payload.criteria && payload.criteria.length === 2) {\n const physicalAction = function () {\n // Register physical action on marker gere\n };\n const firebolt = this.firebolt;\n const labelManager = firebolt.context.labelManager;\n const context = firebolt.context;\n const legendConfig = firebolt.context.config();\n const legendScale = firebolt.context.scale();\n const { formatter: pointerTextFormatter } = legendConfig.marker.text;\n const config = this.config();\n const axis = context.axis().source();\n const dm = context.metaData();\n const domain = legendScale.domain();\n\n const range = payload.criteria[0] ? axis.getScaleValue(payload.criteria[1]) : 0;\n\n const legendGradContainer = context.getDrawingContext().svgContainer;\n\n const isFractional = payload.criteria[1][0] % 1 !== 0;\n\n const lableConfig = {\n top: 0,\n left: 0,\n labelText: isFractional ? payload.criteria[1][0].toFixed(2) : payload.criteria[1][0]\n };\n\n const { top, left } = getRelativePosition(context._canvasMount, legendGradContainer.node());\n const { oriTextHeight, oriTextWidth } = labelManager().getSmartText(lableConfig.labelText);\n let x;\n let y;\n let rotateAngle;\n\n const { size, shape } = config;\n if (context.config().align === HORIZONTAL) {\n x = range - (Math.sqrt(size / SYMBOL_PADDING)) + AXIS_STROKE;\n y = 5;\n rotateAngle = LEGEND_MARKER_PROPS.ROTATE_HORIZONTAL;\n lableConfig.top = top + y - 3 * MARKER_BUFFER;\n lableConfig.left = x + left - (oriTextWidth / 2) - (MARKER_BUFFER / 2);\n } else {\n y = range + Math.sqrt(size / (2 * SYMBOL_PADDING)) - AXIS_STROKE;\n x = 5;\n rotateAngle = LEGEND_MARKER_PROPS.ROTATE_VERTICAL;\n lableConfig.top = top + y - (3 * MARKER_BUFFER - 2) + (oriTextHeight / 2);\n lableConfig.left = x + left - oriTextWidth - MARKER_BUFFER;\n }\n\n const legendmarkerGroup = makeElement(legendGradContainer,\n 'g',\n [1],\n `${config.classPrefix}-${config.className}-group`);\n\n if (!this._graphicElements.markerElement) {\n this._graphicElements.markerElement = makeElement(legendmarkerGroup,\n 'path', [{ value: null }], className, { enter: physicalAction });\n }\n\n if (!this._graphicElements.legendmarkerTextContainer) {\n this._graphicElements.legendmarkerTextContainer = makeElement(\n context._canvasMount,\n 'div',\n [1],\n `${className}-text-container`);\n this._graphicElements.legendmarkerText = makeElement(\n this._graphicElements.legendmarkerTextContainer,\n 'div',\n [1],\n `${className}-text`);\n }\n const textElement = createTextCell(className, labelManager, context._cells);\n this._graphicElements.markerElement\n .data([{ value: payload.criteria }])\n .attr('transform', `translate(${x},${y}) rotate(${rotateAngle})`)\n .attr('d', getSymbol(shape).size(size * size)())\n .classed(`${className}-show`, true)\n .classed(`${className}-hide`, false);\n\n // pointer label formatter\n textElement.source(pointerTextFormatter(lableConfig.labelText, domain, dm));\n\n textElement.render(this._graphicElements.legendmarkerText.node());\n this._graphicElements.legendmarkerText\n .attr('style', `top: ${lableConfig.top}px; left:${lableConfig.left}px`)\n .classed(`${className}-show`, true)\n .classed(`${className}-hide`, false);\n } else if (this._graphicElements.markerElement && this._graphicElements.legendmarkerText) {\n this._graphicElements.markerElement\n .data([{ value: null }])\n .classed(`${className}-show`, false)\n .classed(`${className}-hide`, true);\n this._graphicElements.legendmarkerText\n .classed(`${className}-show`, false)\n .classed(`${className}-hide`, true);\n }\n }\n\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {\n onset: (context, value) => context.firebolt().attachPropagationListener(value)\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n },\n labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { makeElement, FieldType, getReadableTicks } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n MAXWIDTH,\n CENTER,\n HORIZONTAL,\n POSITION_ALIGNMENT_MAP\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n return getReadableTicks(domain, steps);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const { orientation } = config.item.text;\n let textAlign = LEFT;\n const { alignment, maxWidth, width, height, border, padding } = measurement;\n\n if (orientation === TOP || orientation === BOTTOM || alignment === HORIZONTAL) {\n textAlign = CENTER;\n }\n const titleWidth = Math.min(maxWidth, width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}px`)\n .style(HEIGHT, `${height}px`)\n .style('border-bottom', `${border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${titleWidth}px`)\n .style(MAXWIDTH, `${maxWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${padding}px`)\n .text(title.text)\n .style('text-align', textAlign)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const formattedData = formatter(value, index, context.metaData(), context);\n const { height, width } = labelManager.getOriSize(formattedData);\n space[index] = { height, width };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n *\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth);\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n // iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + iconSpaces[i].width + 2 * effPadding;\n } else {\n labelSpaces[i].width = iconSpaces[i].width;\n itemSpaces[i].width = iconSpaces[i].width;\n labelSpaces[i].width = iconSpaces[i].width;\n }\n totalWidth += itemSpaces[i].width;\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelWidth + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n\nexport const prepareSelectionSetData = (data, fieldName, dm) => {\n const fieldType = dm.getFieldsConfig()[fieldName].def.type;\n if (fieldType === FieldType.DIMENSION) {\n return {\n keys: data.reduce((acc, d) => {\n acc[d.rawVal] = {\n uid: d.id,\n dims: [d.rawVal]\n };\n return acc;\n }, {}),\n fields: [fieldName]\n };\n }\n return {\n keys: data.reduce((acc, d) => {\n acc[d.id] = {\n uid: d.id,\n dims: [d.id]\n };\n return acc;\n }, {}),\n fields: [fieldName]\n };\n};\n\nexport const calculateTitleWidth = (measures, titleWidth, config) => {\n const { maxItemSpaces, margin, itemSpaces } = measures;\n const { position, buffer } = config;\n const alignment = POSITION_ALIGNMENT_MAP[position];\n let width = 0;\n\n if (alignment === HORIZONTAL) {\n const localBuffer = buffer[alignment];\n width = itemSpaces.reduce((acc, cur) => acc + cur.width + localBuffer, 0);\n } else if (maxItemSpaces.width < titleWidth) {\n width = titleWidth + 2 * margin;\n } else {\n width = maxItemSpaces.width;\n }\n return width;\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH, RIGHT, LEFT, TOP, BOTTOM, POSITION_ALIGNMENT_MAP } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport {\n getItemMeasures,\n titleCreator,\n computeItemSpaces,\n prepareSelectionSetData,\n calculateTitleWidth\n} from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n const { interactions } = dependencies.registry;\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, interactions.behaviours.get(), legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this, VALUE, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale());\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, maxWidth } = this.measurement();\n\n const width = calculateTitleWidth(\n this.measurement(),\n this._labelManager.getOriSize(this._title.text).width,\n this.config()\n );\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\n border,\n padding,\n borderStyle,\n borderColor,\n alignment: POSITION_ALIGNMENT_MAP[this.config().position]\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor,\n position\n } = this.config();\n const {\n border,\n marginHorizontal,\n maxHeight,\n height,\n width,\n maxWidth\n } = this.measurement();\n let {\n margin\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n margin = marginHorizontal;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n margin = marginHorizontal;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\n }\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n\n const widthBox = calculateTitleWidth(\n this.measurement(),\n this._labelManager.getOriSize(this._title.text).width,\n this.config()\n );\n\n const titleWidth = Math.min(maxWidth, widthBox);\n width < titleWidth ? selectElement(this.mount()).style('width', `${titleWidth}px`) : null;\n // set height and width\n legendContainer.style('width', `${titleWidth}px`)\n .style('height', `${Math.min(maxHeight, height)}px`)\n .style(`${marginPosition}`, `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(prepareSelectionSetData(this.data(), this.fieldName(), this.metaData()));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.rawVal]];\n }\n\n getRangeFromIdentifiers ({ fields, entrySet }) {\n const data = this.data();\n const idRangeMap = data.reduce((acc, v) => {\n acc[v.id] = v;\n return acc;\n }, {});\n\n return fields.reduce((acc, v) => {\n acc[v] = entrySet.reduce((ranges, id) => {\n if (id in idRangeMap) {\n ranges.push(idRangeMap[id].range);\n }\n return ranges;\n }, []);\n return acc;\n }, {});\n }\n\n setParentInfo (info) {\n this._canvasMount = info.canvasRoot;\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n itemSpaces,\n width\n } = measurement;\n const {\n buffer\n } = config;\n return {\n row: {\n width: `${width + itemSpaces.length * buffer[HORIZONTAL] || 1}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width + buffer[HORIZONTAL]}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n DEFAULTICONSIZE,\n VERTICAL_BUFFER,\n HORIZONTAL_BUFFER,\n HORIZONTAL,\n VERTICAL,\n DEFAULT,\n TOP,\n BOTTOM,\n OPPOSITE_POSITION\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n *\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n *\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n\n const { align } = context.config().align;\n\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n\n if (measureType === 'width' && !stepColorCheck && align === VERTICAL) {\n return `${maxIconWidth}px`;\n } else if (align === HORIZONTAL) {\n return `${maxIconWidth}px`;\n }\n return `${iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const shape = d[1] || defaultIcon;\n const defaultIconSize = DEFAULTICONSIZE[shape] || DEFAULTICONSIZE[DEFAULT];\n const size = d[3] || defaultIconSize * Math.PI;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n padding,\n color,\n iconWidth,\n align\n } = context;\n\n let { maxIconWidth } = context;\n\n if (align === HORIZONTAL) {\n maxIconWidth = iconWidth + 2 * padding;\n }\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${Math.ceil(maxIconWidth)}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n const transalate = maxIconWidth / 2 - padding;\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, icon)\n .attr('transform', `translate(${transalate} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color)\n .attr('stroke', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix,\n shape,\n align\n } = context.config();\n const {\n maxIconWidth,\n padding,\n margin,\n border\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n const marginHorizontalBuffer = HORIZONTAL_BUFFER;\n\n const bufferCondition = textOrientation === TOP || textOrientation === BOTTOM\n || !padding || !margin || !border;\n\n const marginVerticalBuffer = bufferCondition ? 0 : VERTICAL_BUFFER;\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = context.metaData();\n const position = OPPOSITE_POSITION[textOrientation] || LEFT;\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\n .style(`padding-${position}`, '0px')\n .style(`margin-${position}`, `${align === HORIZONTAL ? marginHorizontalBuffer : marginVerticalBuffer}px`);\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon(shape, selectElement(this), d, {\n classPrefix,\n // iconWidth,\n iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color,\n align\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = context.metaData();\n const data = context.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n const formattedData = formatter([data[d[6]].range[0], data[d[6]].range[1]], i, dataArr, context);\n selectElement(this).text(formattedData);\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal,\n getReadableTicks,\n InvalidAwareTypes\n} from 'muze-utils';\nimport SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn, steps } = getScaleInfo(scale);\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n let domainForLegend = [];\n if (scaleType === SIZE && type === FieldType.MEASURE) {\n domainForLegend = steps instanceof Array ? steps : getReadableTicks(domain, domain.length);\n } else if (subtype === DimensionSubtype.TEMPORAL) {\n domainForLegend = [...new Set(field.data())];\n } else {\n domainForLegend = [...new Set(domain)];\n }\n\n const len = domainForLegend.length;\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.MEASURE) {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, i === len - 1 ? nextVal.toFixed(0) : nextVal.toFixed(0) - 1];\n } else {\n let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend.sort((a, b) => {\n const domainValue =\n !(a.value instanceof InvalidAwareTypes || a.value instanceof InvalidAwareTypes)\n ? a.value.localeCompare(b.value)\n : 1;\n return domainValue;\n });\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n\n legendContainer.selectAll('div')\n .filter((datum, i, allSelections) => !allSelections[i].classList.contains(`${classPrefix}-legend-body`))\n .style('float', LEFT);\n\n firebolt.mapActionsAndBehaviour();\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN, LEGEND_MARKER_PROPS } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n *\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n *\n */\nexport const makeLinearGradient = (container, data, domain, id) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', `linear-gradient-${id}`)\n .attr('x1', '0%')\n .attr('y2', '0%');\n\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false,\n labels: {\n rotation: null\n }\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n *\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data, id) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain, id);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.source().config({\n tickFormat: (val, i) => context.config().item.text.formatter(val, i, context.metaData(), context)\n });\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n axis.source().render();\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data, context._id);\n const labelDim = context.axis().source().getAxisDimensions().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (margin * 2 + border * 2));\n\n const { size: markerSize, BUFFER } = LEGEND_MARKER_PROPS;\n const markerWithBuffer = markerSize + BUFFER;\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} ${markerWithBuffer})`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(${markerWithBuffer} ${labelDim.height / 2})`);\n renderAxis(\n context,\n legendContainer,\n gradHeight - 2 * padding - 1,\n gradWidth - (gradientDimensions.width + markerWithBuffer) - padding * 2\n );\n\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height + markerWithBuffer}px`,\n width: `${gradientDimensions.width + markerWithBuffer}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: `url(#linear-gradient-${context._id})`\n });\n legendGradSvg.attr('height', gradientDimensions.height + markerWithBuffer);\n legendGradSvg.attr('width', gradientDimensions.width + markerWithBuffer);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData, getInterpolatedArrayData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { HIGHLIGHT } from '../enums/behaviours';\nimport { Marker } from '../enums/side-effects';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](ele),\n value: +value.toFixed(1),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n *\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.mapSideEffects({\n [HIGHLIGHT]: [Marker]\n });\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n\n getRangeFromIdentifiers ({ fields, criteria }) {\n return fields.reduce((range, v) => {\n range[v] = criteria[v];\n return range;\n }, {});\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getItemMeasures\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, HORIZONTAL } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\nimport { STEP_DEFAULT_CONFIG, DEFAULT_MEASUREMENT } from './defaults';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static defaultConfig () {\n STEP_DEFAULT_CONFIG.buffer[HORIZONTAL] = 0;\n return STEP_DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n const isFraction = ele => ele % 1 !== 0;\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainLeg[0] = domain[0];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainLeg.push(domain[1]);\n }\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n } else {\n domainLeg = getInterpolatedData(domain, steps, scaleParams);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n let range;\n if (i < domainLeg.length - 1) {\n const left = isFraction(ele) ? ele.toFixed(1) : ele;\n\n const numRight = +domainLeg[i + 1];\n const right = isFraction(numRight) ? numRight.toFixed(1) : numRight;\n\n value = `${left} - ${right}`;\n range = [left, right];\n } else if (domainLeg.length === 1) {\n value = isFraction(ele) ? ele.toFixed(1) : ele;\n\n const numRight = +domainLeg[i + 1];\n const right = isFraction(numRight) ? numRight.toFixed(1) : numRight;\n range = [value, right];\n }\n\n return {\n [scaleType]: scaleType === SIZE\n ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](ele),\n value,\n id: i + 1,\n range\n };\n }).filter(d => d.value !== null);\n\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const {\n item\n } = this.config();\n const stepItemBuffer = DEFAULT_MEASUREMENT.padding * 2;\n return getItemMeasures(this, 'range', item.text.formatter, stepItemBuffer);\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n return legendContainer;\n }\n\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\nexport const MUZE_PREFIX = 'muze';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const ICON_SHAPES = {\n SQUARE: 'square',\n CIRCLE: 'circle'\n};\n\nexport const IS_POINT_MAP = {\n true: ICON_SHAPES.CIRCLE,\n false: ICON_SHAPES.SQUARE\n};\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const POINT = 'point';\nexport const MESSAGE = 'message';\nexport const ERROR_MESSAGE = 'Insufficient data or incorrect configurations';\nexport const COMMON_INTERACTION = 'common';\nexport const INDIVIDUAL_INTERACTION = 'individual';\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n *\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive, CommonProps } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n },\n sideEffects: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\n */\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`,\n baseFontLimit: 16,\n upperFontLimit: 24,\n baseSizeLimit: 100,\n upperSizeLimit: 300,\n fractionImage: 0.8,\n fractionChild: 0.7\n};\n\nexport const CANVAS = 'canvas';\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module LocalOptions\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([title, titleConfig]) => {\n let t = title;\n if (typeof title === 'string' || !title) {\n t = () => title;\n }\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return [t, mergeRecursive(defConfig, titleConfig)];\n }\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([subtitle, subtitleConfig]) => {\n let sub = subtitle;\n if (typeof subtitle === 'string' || !subtitle) {\n sub = () => subtitle;\n }\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return [sub, mergeRecursive(defConfig, subtitleConfig)];\n }\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","import { COMMON_INTERACTION } from './constants';\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffects: {\n tooltip: COMMON_INTERACTION\n },\n behaviours: {\n highlight: COMMON_INTERACTION,\n select: COMMON_INTERACTION,\n brush: COMMON_INTERACTION,\n filter: COMMON_INTERACTION\n },\n tooltip: {\n\n }\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n },\n invalidValues: {},\n sort: {}\n};\n\nexport const EXCLUDE_CONFIG_KEYS = ['sort'];\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\n }\n}\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser, FieldType } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { BEHAVIOURS } from '@chartshq/muze-firebolt';\nimport { payloadGenerator } from '@chartshq/visual-unit';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID, LEGEND }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixFacetConfig = (config) => {\n if (config) {\n const isGridLinePresent = {};\n const { border, gridLines } = config;\n if (gridLines) {\n isGridLinePresent.x = !!gridLines.x;\n isGridLinePresent.y = !!gridLines.y;\n }\n const facetsUserConfig = {\n isBorderPresent: border || {},\n isGridLinePresent\n };\n return {\n facetsUserConfig,\n isFacet: false\n };\n }\n return {};\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const excludeKeys = (config, keys) => {\n const emptyValueKeyObject = {};\n keys.forEach((key) => {\n if (config && config[key] && Object.keys(config[key]).length) {\n emptyValueKeyObject[key] = {};\n }\n });\n return emptyValueKeyObject;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const legend = layoutManager.getComponent(LEGEND);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n if (legend) {\n legend.setComponentInfo({ rootNode: parentContainer });\n }\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n\n const sanitizedData = visualGroup.getMandatoryFields();\n if (sanitizedData.shouldRender) {\n visualGroup.createMatrices(sanitizedData);\n } else {\n visualGroup.remove();\n }\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n dispatchProps(context);\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nconst applyPropagationPolicy = (firebolt, { behaviours, sideEffects }) => {\n for (const key in behaviours) {\n firebolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n firebolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n};\n\nconst isMeasure = fields => fields.every(field => field.type() === FieldType.MEASURE);\n\nconst isSplom = (fields) => {\n const { rowProjections, colProjections } = fields;\n const colProj = colProjections.flat();\n const rowProj = rowProjections.flat();\n\n if (isMeasure(colProj) && isMeasure(rowProj)) {\n return true;\n }\n return false;\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const splom = isSplom(visualGroup.resolver().getAllFields());\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n applyPropagationPolicy(unitFireBolt, { behaviours, sideEffects });\n if (splom) {\n unitFireBolt.payloadGenerators({\n [BEHAVIOURS.BRUSH]: (inst, dm, propConfig, facetFields) => payloadGenerator.brush(inst, dm,\n { ...propConfig, ...{ includeMeasures: false } }, facetFields)\n });\n unitFireBolt.sideEffects().selectionBox.config({\n persistent: true\n });\n } else {\n unitFireBolt.payloadGenerators({\n [BEHAVIOURS.BRUSH]: payloadGenerator.brush\n });\n unitFireBolt.sideEffects().selectionBox.config({\n persistent: false\n });\n }\n });\n applyPropagationPolicy(firebolt, { behaviours, sideEffects });\n }\n};\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nexport const setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig, fixFacetConfig, excludeKeys } from './canvas/helper';\nimport { DEFAULT_CONFIG, EXCLUDE_CONFIG_KEYS } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: [null, null],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n takesMultipleParams: true,\n sanitization: ([config, auxConfig = {}], oldConfig) => {\n // Stores additional config, if passed\n const { reset = false } = auxConfig;\n let oldConf = {};\n\n // handle the default cases for facet, as it is different to other charts\n const facetDefaultConfig = fixFacetConfig(config);\n config = mergeRecursive(config, facetDefaultConfig);\n\n if (!reset) {\n oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n oldConf = Object.assign(oldConf, excludeKeys(config, EXCLUDE_CONFIG_KEYS));\n }\n\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n\n return fixScrollBarConfig(newConf);\n }\n\n }\n }\n};\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n *\n * @memberof GenericLayout\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n this._config.border.width = Math.max(0, this._config.border.width);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n *\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n *\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistributeSpaces(width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableMatrices () {\n return this.viewableMatrix;\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const columnMeasures = [width, width];\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, j);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\n };\n};\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n","/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\n\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage,\n priority\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n\n context.rowMatrix(new RowMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.row,\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new ColumnMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = (isFacet, showHeaders) => ({\n [`${TOP}-${LEFT}`]: isFacet && showHeaders ? LEFT : NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: isFacet && showHeaders ? RIGHT : NO_BORDERS,\n [`${CENTER}-${LEFT}`]: isFacet ? `${CENTER}${LEFT}` : ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: isFacet ? `${CENTER}${RIGHT}` : ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n});\n\nconst applySpecificBorder = (params) => {\n const { type, borderWidth, borderStyle, cells, color } = params;\n cells.style(`border-${type}`, `${borderWidth}px ${borderStyle} ${color}`);\n};\n\nconst specificBorderApplier = (params) => {\n const { borderTypes, showBorders, cells, borderInfo, name, isFacet } = params;\n const {\n color,\n style,\n width\n } = borderInfo;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder({\n cells,\n color: showBorders[borderType] ? color : 'transparent',\n type: borderType,\n borderWidth: width,\n borderStyle: style,\n name,\n isFacet\n });\n });\n};\n\nconst borderApplier = (cells, borderInfo, name, isFacet) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n [ROW]: () => specificBorderApplier({\n borderTypes: [TOP, BOTTOM],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [COLUMN]: () => specificBorderApplier({\n borderTypes: [LEFT, RIGHT],\n showBorders: showColBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [CENTER]: () => specificBorderApplier({\n borderTypes: [LEFT, RIGHT, TOP, BOTTOM],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [LEFT]: () => specificBorderApplier({\n borderTypes: [LEFT],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [RIGHT]: () => specificBorderApplier({\n borderTypes: [RIGHT],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [`${CENTER}${LEFT}`]: () => specificBorderApplier({\n borderTypes: [LEFT, TOP, BOTTOM],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [`${CENTER}${RIGHT}`]: () => specificBorderApplier({\n borderTypes: [RIGHT, TOP, BOTTOM],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n })\n };\n};\n\nexport const applyBorders = (params) => {\n const { cells, border, row, column, isFacet, showHeaders } = params;\n const name = `${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`;\n const borderApplierFn = borderApplier(cells, border, name, isFacet);\n const borderMapVal = borderMap(isFacet, showHeaders)[name];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\n };\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n\nexport const PADDING = 'padding';\nexport const HEADER_PADDING = 'headerPadding';\nexport const TITLE_PADDING = 'titlePadding';\n\nexport const TITLE = 'title';\nexport const SUBTITLE = 'subtitle';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\nimport { SIMPLE_CELL } from './constants';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n static formalName () {\n return SIMPLE_CELL;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\n }\n\n}\n\nexport default SimpleCell;\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null,\n [CONSTANTS.PADDING]: {\n [CONSTANTS.LEFT]: 8,\n [CONSTANTS.RIGHT]: 8,\n [CONSTANTS.TOP]: 10,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.HEADER_PADDING]: {\n [CONSTANTS.LEFT]: 8,\n [CONSTANTS.RIGHT]: 5,\n [CONSTANTS.TOP]: 2,\n [CONSTANTS.BOTTOM]: 5\n },\n [CONSTANTS.TITLE_PADDING]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n }\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL, BOTTOM, TOP } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\nimport * as CONSTANTS from './constants';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n static formalName () {\n return CONSTANTS.AXIS_CELL;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n let actualWidth = 0;\n let actualHeight = 0;\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show,\n orientation\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\nimport * as CONSTANTS from './constants';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n static formalName () {\n return CONSTANTS.BLANK_CELL;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n\n getMinMeasures () {\n return 0;\n }\n }\nexport default BlankCell;\n","import {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n HEADER,\n TITLE,\n SUBTITLE\n} from './enums/constants';\n\nexport const setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\n\nexport const isTitleSubtitle = (subType) => {\n let returnVal = false;\n if (subType === `${TITLE}` || subType === `${SUBTITLE}`) {\n returnVal = true;\n }\n return returnVal;\n};\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nexport const computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n const { height: smHeight, width: smWidth } = smartSpace;\n space.width = smWidth;\n space.height = smHeight;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n const { subType, headerPadding } = context.config();\n if (!isTitleSubtitle(subType)) {\n space.width += headerPadding[LEFT] + headerPadding[RIGHT];\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\nexport const setPadding = (measures) => {\n const { elem, className, headerPadding, padding, type, titlePadding } = measures;\n let localPadding;\n if (isTitleSubtitle(className)) {\n localPadding = titlePadding;\n } else if (type === HEADER) {\n localPadding = headerPadding;\n } else {\n localPadding = padding;\n }\n [TOP, BOTTOM, LEFT, RIGHT].forEach((position) => {\n elem.style(`padding-${position}`, `${localPadding[position]}px`);\n });\n return elem;\n};\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\nimport * as CONSTANTS from './constants';\nimport {\n setSmartText,\n computeTextSpace,\n setPadding\n} from './text-cell-helper';\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n static formalName () {\n return CONSTANTS.TEXT_CELL;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n const space = computeTextSpace(this);\n this.logicalSpace(space);\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n setSmartText(this);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation,\n padding,\n type,\n headerPadding,\n className,\n titlePadding\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n let elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n\n [TOP, BOTTOM, LEFT, RIGHT].forEach((position) => {\n container.style(`margin-${position}`, `${margin[position]}px`);\n });\n\n elem = setPadding({ elem, className, headerPadding, padding, type, titlePadding });\n if (this._className === 'muze-grid-headers') {\n elem.style('text-align', textAlign);\n }\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport * as CONSTANTS from './constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n static formalName () {\n return CONSTANTS.GEOM_CELL;\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel()\n .width(width).height(height - this.getCaptionSpace().height)\n .unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n register: (def) => {\n const key = def.formalName();\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`,\n subType: cellType\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING,\n BORDER, MARGIN, SIZE, COLOR, IS_POINT_MAP, POINT\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n *\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field && scale) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n * @param {*} mark mark of the layers in the canvas\n * @param {*} scaleType type of the scale to draw the legend ie shape, size or color\n *\n */\nexport const legendIconShapeMapper = (layers, scaleType) => {\n const layerMarks = layers.map(el => el.mark);\n const shape = IS_POINT_MAP[(scaleType === COLOR || scaleType === SIZE)\n && layerMarks.includes(POINT)];\n return shape;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n const { invalidValues } = canvas.config();\n const interactionRegistry = canvas.registry().interactions;\n const parser = getValueParser(invalidValues);\n\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n },\n registry: {\n interactions: interactionRegistry\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n\n const mark = canvas.composition().visualGroup.resolver().matrixLayers()[0][0];\n config.shape = legendIconShapeMapper(mark, scaleType);\n\n legend.scale(scale)\n .valueParser(parser)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n *\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n *\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n\n setComponentInfo () {\n throw Error('setComponentInfo is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`);\n // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`);\n mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .style('width', d => `${d.legend.measurement().width}px`)\n .each(function (d) { d.legend.mount(this); });\n }\n }\n\n draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n setComponentInfo (params) {\n const { rootNode } = params;\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n leg.setParentInfo({ canvasRoot: rootNode });\n });\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\nimport '../../border-applier.scss';\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n const { classPrefix, row, column, dimensions, border, isFacet, showHeaders } = this.params.config;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders({ cells, border, row, column, isFacet, showHeaders });\n }\n\n renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td',\n (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {\n update: (elem, cell) => {\n const { externalClassname } = cell.placeholder.config();\n externalClassname && externalClassname.map(d => elem.classed(`${className}-${d}`, true));\n }\n }, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n }\n\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n const { isFacet, showHeaders } = this.params.component.config();\n matrixConfig.isFacet = isFacet;\n matrixConfig.showHeaders = showHeaders;\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const { isFacet, showHeaders } = this.params.component.config();\n matrixConfig.isFacet = isFacet;\n matrixConfig.showHeaders = showHeaders;\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { incorrectMessageIcon } from './message-icon';\nimport { MESSAGE_CONFIG } from '../defaults';\n\nconst formatFontSize = (width, height) => {\n const { baseFontLimit, upperFontLimit, baseSizeLimit, upperSizeLimit } = MESSAGE_CONFIG;\n const fractionFont = (upperSizeLimit - baseSizeLimit) / (upperFontLimit - baseFontLimit);\n let fontSize = upperFontLimit;\n const dim = width < height && width !== 0 ? width : height;\n\n if (dim === 0) {\n fontSize = 0;\n } else if (dim <= baseSizeLimit) {\n fontSize = baseFontLimit;\n } else if (dim > baseSizeLimit && dim < upperSizeLimit) {\n fontSize = baseFontLimit + (upperSizeLimit - dim) / fractionFont;\n }\n return fontSize;\n};\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const childHeight = height > MESSAGE_CONFIG.baseSizeLimit ? MESSAGE_CONFIG.fractionChild * height : 0;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const childNode = makeElement(node, 'div', [1], `${className}-child`);\n const imageNode = makeElement(childNode, 'div', [1], `${className}-child-img`);\n const messageNode = makeElement(childNode, 'div', [1], `${className}-child-message`);\n\n applyStyle(childNode, { width, height: `${childHeight}px` });\n applyStyle(imageNode, { width, height: `${childHeight * MESSAGE_CONFIG.fractionImage}px` });\n\n imageNode.html(incorrectMessageIcon);\n\n const textElement = makeElement(messageNode, 'text', [1]);\n applyStyle(messageNode, { 'font-size': `${formatFontSize(width, height)}px` });\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n const { target, className } = params.config;\n this.component = params.component;\n this.params = params;\n this.target(target);\n this.className(className);\n this.position(params.config.position);\n return this;\n }\n}\n","export const incorrectMessageIcon = `\n\n\nGroup 23\n Created with Sketch.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n ERROR_MESSAGE,\n HORIZONTAL_CENTER\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n// Mapping of header alignment values\nconst headerAlignmentMap = {\n [LEFT]: LEFT,\n [RIGHT]: RIGHT,\n [CENTER]: HORIZONTAL_CENTER\n};\n\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: headerAlignmentMap[headerConfig.align],\n className: configType.className\n });\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, renderDetails, renderGrid) => {\n const { components, measurement } = renderDetails;\n const headerValues = Object.values(components.headers);\n let sum = 0;\n let messageWrapper = null;\n\n for (const val of headerValues) {\n sum += val.logicalSpace().height;\n }\n\n if (!renderGrid) {\n const defaultDimensions = { height: measurement.canvasHeight - sum, width: measurement.canvasWidth };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: ERROR_MESSAGE,\n classPrefix: MESSAGE_CONFIG,\n position: TOP\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent.updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n *\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import { isSimpleObject, ReservedFields, FieldType } from 'muze-utils';\nimport { getSideEffects, BEHAVIOURS } from '@chartshq/muze-firebolt';\nimport { PSEUDO_SELECT } from '@chartshq/visual-unit/src/enums/behaviours';\n\nexport const addFacetDataAndMeasureNames = (data, facetData, measureNames) => {\n if (data === null) {\n return data;\n }\n\n const facets = Object.keys(facetData);\n const facetVals = Object.values(facetData);\n\n if (isSimpleObject(data)) {\n return Object.assign({}, Object.keys(facetData).reduce((acc, v) => {\n acc[v] = [facetData[v]];\n return acc;\n }, {}), data, {\n [ReservedFields.MEASURE_NAMES]: measureNames\n });\n }\n const criteriaFields = data[0];\n const hasMeasureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES);\n const fieldsWithFacets = [...facets, ...criteriaFields,\n ...(hasMeasureNameField ? [] : [ReservedFields.MEASURE_NAMES])];\n\n const dataWithFacets = [\n fieldsWithFacets\n ];\n\n for (let i = 1, len = data.length; i < len; i++) {\n let measureNameArr = [];\n if (!hasMeasureNameField && measureNames) {\n measureNameArr = measureNames;\n }\n const row = [...facetVals, ...data[i], ...measureNameArr];\n dataWithFacets.push(row);\n }\n return dataWithFacets;\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n const { payload, identifiers, sourceUnitId, sourceCanvasId, propagationDataSource } = config;\n const dataModel = propagationDataSource;\n const sideEfffects = instance._sideEffectDefinitions;\n const behaviourEffectMap = instance._behaviourEffectMap;\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n payload.sourceUnit = sourceUnitId;\n payload.action = action;\n payload.sourceCanvas = sourceCanvasId;\n\n const groupId = sourceCanvasId;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n (effects ? effects.some(d => sideEfffects[d.name || d].mutates()) : false) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n let isMutableAction = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n const propConfig = {\n payload,\n action,\n criteria: identifiers,\n isMutableAction,\n groupId,\n sourceId: config.sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.sourceCanvas() : true)\n };\n\n dataModel.propagate(identifiers, propConfig, true);\n\n if (action !== propagationBehaviour) {\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n dataModel.propagate(identifiers, Object.assign({}, propConfig, {\n isMutableAction,\n applyOnSource: false,\n action: propagationBehaviour,\n sourceId: isMutableAction ? groupId : sourceUnitId,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.sourceCanvas()\n }), true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n\nconst isDimension = fields => fields.some(field => field.type() === FieldType.DIMENSION);\n\nexport const isCrosstab = (fields) => {\n const { rowFacets, colFacets, rowProjections, colProjections } = fields;\n if (rowFacets.length || colFacets.length) {\n return true;\n }\n const colProj = colProjections.flat();\n const rowProj = rowProjections.flat();\n\n if ((isDimension(colProj) || isDimension(rowProj)) && (colProj.length > 1 || rowProj.length > 1)) {\n return true;\n }\n return false;\n};\n\nexport const addSelectedMeasuresInPayload = (firebolt, unit, payload) => {\n const groupFields = firebolt.context.composition().visualGroup.resolver().getAllFields();\n if (isCrosstab(groupFields)) {\n const { x, y } = unit.fields();\n let measureFields;\n\n if (x.length && y.length) {\n if (x[0].type() === FieldType.MEASURE) {\n measureFields = [`${x[0]}`];\n } else if (y[0].type() === FieldType.MEASURE) {\n measureFields = [`${y[0]}`];\n }\n payload.selectedMeasures = measureFields;\n }\n }\n};\n\nexport const dispatchBehaviours = (firebolt, { payload, unit, behaviours }) => {\n behaviours.forEach((action) => {\n const actions = firebolt._actions.behavioural;\n payload.criteria = addFacetDataAndMeasureNames(payload.criteria, unit.facetFieldsMap(),\n unit.layers().map(layer => Object.keys(layer.data().getFieldspace().getMeasure())));\n\n addSelectedMeasuresInPayload(firebolt, unit, payload);\n payload.sourceCanvas = firebolt.sourceCanvas();\n firebolt.dispatchBehaviour(action, payload, {\n propagate: false,\n unit\n });\n\n const identifiers = actions[action].propagationIdentifiers();\n\n firebolt.propagate(action, payload, identifiers, {\n sideEffects: getSideEffects(action, firebolt._behaviourEffectMap),\n sourceUnitId: unit.id(),\n sourceId: firebolt.id(),\n propagationDataSource: firebolt.getPropagationSource()\n });\n });\n};\n\nexport const resetSelectAction = (firebolt, { unit, payload, behaviours }) => {\n if (behaviours[0] === BEHAVIOURS.BRUSH && payload.dragging && payload.dragDiff < 5) {\n dispatchBehaviours(firebolt, {\n behaviours: [BEHAVIOURS.SELECT],\n payload: {\n criteria: null\n },\n unit\n });\n }\n};\n\nexport const attachBehaviours = (group) => {\n const allFields = group.resolver().getAllFields();\n const valueMatrix = group.matrixInstance().value;\n const crosstab = isCrosstab(allFields);\n\n valueMatrix.each((cell) => {\n const unit = cell.valueOf();\n const firebolt = unit.firebolt();\n const behaviours = crosstab ? [PSEUDO_SELECT] : [];\n firebolt._connectedBehaviours[BEHAVIOURS.SELECT] = behaviours;\n });\n};\n","import {\n FieldType,\n mergeRecursive,\n CommonProps,\n ReservedFields\n} from 'muze-utils';\nimport { Firebolt, getSideEffects, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { createMapByDimensions } from '@chartshq/visual-unit/src/firebolt/helper';\nimport {\n payloadGenerator,\n isSideEffectEnabled,\n prepareSelectionSetMap\n} from '@chartshq/visual-unit';\nimport { TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects';\nimport { FRAGMENTED } from '@chartshq/muze-firebolt/src/enums/constants';\nimport { applyInteractionPolicy } from '../helper';\nimport {\n propagateValues,\n isCrosstab,\n resetSelectAction,\n dispatchBehaviours,\n attachBehaviours\n} from './helper';\nimport { COMMON_INTERACTION } from '../../constants';\n\nconst setSideEffectConfig = (firebolt) => {\n const tooltipSideEffect = firebolt.sideEffects().tooltip;\n const allFields = firebolt.context.composition().visualGroup.resolver().getAllFields();\n\n if (isCrosstab(allFields)) {\n tooltipSideEffect.config({\n selectionSummary: {\n order: 1,\n className: 'tooltip-content-container-selectionSummary-crosstab',\n showMultipleMeasures: true\n },\n highlightSummary: {\n order: 0,\n className: 'tooltip-content-container-highlightSummary-crosstab'\n }\n });\n } else {\n tooltipSideEffect.config({\n selectionSummary: {\n order: 0,\n className: 'tooltip-content-container-selectionSummary-default',\n showMultipleMeasures: false\n },\n highlightSummary: {\n order: 1,\n className: 'tooltip-content-container-highlightSummary-default'\n }\n });\n }\n};\n\nconst prepareSelectionSetData = (group, dataModel) => {\n const valueMatrix = group.matrixInstance().value;\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.values(fieldsConfig).filter(d => d.def.type === FieldType.DIMENSION);\n const hasMeasures = Object.keys(dataModel.getFieldspace().getMeasure()).length;\n const measureName = hasMeasures ? [ReservedFields.MEASURE_NAMES] : [];\n const keys = {};\n const dimensionsMap = {};\n const groupDataMap = {};\n\n dataModel.getData({ withUid: true }).data.forEach((row) => {\n const uid = row[row.length - 1];\n uid.values().reduce((acc, id) => {\n acc[id] = row;\n return acc;\n }, groupDataMap);\n });\n\n valueMatrix.each((cell) => {\n const unit = cell.source();\n const dm = unit.cachedData()[0];\n const layers = unit.layers();\n const linkedRows = [];\n const { uids: uidsArr } = dm.getData();\n const uids = [];\n\n uidsArr.forEach((uid) => {\n const values = uid.values();\n const id = values.find(idValue => groupDataMap[idValue]);\n const linkedRow = groupDataMap[id];\n\n if (linkedRow) {\n linkedRows.push(linkedRow);\n uids.push(linkedRow[linkedRow.length - 1]);\n }\n });\n\n prepareSelectionSetMap({\n data: linkedRows,\n uids,\n dimensions\n }, layers, {\n keys,\n dimensionsMap\n });\n });\n\n return {\n keys,\n dimensionsMap,\n dimensions,\n allFields: [...dimensions, ...measureName]\n };\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, firebolt) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = firebolt.sourceCanvas();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n '*': (propagationPayload, firebolt) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = firebolt.sourceCanvas();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n },\n selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.payloadGenerators(payloadGenerator);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\n const throwback = this.context._throwback;\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n this.config(this.context.config().interaction);\n applyInteractionPolicy(this);\n const group = this.context.composition().visualGroup;\n if (group) {\n setSideEffectConfig(this);\n this.createSelectionSet(group.groupedData());\n group.getGroupByData().on('propagation', (data, config) => {\n this.handleDataModelPropagation(data, config);\n });\n // Dispatch pseudo select behaviour for highlighting measures with common dimensions in crosstab\n attachBehaviours(group);\n }\n });\n }\n\n static defaultInteractionPolicy () {\n return () => {};\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n\n applyInteractionPolicy(this);\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n handleDataModelPropagation (data, config) {\n const group = this.context.composition().visualGroup;\n const valueMatrix = group.matrixInstance().value;\n const units = group.resolver().units();\n const propagationData = data;\n if (config.propagationSourceId === this.id()) {\n return this;\n }\n // @todo refactor this code\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n const { interaction: { behaviours: behaviourConfs = {} } } = this.context.config();\n const mode = behaviourConfs[action];\n if (mode !== COMMON_INTERACTION) {\n return this;\n }\n\n const payloadFn = this.getPayloadGeneratorFor(action);\n const payload = payloadFn(this, propagationData, config);\n\n const behaviourPolicies = this._behaviourPolicies;\n const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, this, {\n sourceIdentifiers,\n propagationData\n }));\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled;\n }\n\n if (enabled) {\n const { instance: unit = units[0][0] } =\n valueMatrix.findPlaceHolderById(propPayload.sourceUnit) || {};\n const propagationInf = {\n propagate: false,\n data: propagationData,\n propPayload,\n sourceIdentifiers,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction,\n unit\n };\n\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n\n return this;\n }\n\n target () {\n return 'visual-group';\n }\n\n mapActionsAndBehaviour () {\n const unitMatrix = this.context.composition().visualGroup.matrixInstance().value;\n\n unitMatrix.each((unit) => {\n const firebolt = unit.source().firebolt();\n firebolt.mapActionsAndBehaviour();\n });\n\n this.registerPhysicalActionHandlers();\n }\n\n registerPhysicalActionHandlers () {\n const unitMatrix = this.context.composition().visualGroup.matrixInstance().value;\n\n unitMatrix.each((cell) => {\n const unit = cell.source();\n const firebolt = unit.firebolt();\n\n firebolt.onPhysicalAction('*', (event, payload) => {\n this.handlePhysicalAction(event, payload, unit);\n }, this.context.constructor.formalName());\n });\n\n return this;\n }\n\n handlePhysicalAction (event, payload, unit) {\n const firebolt = unit.firebolt();\n const { behaviours } = firebolt._actionBehaviourMap[event];\n dispatchBehaviours(this, { behaviours, payload, unit });\n // Reset select action when dragging is done. Remove this when brush and select will be unioned\n resetSelectAction(this, { behaviours, payload, unit });\n }\n\n createSelectionSet (data) {\n const group = this.context.composition().visualGroup;\n const { keys, dimensions, dimensionsMap, allFields } = prepareSelectionSetData(group, data);\n this._metaData = {\n dimensionsMap,\n dimensions,\n allFields\n };\n super.createSelectionSet({ keys, fields: dimensions.map(d => d.def.name) });\n\n this._dimsMapGetter = createMapByDimensions(this, this.data());\n\n return this;\n }\n\n id () {\n return this.context.alias();\n }\n\n shouldApplySideEffects (propInf) {\n return propInf.applySideEffect !== false;\n }\n\n data (...params) {\n const group = this.context.composition().visualGroup;\n\n if (params.length) {\n const model = params[0];\n group.groupedData(model);\n this.createSelectionSet(group.groupedData());\n return this;\n }\n\n return group.getGroupByData();\n }\n\n resetData () {\n const group = this.context.composition().visualGroup;\n group.resetData();\n this.createSelectionSet(group.groupedData());\n return this;\n }\n\n getRangeFromIdentifiers ({ criteria, fields }) {\n return fields.reduce((acc, v) => {\n acc[v] = criteria[v];\n return acc;\n }, {});\n }\n\n propagate (behaviour, payload, identifiers, auxConfig = {}) {\n propagateValues(this, behaviour, Object.assign({\n payload,\n identifiers,\n propagationFields: this._propagationFields,\n sourceId: this.id(),\n sourceCanvasId: this.id(),\n propagationDataSource: this.data()\n }, auxConfig));\n }\n\n getPropagationSource () {\n const group = this.context.composition().visualGroup;\n\n return group._originalGroupedData;\n }\n\n sourceCanvas () {\n return this.context.alias();\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n if (payload.sideEffects) {\n return [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }];\n }\n const { mode } = this.context.config().interaction.tooltip;\n propagationInf.propPayload = propagationInf.propPayload || payload;\n sideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n if (se.name === TOOLTIP && mode === FRAGMENTED) {\n return false;\n }\n return isSideEffectEnabled(this, { se, propagationInf });\n });\n d.effects = mappedEffects;\n });\n return sideEffects;\n }\n\n dispatchBehaviour (action, payload, propagationInf = {}) {\n const group = this.context.composition().visualGroup;\n const units = group.resolver().units();\n const { unit = units[0][0] } = propagationInf;\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(action, behaviourEffectMap);\n const sideEffectInstances = this.sideEffects();\n\n sideEffects.forEach(({ effects }) => {\n effects.forEach((effect) => {\n const name = effect.name;\n const inst = sideEffectInstances[name];\n\n if (inst) {\n inst.sourceInfo(() => unit.getSourceInfo());\n inst.layers(() => unit.layers());\n inst.plotPointsFromIdentifiers((...params) =>\n unit.getPlotPointsFromIdentifiers(...params));\n inst instanceof SpawnableSideEffect &&\n inst.drawingContext(() => unit.getDrawingContext());\n inst.valueParser(unit.valueParser());\n }\n });\n });\n super.dispatchBehaviour(action, payload, propagationInf);\n }\n}\n","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport UnitBrushBehaviour from '@chartshq/visual-unit/src/firebolt/behaviours/brush';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null,\n propagationInfo: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, {\n brush: UnitBrushBehaviour\n }),\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with canvas.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const param = params[0];\n const components = Object.assign({}, param.components);\n const componentSubRegistry = Object.assign({}, param.componentSubRegistry);\n const interactionRegistry = Object.assign({}, param.interactions);\n\n this._registry = { components, componentSubRegistry, interactions: interactionRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n *\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n\n this.firebolt().mapActionsAndBehaviour();\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\nimport { registry as interactionRegistry } from '@chartshq/muze-firebolt';\n\nexport const COMPONENTS = {\n [VisualGroup.formalName()]: VisualGroup,\n [VisualUnit.formalName()]: VisualUnit\n};\n\nexport const SUBREGISTRIES = {\n cells: cellRegistry,\n layers: layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\nconst componentRegistry = (components = COMPONENTS) => {\n const reg = Object.assign({}, components);\n\n return {\n register: (cls) => {\n const key = cls.formalName();\n reg[key] = cls;\n return componentRegistry;\n },\n get: () => reg\n };\n};\n\nexport const registry = {\n components: componentRegistry(COMPONENTS),\n cells: cellRegistry(),\n layers: layerRegistry(),\n interactions: interactionRegistry\n};\n","import * as utils from 'muze-utils';\n\nimport { VisualUnit, helpers as unitHelpers, enums as unitEnums, UnitFireBolt } from '@chartshq/visual-unit';\nimport { VisualGroup, Encoders, encoderHelpers, groupUtils, enums as groupEnums } from '@chartshq/visual-group';\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect,\n Firebolt\n} from '@chartshq/muze-firebolt';\nimport {\n layerFactory,\n BaseLayer,\n LineLayer,\n TextLayer,\n TickLayer,\n PointLayer,\n helpers,\n enums,\n SimpleLayer,\n AreaLayer,\n ArcLayer,\n layerMixins\n} from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { registry as globalRegistry, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\nconst {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n Store\n} = utils;\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = globalRegistry.components;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n overrideRegistry.forEach((def) => {\n registry.register(def);\n });\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, globalRegistry.components.get());\n const componentSubRegistryDef = Object.assign({}, SUBREGISTRIES);\n\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop](globalRegistry[prop].get());\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry,\n interactions: globalRegistry.interactions\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n overrideRegistry.forEach((def) => {\n const prop = def.formalName();\n if (prop in defaultRegistry) {\n components[prop] = def;\n }\n });\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry, cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry, layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nmuze.registry = globalRegistry;\n\nmuze.Components = {\n VisualLayer: {\n layers: {\n BaseLayer,\n LineLayer,\n TextLayer,\n TickLayer,\n PointLayer,\n SimpleLayer,\n AreaLayer,\n ArcLayer\n },\n helpers,\n enums,\n layerMixins\n },\n VisualUnit: {\n constructor: VisualUnit,\n helpers: unitHelpers,\n enums: unitEnums,\n UnitFireBolt\n },\n VisualGroup: {\n constructor: VisualGroup,\n Encoders,\n encoderHelpers,\n groupUtils,\n enums: groupEnums\n },\n Canvas: {\n constructor: Canvas\n },\n Firebolt: {\n constructor: Firebolt\n }\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = utils;\nmuze.Model = new Store().model.constructor;\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index 4865bbbc..d0208985 100644 --- a/examples/index.html +++ b/examples/index.html @@ -9,26 +9,16 @@ @@ -47,20 +37,7 @@
- - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/examples/index1.html b/examples/index1.html index cde272b9..5ae5be2e 100644 --- a/examples/index1.html +++ b/examples/index1.html @@ -21,7 +21,7 @@ - + \ No newline at end of file diff --git a/examples/js/aa.js b/examples/js/aa.js index 658dd0be..2c1706ac 100644 --- a/examples/js/aa.js +++ b/examples/js/aa.js @@ -4,62 +4,34 @@ let env = window.muze(); const DataModel = window.muze.DataModel; - d3.csv('/data/weather.csv', (data) => { - const share = muze.Operators.share; + d3.csv('/data/austin-weather.csv', (data) => { const schema = [{ - name: 'maxDays', - type: 'measure' + name: 'Date', + type: 'dimension' }, { - name: 'minDays', + name: 'Events', + type: 'dimension' + },{ + name: 'DewPointHighF', type: 'measure' - }, { - name: 'time', - type: 'dimension', }]; - - let rootData = new DataModel(data, schema) - - rootData = rootData.calculateVariable({ - name: "date", - type: "dimension", - subtype: "temporal", - format: "%Y-%m-%d" - }, ["Year", function (d) { - return d; + let dm = new DataModel(data, schema); + dm = dm.calculateVariable({ + name: 'Year', + type: 'dimension' + }, ['Date', (y) => { + const date = new Date(y); + return date.getFullYear(); }]); - - env = env.data(rootData).minUnitHeight(40).minUnitWidth(40); - var mountPoint = document.getElementById('chart'); - window.canvas = env.canvas(); - var rows = ['Cylinders', 'Horsepower'], - columns = ['Origin', 'Year']; - canvas = canvas.rows(rows).columns(columns).height(800).color('Origin') - //{initProps} - .mount(mountPoint); - - setTimeout(() => { - canvas.rows(['Horsepower', 'Acceleration']).columns(['Acceleration', 'Horsepower']).color('Horsepower').size('Cylinders').detail(['Maker']).width(300).height(300); - canvas.once('canvas.animationend').then(function (client) { - var element = document.getElementById('chart'); - element.classList.add('animateon'); - }); - }, 3000); - - // const canvas = env.canvas(); + // dm = dm.select((fields) => !!fields.Events.value) + const canvas = env.canvas(); - // canvas - // .data(rootData) - // // .rows(['maxDays']) - // .rows([share('maxDays', 'minDays')]) - // .columns(['time']) - // .layers([{ mark: 'tick', encoding: { y: 'maxDays', y0: 'minDays' } } ]) - // // .layers([{ - // // mark: 'area' - // // }]) - // // .detail(['Name']) - // .mount('#chart') - // .height(500) - // .width(900) - // .title('Charts'); - }) -})(); \ No newline at end of file + canvas + .columns(['Year', 'Events']) + .rows(['DewPointHighF']) + .width(1000) + .height(400) + .data(dm) + .mount('#chart') + }); +})(); diff --git a/examples/js/legends/gradient.js b/examples/js/legends/gradient.js index 31d53c67..c63be1fd 100644 --- a/examples/js/legends/gradient.js +++ b/examples/js/legends/gradient.js @@ -10,71 +10,71 @@ d3.json('../data/cars.json', function (data) { schema = [{ - name: 'Name', + name: 'Name', - type: 'dimension' + type: 'dimension' - }, { + }, { - name: 'Maker', + name: 'Maker', - type: 'dimension' + type: 'dimension' - }, { + }, { - name: 'Miles_per_Gallon', + name: 'Miles_per_Gallon', - type: 'measure' + type: 'measure' - }, { + }, { - name: 'Displacement', + name: 'Displacement', - type: 'measure' + type: 'measure' - }, { + }, { - name: 'Horsepower', + name: 'Horsepower', - type: 'measure' + type: 'measure' - }, { + }, { - name: 'Weight_in_lbs', + name: 'Weight_in_lbs', - type: 'measure' + type: 'measure' - }, { + }, { - name: 'Acceleration', + name: 'Acceleration', - type: 'measure' + type: 'measure' - }, { + }, { - name: 'Origin', + name: 'Origin', - type: 'dimension' + type: 'dimension' - }, { + }, { - name: 'Cylinders', + name: 'Cylinders', - type: 'dimension' + type: 'dimension' - }, { + }, { - name: 'Year', + name: 'Year', - type: 'dimension', + type: 'dimension', - //{subtype} + //{subtype} - // subtype: 'temporal', + // subtype: 'temporal', - // format: '%Y-%m-%d' + // format: '%Y-%m-%d' - }]; + }]; var rootData = new DataModel(jsonData, schema); @@ -93,25 +93,18 @@ d3.json('../data/cars.json', function (data) { }) .config({ legend: { - position: 'bottom' + position: 'bottom', + color: { + marker: { + text: { + formatter: (data, domain, dm) => { + return `${data} m/s2`; + } + } + }, + + } } }) - .mount('#chart1') - - env.canvas() - .rows(["Maker"]) - .height(400) - .columns(['Acceleration']) - .data(rootData) - .color({ - field: 'Acceleration', - stops: 3 - }) - .config({ - legend: { - position: 'left' - } - }) - .mount('#chart2') - + .mount('#chart1'); }); \ No newline at end of file diff --git a/examples/js/tooltips/crosstab.js b/examples/js/tooltips/crosstab.js index 8967311d..0033e5c2 100644 --- a/examples/js/tooltips/crosstab.js +++ b/examples/js/tooltips/crosstab.js @@ -57,20 +57,25 @@ d3.csv('../../data/coffee.csv', (data) => { }, facetConfig: { rows: { verticalAlign: 'bottom' } }, /* dimensional values are placed in middle */ border:{ + color:'blue', showRowBorders: { top: true, bottom: true, + left: true, + right: true + }, + showValueBorders:{ + top: false, + bottom: true, + left: true, + right: true }, showColBorders:{ - left: true, - right: true + top: true, + bottom: true, + left: true, + right: true }, - showValueBorders: { - top: true, - bottom: true, - left: true, - right: true - } }, }) .title('Visual Crosstab') diff --git a/examples/samples/design-samples/scatter-shape.js b/examples/samples/design-samples/scatter-shape.js index 1f252640..b0e6a03d 100644 --- a/examples/samples/design-samples/scatter-shape.js +++ b/examples/samples/design-samples/scatter-shape.js @@ -1,69 +1,80 @@ /* eslint-disable */ -d3.json('../../../data/cars.json', (data) => { - const schema = [{ - name: 'Name', - type: 'dimension' - }, - { - name: 'Maker', - type: 'dimension' - }, - { - name: 'Miles_per_Gallon', - type: 'measure' - }, - { - name: 'Displacement', - type: 'measure', - // defAggFn: 'min' - }, - { - name: 'Horsepower', - type: 'measure' - }, - { - name: 'Weight_in_lbs', - type: 'measure', - }, - { - name: 'Acceleration', - type: 'measure' - }, - { - name: 'Origin', - type: 'dimension' - }, - { - name: 'Cylinders', - type: 'dimension' - }, - { - name: 'Year', - type: 'dimension', - subtype: 'temporal', - format: '%Y-%m-%d' - }, - ]; - let DataModel = muze.DataModel; - let dm = new DataModel(data, schema); - // dm = dm.select(d => d.Year.internalValue === -19800000 || d.Year.internalValue === 31516200000); - // dm = dm.select(d => d.Origin.value !== 'European Union'); - // const makers = ['bmw', 'ford', 'toyota', 'amc']; - // rootData = rootData.select(fields => makers.indexOf(fields.Maker.value) > -1); - - let env = muze(); - - canvas = env.canvas(); - canvas - .data(dm) + +(function () { + let env = window.muze(); + let DataModel = window.muze.DataModel; + const html = window.muze.Operators.html; + + d3.json('/data/cars.json', (data) => { + const schema = [{ + name: 'Name', + type: 'dimension' + }, + { + name: 'Maker', + type: 'dimension' + }, + { + name: 'Miles_per_Gallon', + type: 'measure' + }, + { + name: 'Displacement', + type: 'measure' + }, + { + name: 'Horsepower', + type: 'measure' + }, + { + name: 'Weight_in_lbs', + type: 'measure', + }, + { + name: 'Acceleration', + type: 'measure' + }, + { + name: 'Origin', + type: 'dimension' + }, + { + name: 'Cylinders', + type: 'dimension' + }, + { + name: 'Year', + type: 'dimension', + subtype: 'temporal', + format: '%Y-%m-%d' + }]; + let rootData = new DataModel(data, schema); + + env = env.data(rootData).minUnitHeight(40).minUnitWidth(40); + window.canvas = env.canvas(); + + canvas + .data(rootData) .width(850) .height(650) .rows(["Acceleration"]) .columns(["Year"]) .color("Origin") - // .size('Horsepower') .layers([{ - mark: 'area', + mark: 'bar', }]) .mount(document.getElementById('chart')); -}) \ No newline at end of file + + canvas.once('canvas.animationend').then(function (client) { + var element = document.getElementById('chart'); + canvas.legend().color.firebolt().dispatchBehaviour('select', { + criteria: [["Origin"],["USA"]] + }); + console.log('hovering on USA legend item'); + canvas.legend().color.firebolt().dispatchBehaviour('highlight', { + criteria: [["Origin"],["USA"]] + }); + element.classList.add('animateon'); + }); + }) +})() diff --git a/package-lock.json~origin_discover-release-ready b/package-lock.json~origin_discover-release-ready new file mode 100644 index 00000000..e5d95899 --- /dev/null +++ b/package-lock.json~origin_discover-release-ready @@ -0,0 +1,20251 @@ +{ + "name": "muze-monorepo", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/cli": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.8.3.tgz", + "integrity": "sha512-K2UXPZCKMv7KwWy9Bl4sa6+jTNP7JyDiHKzoOiUUygaEDbC60vaargZDnO9oFMvlq8pIKOOyUUgeMYrsaN9djA==", + "dev": true, + "requires": { + "chokidar": "^2.1.8", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "lodash": "^4.17.13", + "make-dir": "^2.1.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "commander": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.0.tgz", + "integrity": "sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==", + "dev": true + } + } + }, + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/compat-data": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.1.tgz", + "integrity": "sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==", + "dev": true, + "requires": { + "browserslist": "^4.8.2", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "@babel/core": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-call-delegate": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz", + "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz", + "integrity": "sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.8.1", + "browserslist": "^4.8.2", + "invariant": "^2.2.4", + "levenary": "^1.1.0", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz", + "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==", + "dev": true, + "requires": { + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.6.0" + } + }, + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz", + "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz", + "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helpers": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz", + "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", + "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", + "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz", + "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", + "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz", + "integrity": "sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", + "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", + "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", + "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", + "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz", + "integrity": "sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.8.3", + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz", + "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz", + "integrity": "sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.3.tgz", + "integrity": "sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.8.0", + "@babel/helper-compilation-targets": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.8.3", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.8.3", + "@babel/plugin-transform-modules-systemjs": "^7.8.3", + "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.3", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.3", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/types": "^7.8.3", + "browserslist": "^4.8.2", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.0", + "semver": "^5.5.0" + } + }, + "@babel/template": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/traverse": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@evocateur/libnpmaccess": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz", + "integrity": "sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg==", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0" + }, + "dependencies": { + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + } + } + }, + "@evocateur/libnpmpublish": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz", + "integrity": "sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg==", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + }, + "dependencies": { + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + } + } + }, + "@evocateur/npm-registry-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz", + "integrity": "sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g==", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@evocateur/pacote": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@evocateur/pacote/-/pacote-9.6.5.tgz", + "integrity": "sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w==", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "bluebird": "^3.5.3", + "cacache": "^12.0.3", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.5.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.4.4", + "npm-pick-manifest": "^3.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.3", + "safe-buffer": "^5.2.0", + "semver": "^5.7.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@lerna/add": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.20.0.tgz", + "integrity": "sha512-AnH1oRIEEg/VDa3SjYq4x1/UglEAvrZuV0WssHUMN81RTZgQk3we+Mv3qZNddrZ/fBcZu2IAdN/EQ3+ie2JxKQ==", + "dev": true, + "requires": { + "@evocateur/pacote": "^9.6.3", + "@lerna/bootstrap": "3.20.0", + "@lerna/command": "3.18.5", + "@lerna/filter-options": "3.20.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "npm-package-arg": "^6.1.0", + "p-map": "^2.1.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/bootstrap": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.20.0.tgz", + "integrity": "sha512-Wylullx3uthKE7r4izo09qeRGL20Y5yONlQEjPCfnbxCC2Elu+QcPu4RC6kqKQ7b+g7pdC3OOgcHZjngrwr5XQ==", + "dev": true, + "requires": { + "@lerna/command": "3.18.5", + "@lerna/filter-options": "3.20.0", + "@lerna/has-npm-version": "3.16.5", + "@lerna/npm-install": "3.16.5", + "@lerna/package-graph": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.16.5", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/symlink-binary": "3.17.0", + "@lerna/symlink-dependencies": "3.17.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "get-port": "^4.2.0", + "multimatch": "^3.0.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0", + "p-waterfall": "^1.0.0", + "read-package-tree": "^5.1.6", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/changed": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.20.0.tgz", + "integrity": "sha512-+hzMFSldbRPulZ0vbKk6RD9f36gaH3Osjx34wrrZ62VB4pKmjyuS/rxVYkCA3viPLHoiIw2F8zHM5BdYoDSbjw==", + "dev": true, + "requires": { + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.18.5", + "@lerna/listable": "3.18.5", + "@lerna/output": "3.13.0" + } + }, + "@lerna/check-working-tree": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz", + "integrity": "sha512-xWjVBcuhvB8+UmCSb5tKVLB5OuzSpw96WEhS2uz6hkWVa/Euh1A0/HJwn2cemyK47wUrCQXtczBUiqnq9yX5VQ==", + "dev": true, + "requires": { + "@lerna/collect-uncommitted": "3.16.5", + "@lerna/describe-ref": "3.16.5", + "@lerna/validation-error": "3.13.0" + } + }, + "@lerna/child-process": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.16.5.tgz", + "integrity": "sha512-vdcI7mzei9ERRV4oO8Y1LHBZ3A5+ampRKg1wq5nutLsUA4mEBN6H7JqjWOMY9xZemv6+kATm2ofjJ3lW5TszQg==", + "dev": true, + "requires": { + "chalk": "^2.3.1", + "execa": "^1.0.0", + "strong-log-transformer": "^2.0.0" + } + }, + "@lerna/clean": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.20.0.tgz", + "integrity": "sha512-9ZdYrrjQvR5wNXmHfDsfjWjp0foOkCwKe3hrckTzkAeQA1ibyz5llGwz5e1AeFrV12e2/OLajVqYfe+qdkZUgg==", + "dev": true, + "requires": { + "@lerna/command": "3.18.5", + "@lerna/filter-options": "3.20.0", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/rimraf-dir": "3.16.5", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0", + "p-waterfall": "^1.0.0" + } + }, + "@lerna/cli": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.18.5.tgz", + "integrity": "sha512-erkbxkj9jfc89vVs/jBLY/fM0I80oLmJkFUV3Q3wk9J3miYhP14zgVEBsPZY68IZlEjT6T3Xlq2xO1AVaatHsA==", + "dev": true, + "requires": { + "@lerna/global-options": "3.13.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2", + "yargs": "^14.2.2" + } + }, + "@lerna/collect-uncommitted": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz", + "integrity": "sha512-ZgqnGwpDZiWyzIQVZtQaj9tRizsL4dUOhuOStWgTAw1EMe47cvAY2kL709DzxFhjr6JpJSjXV5rZEAeU3VE0Hg==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "chalk": "^2.3.1", + "figgy-pudding": "^3.5.1", + "npmlog": "^4.1.2" + } + }, + "@lerna/collect-updates": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.20.0.tgz", + "integrity": "sha512-qBTVT5g4fupVhBFuY4nI/3FSJtQVcDh7/gEPOpRxoXB/yCSnT38MFHXWl+y4einLciCjt/+0x6/4AG80fjay2Q==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/describe-ref": "3.16.5", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "slash": "^2.0.0" + } + }, + "@lerna/command": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.18.5.tgz", + "integrity": "sha512-36EnqR59yaTU4HrR1C9XDFti2jRx0BgpIUBeWn129LZZB8kAB3ov1/dJNa1KcNRKp91DncoKHLY99FZ6zTNpMQ==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/package-graph": "3.18.5", + "@lerna/project": "3.18.0", + "@lerna/validation-error": "3.13.0", + "@lerna/write-log-file": "3.13.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^1.0.0", + "is-ci": "^2.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/conventional-commits": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.18.5.tgz", + "integrity": "sha512-qcvXIEJ3qSgalxXnQ7Yxp5H9Ta5TVyai6vEor6AAEHc20WiO7UIdbLDCxBtiiHMdGdpH85dTYlsoYUwsCJu3HQ==", + "dev": true, + "requires": { + "@lerna/validation-error": "3.13.0", + "conventional-changelog-angular": "^5.0.3", + "conventional-changelog-core": "^3.1.6", + "conventional-recommended-bump": "^5.0.0", + "fs-extra": "^8.1.0", + "get-stream": "^4.0.0", + "lodash.template": "^4.5.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "pify": "^4.0.1", + "semver": "^6.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/create": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.18.5.tgz", + "integrity": "sha512-cHpjocbpKmLopCuZFI7cKEM3E/QY8y+yC7VtZ4FQRSaLU8D8i2xXtXmYaP1GOlVNavji0iwoXjuNpnRMInIr2g==", + "dev": true, + "requires": { + "@evocateur/pacote": "^9.6.3", + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.18.5", + "@lerna/npm-conf": "3.16.0", + "@lerna/validation-error": "3.13.0", + "camelcase": "^5.0.0", + "dedent": "^0.7.0", + "fs-extra": "^8.1.0", + "globby": "^9.2.0", + "init-package-json": "^1.10.3", + "npm-package-arg": "^6.1.0", + "p-reduce": "^1.0.0", + "pify": "^4.0.1", + "semver": "^6.2.0", + "slash": "^2.0.0", + "validate-npm-package-license": "^3.0.3", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/create-symlink": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.16.2.tgz", + "integrity": "sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw==", + "dev": true, + "requires": { + "@zkochan/cmd-shim": "^3.1.0", + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/describe-ref": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.16.5.tgz", + "integrity": "sha512-c01+4gUF0saOOtDBzbLMFOTJDHTKbDFNErEY6q6i9QaXuzy9LNN62z+Hw4acAAZuJQhrVWncVathcmkkjvSVGw==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "npmlog": "^4.1.2" + } + }, + "@lerna/diff": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.18.5.tgz", + "integrity": "sha512-u90lGs+B8DRA9Z/2xX4YaS3h9X6GbypmGV6ITzx9+1Ga12UWGTVlKaCXBgONMBjzJDzAQOK8qPTwLA57SeBLgA==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.18.5", + "@lerna/validation-error": "3.13.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/exec": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.20.0.tgz", + "integrity": "sha512-pS1mmC7kzV668rHLWuv31ClngqeXjeHC8kJuM+W2D6IpUVMGQHLcCTYLudFgQsuKGVpl0DGNYG+sjLhAPiiu6A==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.18.5", + "@lerna/filter-options": "3.20.0", + "@lerna/profiler": "3.20.0", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "p-map": "^2.1.0" + } + }, + "@lerna/filter-options": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.20.0.tgz", + "integrity": "sha512-bmcHtvxn7SIl/R9gpiNMVG7yjx7WyT0HSGw34YVZ9B+3xF/83N3r5Rgtjh4hheLZ+Q91Or0Jyu5O3Nr+AwZe2g==", + "dev": true, + "requires": { + "@lerna/collect-updates": "3.20.0", + "@lerna/filter-packages": "3.18.0", + "dedent": "^0.7.0", + "figgy-pudding": "^3.5.1", + "npmlog": "^4.1.2" + } + }, + "@lerna/filter-packages": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.18.0.tgz", + "integrity": "sha512-6/0pMM04bCHNATIOkouuYmPg6KH3VkPCIgTfQmdkPJTullERyEQfNUKikrefjxo1vHOoCACDpy65JYyKiAbdwQ==", + "dev": true, + "requires": { + "@lerna/validation-error": "3.13.0", + "multimatch": "^3.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/get-npm-exec-opts": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz", + "integrity": "sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/get-packed": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.16.0.tgz", + "integrity": "sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw==", + "dev": true, + "requires": { + "fs-extra": "^8.1.0", + "ssri": "^6.0.1", + "tar": "^4.4.8" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/github-client": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.16.5.tgz", + "integrity": "sha512-rHQdn8Dv/CJrO3VouOP66zAcJzrHsm+wFuZ4uGAai2At2NkgKH+tpNhQy2H1PSC0Ezj9LxvdaHYrUzULqVK5Hw==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@octokit/plugin-enterprise-rest": "^3.6.1", + "@octokit/rest": "^16.28.4", + "git-url-parse": "^11.1.2", + "npmlog": "^4.1.2" + } + }, + "@lerna/gitlab-client": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz", + "integrity": "sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q==", + "dev": true, + "requires": { + "node-fetch": "^2.5.0", + "npmlog": "^4.1.2", + "whatwg-url": "^7.0.0" + } + }, + "@lerna/global-options": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.13.0.tgz", + "integrity": "sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ==", + "dev": true + }, + "@lerna/has-npm-version": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz", + "integrity": "sha512-WL7LycR9bkftyqbYop5rEGJ9sRFIV55tSGmbN1HLrF9idwOCD7CLrT64t235t3t4O5gehDnwKI5h2U3oxTrF8Q==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/import": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.18.5.tgz", + "integrity": "sha512-PH0WVLEgp+ORyNKbGGwUcrueW89K3Iuk/DDCz8mFyG2IG09l/jOF0vzckEyGyz6PO5CMcz4TI1al/qnp3FrahQ==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.18.5", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/validation-error": "3.13.0", + "dedent": "^0.7.0", + "fs-extra": "^8.1.0", + "p-map-series": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/info": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-3.20.0.tgz", + "integrity": "sha512-Rsz+KQF9mczbGUbPTrtOed1N0C+cA08Qz0eX/oI+NNjvsryZIju/o7uedG4I3P55MBiAioNrJI88fHH3eTgYug==", + "dev": true, + "requires": { + "@lerna/command": "3.18.5", + "@lerna/output": "3.13.0", + "envinfo": "^7.3.1" + } + }, + "@lerna/init": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.18.5.tgz", + "integrity": "sha512-oCwipWrha98EcJAHm8AGd2YFFLNI7AW9AWi0/LbClj1+XY9ah+uifXIgYGfTk63LbgophDd8936ZEpHMxBsbAg==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/command": "3.18.5", + "fs-extra": "^8.1.0", + "p-map": "^2.1.0", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/link": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.18.5.tgz", + "integrity": "sha512-xTN3vktJpkT7Nqc3QkZRtHO4bT5NvuLMtKNIBDkks0HpGxC9PRyyqwOoCoh1yOGbrWIuDezhfMg3Qow+6I69IQ==", + "dev": true, + "requires": { + "@lerna/command": "3.18.5", + "@lerna/package-graph": "3.18.5", + "@lerna/symlink-dependencies": "3.17.0", + "p-map": "^2.1.0", + "slash": "^2.0.0" + } + }, + "@lerna/list": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.20.0.tgz", + "integrity": "sha512-fXTicPrfioVnRzknyPawmYIVkzDRBaQqk9spejS1S3O1DOidkihK0xxNkr8HCVC0L22w6f92g83qWDp2BYRUbg==", + "dev": true, + "requires": { + "@lerna/command": "3.18.5", + "@lerna/filter-options": "3.20.0", + "@lerna/listable": "3.18.5", + "@lerna/output": "3.13.0" + } + }, + "@lerna/listable": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.18.5.tgz", + "integrity": "sha512-Sdr3pVyaEv5A7ZkGGYR7zN+tTl2iDcinryBPvtuv20VJrXBE8wYcOks1edBTcOWsPjCE/rMP4bo1pseyk3UTsg==", + "dev": true, + "requires": { + "@lerna/query-graph": "3.18.5", + "chalk": "^2.3.1", + "columnify": "^1.5.4" + } + }, + "@lerna/log-packed": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.16.0.tgz", + "integrity": "sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ==", + "dev": true, + "requires": { + "byte-size": "^5.0.1", + "columnify": "^1.5.4", + "has-unicode": "^2.0.1", + "npmlog": "^4.1.2" + } + }, + "@lerna/npm-conf": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.16.0.tgz", + "integrity": "sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA==", + "dev": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^4.0.1" + } + }, + "@lerna/npm-dist-tag": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz", + "integrity": "sha512-xw0HDoIG6HreVsJND9/dGls1c+lf6vhu7yJoo56Sz5bvncTloYGLUppIfDHQr4ZvmPCK8rsh0euCVh2giPxzKQ==", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "@lerna/otplease": "3.18.5", + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/npm-install": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.16.5.tgz", + "integrity": "sha512-hfiKk8Eku6rB9uApqsalHHTHY+mOrrHeWEs+gtg7+meQZMTS3kzv4oVp5cBZigndQr3knTLjwthT/FX4KvseFg==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/get-npm-exec-opts": "3.13.0", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "signal-exit": "^3.0.2", + "write-pkg": "^3.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/npm-publish": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.18.5.tgz", + "integrity": "sha512-3etLT9+2L8JAx5F8uf7qp6iAtOLSMj+ZYWY6oUgozPi/uLqU0/gsMsEXh3F0+YVW33q0M61RpduBoAlOOZnaTg==", + "dev": true, + "requires": { + "@evocateur/libnpmpublish": "^1.2.2", + "@lerna/otplease": "3.18.5", + "@lerna/run-lifecycle": "3.16.2", + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "pify": "^4.0.1", + "read-package-json": "^2.0.13" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/npm-run-script": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz", + "integrity": "sha512-1asRi+LjmVn3pMjEdpqKJZFT/3ZNpb+VVeJMwrJaV/3DivdNg7XlPK9LTrORuKU4PSvhdEZvJmSlxCKyDpiXsQ==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "@lerna/get-npm-exec-opts": "3.13.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/otplease": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-3.18.5.tgz", + "integrity": "sha512-S+SldXAbcXTEDhzdxYLU0ZBKuYyURP/ND2/dK6IpKgLxQYh/z4ScljPDMyKymmEvgiEJmBsPZAAPfmNPEzxjog==", + "dev": true, + "requires": { + "@lerna/prompt": "3.18.5", + "figgy-pudding": "^3.5.1" + } + }, + "@lerna/output": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.13.0.tgz", + "integrity": "sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/pack-directory": { + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.16.4.tgz", + "integrity": "sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng==", + "dev": true, + "requires": { + "@lerna/get-packed": "3.16.0", + "@lerna/package": "3.16.0", + "@lerna/run-lifecycle": "3.16.2", + "figgy-pudding": "^3.5.1", + "npm-packlist": "^1.4.4", + "npmlog": "^4.1.2", + "tar": "^4.4.10", + "temp-write": "^3.4.0" + } + }, + "@lerna/package": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.16.0.tgz", + "integrity": "sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw==", + "dev": true, + "requires": { + "load-json-file": "^5.3.0", + "npm-package-arg": "^6.1.0", + "write-pkg": "^3.1.0" + }, + "dependencies": { + "load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "@lerna/package-graph": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.18.5.tgz", + "integrity": "sha512-8QDrR9T+dBegjeLr+n9WZTVxUYUhIUjUgZ0gvNxUBN8S1WB9r6H5Yk56/MVaB64tA3oGAN9IIxX6w0WvTfFudA==", + "dev": true, + "requires": { + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/validation-error": "3.13.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/prerelease-id-from-version": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz", + "integrity": "sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA==", + "dev": true, + "requires": { + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/profiler": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-3.20.0.tgz", + "integrity": "sha512-bh8hKxAlm6yu8WEOvbLENm42i2v9SsR4WbrCWSbsmOElx3foRnMlYk7NkGECa+U5c3K4C6GeBbwgqs54PP7Ljg==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2", + "upath": "^1.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/project": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.18.0.tgz", + "integrity": "sha512-+LDwvdAp0BurOAWmeHE3uuticsq9hNxBI0+FMHiIai8jrygpJGahaQrBYWpwbshbQyVLeQgx3+YJdW2TbEdFWA==", + "dev": true, + "requires": { + "@lerna/package": "3.16.0", + "@lerna/validation-error": "3.13.0", + "cosmiconfig": "^5.1.0", + "dedent": "^0.7.0", + "dot-prop": "^4.2.0", + "glob-parent": "^5.0.0", + "globby": "^9.2.0", + "load-json-file": "^5.3.0", + "npmlog": "^4.1.2", + "p-map": "^2.1.0", + "resolve-from": "^4.0.0", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "@lerna/prompt": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.18.5.tgz", + "integrity": "sha512-rkKj4nm1twSbBEb69+Em/2jAERK8htUuV8/xSjN0NPC+6UjzAwY52/x9n5cfmpa9lyKf/uItp7chCI7eDmNTKQ==", + "dev": true, + "requires": { + "inquirer": "^6.2.0", + "npmlog": "^4.1.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + } + } + }, + "@lerna/publish": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.20.2.tgz", + "integrity": "sha512-N7Y6PdhJ+tYQPdI1tZum8W25cDlTp4D6brvRacKZusweWexxaopbV8RprBaKexkEX/KIbncuADq7qjDBdQHzaA==", + "dev": true, + "requires": { + "@evocateur/libnpmaccess": "^3.1.2", + "@evocateur/npm-registry-fetch": "^4.0.0", + "@evocateur/pacote": "^9.6.3", + "@lerna/check-working-tree": "3.16.5", + "@lerna/child-process": "3.16.5", + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.18.5", + "@lerna/describe-ref": "3.16.5", + "@lerna/log-packed": "3.16.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/npm-dist-tag": "3.18.5", + "@lerna/npm-publish": "3.18.5", + "@lerna/otplease": "3.18.5", + "@lerna/output": "3.13.0", + "@lerna/pack-directory": "3.16.4", + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/prompt": "3.18.5", + "@lerna/pulse-till-done": "3.13.0", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "@lerna/version": "3.20.2", + "figgy-pudding": "^3.5.1", + "fs-extra": "^8.1.0", + "npm-package-arg": "^6.1.0", + "npmlog": "^4.1.2", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-pipe": "^1.2.0", + "semver": "^6.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/pulse-till-done": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz", + "integrity": "sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/query-graph": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-3.18.5.tgz", + "integrity": "sha512-50Lf4uuMpMWvJ306be3oQDHrWV42nai9gbIVByPBYJuVW8dT8O8pA3EzitNYBUdLL9/qEVbrR0ry1HD7EXwtRA==", + "dev": true, + "requires": { + "@lerna/package-graph": "3.18.5", + "figgy-pudding": "^3.5.1" + } + }, + "@lerna/resolve-symlink": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz", + "integrity": "sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ==", + "dev": true, + "requires": { + "fs-extra": "^8.1.0", + "npmlog": "^4.1.2", + "read-cmd-shim": "^1.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/rimraf-dir": { + "version": "3.16.5", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz", + "integrity": "sha512-bQlKmO0pXUsXoF8lOLknhyQjOZsCc0bosQDoX4lujBXSWxHVTg1VxURtWf2lUjz/ACsJVDfvHZbDm8kyBk5okA==", + "dev": true, + "requires": { + "@lerna/child-process": "3.16.5", + "npmlog": "^4.1.2", + "path-exists": "^3.0.0", + "rimraf": "^2.6.2" + } + }, + "@lerna/run": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.20.0.tgz", + "integrity": "sha512-9U3AqeaCeB7KsGS9oyKNp62s9vYoULg/B4cqXTKZkc+OKL6QOEjYHYVSBcMK9lUXrMjCjDIuDSX3PnTCPxQ2Dw==", + "dev": true, + "requires": { + "@lerna/command": "3.18.5", + "@lerna/filter-options": "3.20.0", + "@lerna/npm-run-script": "3.16.5", + "@lerna/output": "3.13.0", + "@lerna/profiler": "3.20.0", + "@lerna/run-topologically": "3.18.5", + "@lerna/timer": "3.13.0", + "@lerna/validation-error": "3.13.0", + "p-map": "^2.1.0" + } + }, + "@lerna/run-lifecycle": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz", + "integrity": "sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A==", + "dev": true, + "requires": { + "@lerna/npm-conf": "3.16.0", + "figgy-pudding": "^3.5.1", + "npm-lifecycle": "^3.1.2", + "npmlog": "^4.1.2" + } + }, + "@lerna/run-topologically": { + "version": "3.18.5", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-3.18.5.tgz", + "integrity": "sha512-6N1I+6wf4hLOnPW+XDZqwufyIQ6gqoPfHZFkfWlvTQ+Ue7CuF8qIVQ1Eddw5HKQMkxqN10thKOFfq/9NQZ4NUg==", + "dev": true, + "requires": { + "@lerna/query-graph": "3.18.5", + "figgy-pudding": "^3.5.1", + "p-queue": "^4.0.0" + } + }, + "@lerna/symlink-binary": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz", + "integrity": "sha512-RLpy9UY6+3nT5J+5jkM5MZyMmjNHxZIZvXLV+Q3MXrf7Eaa1hNqyynyj4RO95fxbS+EZc4XVSk25DGFQbcRNSQ==", + "dev": true, + "requires": { + "@lerna/create-symlink": "3.16.2", + "@lerna/package": "3.16.0", + "fs-extra": "^8.1.0", + "p-map": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/symlink-dependencies": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz", + "integrity": "sha512-KmjU5YT1bpt6coOmdFueTJ7DFJL4H1w5eF8yAQ2zsGNTtZ+i5SGFBWpb9AQaw168dydc3s4eu0W0Sirda+F59Q==", + "dev": true, + "requires": { + "@lerna/create-symlink": "3.16.2", + "@lerna/resolve-symlink": "3.16.0", + "@lerna/symlink-binary": "3.17.0", + "fs-extra": "^8.1.0", + "p-finally": "^1.0.0", + "p-map": "^2.1.0", + "p-map-series": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "@lerna/timer": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-3.13.0.tgz", + "integrity": "sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw==", + "dev": true + }, + "@lerna/validation-error": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.13.0.tgz", + "integrity": "sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/version": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.20.2.tgz", + "integrity": "sha512-ckBJMaBWc+xJen0cMyCE7W67QXLLrc0ELvigPIn8p609qkfNM0L0CF803MKxjVOldJAjw84b8ucNWZLvJagP/Q==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "3.16.5", + "@lerna/child-process": "3.16.5", + "@lerna/collect-updates": "3.20.0", + "@lerna/command": "3.18.5", + "@lerna/conventional-commits": "3.18.5", + "@lerna/github-client": "3.16.5", + "@lerna/gitlab-client": "3.15.0", + "@lerna/output": "3.13.0", + "@lerna/prerelease-id-from-version": "3.16.0", + "@lerna/prompt": "3.18.5", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.18.5", + "@lerna/validation-error": "3.13.0", + "chalk": "^2.3.1", + "dedent": "^0.7.0", + "load-json-file": "^5.3.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "p-map": "^2.1.0", + "p-pipe": "^1.2.0", + "p-reduce": "^1.0.0", + "p-waterfall": "^1.0.0", + "semver": "^6.2.0", + "slash": "^2.0.0", + "temp-write": "^3.4.0", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/write-log-file": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.13.0.tgz", + "integrity": "sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A==", + "dev": true, + "requires": { + "npmlog": "^4.1.2", + "write-file-atomic": "^2.3.0" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@octokit/endpoint": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.1.tgz", + "integrity": "sha512-nBFhRUb5YzVTCX/iAK1MgQ4uWo89Gu0TH00qQHoYRCsE12dWcG1OiLd7v2EIo2+tpUKPMOQ62QFy9hy9Vg2ULg==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "is-plain-object": "^3.0.0", + "universal-user-agent": "^4.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", + "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", + "dev": true, + "requires": { + "isobject": "^4.0.0" + } + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + } + } + }, + "@octokit/plugin-enterprise-rest": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz", + "integrity": "sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA==", + "dev": true + }, + "@octokit/request": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.3.1.tgz", + "integrity": "sha512-5/X0AL1ZgoU32fAepTfEoggFinO3rxsMLtzhlUX+RctLrusn/CApJuGFCd0v7GMFhF+8UiCsTTfsu7Fh1HnEJg==", + "dev": true, + "requires": { + "@octokit/endpoint": "^5.5.0", + "@octokit/request-error": "^1.0.1", + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "is-plain-object": "^3.0.0", + "node-fetch": "^2.3.0", + "once": "^1.4.0", + "universal-user-agent": "^4.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", + "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", + "dev": true, + "requires": { + "isobject": "^4.0.0" + } + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "dev": true + } + } + }, + "@octokit/request-error": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.0.tgz", + "integrity": "sha512-DNBhROBYjjV/I9n7A8kVkmQNkqFAMem90dSxqvPq57e2hBr7mNTX98y3R2zDpqMQHVRpBDjsvsfIGgBzy+4PAg==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "16.36.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.36.0.tgz", + "integrity": "sha512-zoZj7Ya4vWBK4fjTwK2Cnmu7XBB1p9ygSvTk2TthN6DVJXM4hQZQoAiknWFLJWSTix4dnA3vuHtjPZbExYoCZA==", + "dev": true, + "requires": { + "@octokit/request": "^5.2.0", + "@octokit/request-error": "^1.0.2", + "atob-lite": "^2.0.0", + "before-after-hook": "^2.0.0", + "btoa-lite": "^1.0.0", + "deprecation": "^2.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", + "universal-user-agent": "^4.0.0" + } + }, + "@octokit/types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.0.2.tgz", + "integrity": "sha512-StASIL2lgT3TRjxv17z9pAqbnI7HGu9DrJlg3sEBFfCLaMEqp+O3IQPUF6EZtQ4xkAu2ml6kMBBCtGxjvmtmuQ==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.6.tgz", + "integrity": "sha512-Jg1F+bmxcpENHP23sVKkNuU3uaxPnsBMW0cLjleiikFKomJQbsn0Cqk2yDvQArqzZN6ABfBkZ0To7pQ8sLdWDg==", + "dev": true + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "@zkochan/cmd-shim": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz", + "integrity": "sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg==", + "dev": true, + "requires": { + "is-windows": "^1.0.0", + "mkdirp-promise": "^5.0.1", + "mz": "^2.5.0" + } + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "~2.1.11", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + } + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.1.tgz", + "integrity": "sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", + "integrity": "sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", + "dev": true + }, + "autoprefixer": { + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz", + "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==", + "dev": true, + "requires": { + "browserslist": "^4.8.0", + "caniuse-lite": "^1.0.30001012", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.23", + "postcss-value-parser": "^4.0.2" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "dev": true + }, + "axios": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", + "dev": true, + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + } + } + }, + "axobject-query": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz", + "integrity": "sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-eslint": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", + "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } + } + }, + "babel-loader": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", + "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==", + "dev": true + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "bfj-node4": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", + "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "check-types": "^7.3.0", + "tryer": "^1.0.0" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" + } + }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "dev": true + }, + "byte-size": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz", + "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30001020", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001020.tgz", + "integrity": "sha512-KMZ0k2Xg+UiQemGBh+cFKnnFi/oEYZcuGWSb1B0gofoP89ZI/fmjYJ8J9lQb9OnSupdG6cHZSxn+LtFli2Q07w==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001020", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz", + "integrity": "sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "catharsis": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", + "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true, + "requires": { + "assertion-error": "^1.0.1", + "deep-eql": "^0.1.3", + "type-detect": "^1.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "check-types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", + "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "^1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==", + "dev": true + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "^1.0.0" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "^4.5.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-func": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", + "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + } + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz", + "integrity": "sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", + "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==", + "dev": true, + "requires": { + "conventional-changelog-writer": "^4.0.6", + "conventional-commits-parser": "^3.0.3", + "dateformat": "^3.0.0", + "get-pkg-repo": "^1.0.0", + "git-raw-commits": "2.0.0", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^2.0.3", + "lodash": "^4.2.1", + "normalize-package-data": "^2.3.5", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz", + "integrity": "sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz", + "integrity": "sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "conventional-commits-filter": "^2.0.2", + "dateformat": "^3.0.0", + "handlebars": "^4.4.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^5.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } + } + }, + "conventional-commits-filter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz", + "integrity": "sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz", + "integrity": "sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^5.0.0", + "split2": "^2.0.0", + "through2": "^3.0.0", + "trim-off-newlines": "^1.0.0" + }, + "dependencies": { + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + } + } + }, + "conventional-recommended-bump": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz", + "integrity": "sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.1.1", + "conventional-commits-filter": "^2.0.2", + "conventional-commits-parser": "^3.0.3", + "git-raw-commits": "2.0.0", + "git-semver-tags": "^2.0.3", + "meow": "^4.0.0", + "q": "^1.5.1" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + }, + "core-js-compat": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", + "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", + "dev": true, + "requires": { + "browserslist": "^4.8.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-what": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "csso": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.37" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==", + "dev": true + }, + "dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, + "deep-equal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", + "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.333", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.333.tgz", + "integrity": "sha512-7MJfCpa/tmhqYy2lZ1NEbkSxH7q3KiZiepiSs2ayTPAweAjdzGXotij+7OKPPb3OwJD2ZuBKPrA2HIuuSi6ahw==", + "dev": true + }, + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "enhanced-resolve": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "env-paths": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", + "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", + "dev": true + }, + "envinfo": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.5.0.tgz", + "integrity": "sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ==", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.2.tgz", + "integrity": "sha512-eO6vFm0JvqGzjWIQA6QVKjxpmELfhWbDUWHm1rPfIbn55mhKPiAa5xpLmQWJrNa629ZIeQ8ZvMAi13kvrjK6Mg==", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "requires": { + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "eslint-config-airbnb": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz", + "integrity": "sha512-m0q9fiMBzDAIbirlGnpJNWToIhdhJmXXnMG+IFflYzzod9231ZhtmGKegKg8E9T8F1YuVaDSU1FnCm5b9iXVhQ==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^11.3.0" + } + }, + "eslint-config-airbnb-base": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz", + "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==", + "dev": true, + "requires": { + "eslint-restricted-globals": "^0.1.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", + "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + } + }, + "eslint-module-utils": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", + "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.7.0.tgz", + "integrity": "sha512-HGYmpU9f/zJaQiKNQOVfHUh2oLWW3STBrCgH0sHTX1xtsxYlH1zjLh8FlQGEIdZSdTbUMaV36WaZ6ImXkenGxQ==", + "dev": true, + "requires": { + "builtin-modules": "^1.1.1", + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.1.1", + "has": "^1.0.1", + "lodash.cond": "^4.3.0", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz", + "integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==", + "dev": true, + "requires": { + "aria-query": "^0.7.0", + "array-includes": "^3.0.3", + "ast-types-flow": "0.0.7", + "axobject-query": "^0.1.0", + "damerau-levenshtein": "^1.0.0", + "emoji-regex": "^6.1.0", + "jsx-ast-utils": "^1.4.0" + } + }, + "eslint-plugin-react": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.3.0.tgz", + "integrity": "sha512-7L6QEOxm7XhcDoe+U9Qt7GJjU6KeQOX9jCLGE8EPGF6FQbwZ9LgcBzsjXIZv9oYvNQlvQZmLjJs76xEeWsI4QA==", + "dev": true, + "requires": { + "doctrine": "^2.0.0", + "has": "^1.0.1", + "jsx-ast-utils": "^2.0.0", + "prop-types": "^15.5.10" + }, + "dependencies": { + "jsx-ast-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", + "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" + } + } + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "dev": true + }, + "events": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" + }, + "dependencies": { + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "^0.1.0" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-text-webpack-plugin": { + "version": "4.0.0-beta.0", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz", + "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", + "dev": true, + "requires": { + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5", + "webpack-sources": "^1.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "requires": { + "is-property": "^1.0.2" + } + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-pkg-repo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", + "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "meow": "^3.3.0", + "normalize-package-data": "^2.3.0", + "parse-github-repo-url": "^1.3.0", + "through2": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + } + } + }, + "get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-raw-commits": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", + "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", + "dev": true, + "requires": { + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^4.0.0", + "split2": "^2.0.0", + "through2": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + } + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "requires": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "git-semver-tags": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz", + "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==", + "dev": true, + "requires": { + "meow": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "meow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist": "^1.1.3", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "git-up": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.1.tgz", + "integrity": "sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^5.0.0" + } + }, + "git-url-parse": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.1.2.tgz", + "integrity": "sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ==", + "dev": true, + "requires": { + "git-up": "^4.0.0" + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "requires": { + "ini": "^1.3.2" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "globule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz", + "integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "gzip-size": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", + "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "handlebars": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.2.tgz", + "integrity": "sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http-status-codes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", + "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==", + "dev": true + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "init-package-json": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", + "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", + "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", + "dev": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-ssh": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz", + "integrity": "sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==", + "dev": true, + "requires": { + "protocols": "^1.1.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", + "dev": true, + "requires": { + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + } + }, + "istanbul-instrumenter-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", + "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", + "dev": true, + "requires": { + "convert-source-map": "^1.5.0", + "istanbul-lib-instrument": "^1.7.3", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + }, + "js2xmlparser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.0.tgz", + "integrity": "sha512-WuNgdZOXVmBk5kUPMcTcVUpbGRzLfNkv7+7APq7WiDihpXVKrgxo6wwRpRl9OQeEBgKCVk9mR7RbzrnNWC8oBw==", + "dev": true, + "requires": { + "xmlcreate": "^2.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdoc": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.3.tgz", + "integrity": "sha512-Yf1ZKA3r9nvtMWHO1kEuMZTlHOF8uoQ0vyo5eH7SQy5YeIiHM+B0DgKnn+X6y6KDYZcF7G2SPkKF+JORCXWE/A==", + "dev": true, + "requires": { + "@babel/parser": "^7.4.4", + "bluebird": "^3.5.4", + "catharsis": "^0.8.11", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.0", + "klaw": "^3.0.0", + "markdown-it": "^8.4.2", + "markdown-it-anchor": "^5.0.2", + "marked": "^0.7.0", + "mkdirp": "^0.5.1", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.0.1", + "taffydb": "2.6.2", + "underscore": "~1.9.1" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json2yaml": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/json2yaml/-/json2yaml-1.1.0.tgz", + "integrity": "sha1-VBTZB/mBZYa4DFE+wuOusquBmmw=", + "dev": true, + "requires": { + "remedial": "1.x" + } + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", + "dev": true + }, + "karma": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^1.4.1", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^3.8.0", + "log4js": "^0.6.31", + "mime": "^1.3.4", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "1.7.3", + "source-map": "^0.5.3", + "tmp": "0.0.31", + "useragent": "^2.1.12" + }, + "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "karma-chai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", + "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=", + "dev": true + }, + "karma-chrome-launcher": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz", + "integrity": "sha1-IWh5xorATY1RQOmWGboEtZr9Rs8=", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.4.3.tgz", + "integrity": "sha1-O13/RmT6W41RlrmInj9hwforgNk=", + "dev": true, + "requires": { + "istanbul-api": "^1.3.1", + "minimatch": "^3.0.4" + } + }, + "karma-mocha": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", + "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "dev": true, + "requires": { + "minimist": "1.2.0" + } + }, + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", + "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "karma-spec-reporter": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz", + "integrity": "sha1-SDDccUihVcfXoYbmMjOaDYD63sM=", + "dev": true, + "requires": { + "colors": "^1.1.2" + } + }, + "karma-webpack": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-3.0.5.tgz", + "integrity": "sha512-nRudGJWstvVuA6Tbju9tyGUfXTtI1UXMXoRHVmM2/78D0q6s/Ye2IC157PKNDC15PWFGR0mVIRtWLAdcfsRJoA==", + "dev": true, + "requires": { + "async": "^2.0.0", + "babel-runtime": "^6.0.0", + "loader-utils": "^1.0.0", + "lodash": "^4.0.0", + "source-map": "^0.5.6", + "webpack-dev-middleware": "^2.0.6" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lerna": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.20.2.tgz", + "integrity": "sha512-bjdL7hPLpU3Y8CBnw/1ys3ynQMUjiK6l9iDWnEGwFtDy48Xh5JboR9ZJwmKGCz9A/sarVVIGwf1tlRNKUG9etA==", + "dev": true, + "requires": { + "@lerna/add": "3.20.0", + "@lerna/bootstrap": "3.20.0", + "@lerna/changed": "3.20.0", + "@lerna/clean": "3.20.0", + "@lerna/cli": "3.18.5", + "@lerna/create": "3.18.5", + "@lerna/diff": "3.18.5", + "@lerna/exec": "3.20.0", + "@lerna/import": "3.18.5", + "@lerna/info": "3.20.0", + "@lerna/init": "3.18.5", + "@lerna/link": "3.18.5", + "@lerna/list": "3.20.0", + "@lerna/publish": "3.20.2", + "@lerna/run": "3.20.0", + "@lerna/version": "3.20.2", + "import-local": "^2.0.0", + "npmlog": "^4.1.2" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.0.tgz", + "integrity": "sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "dev": true + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._basecreate": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" + } + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "~1.0.2", + "semver": "~4.3.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "loglevel": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", + "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", + "dev": true + }, + "loglevelnext": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", + "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", + "dev": true, + "requires": { + "es6-symbol": "^3.1.1", + "object.assign": "^4.1.0" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "macos-release": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", + "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "make-fetch-happen": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", + "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-it": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", + "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "markdown-it-anchor": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.2.5.tgz", + "integrity": "sha512-xLIjLQmtym3QpoY9llBgApknl7pxAcN3WDRc2d3rwpl+/YvDZHPmKscGs+L6E05xf2KrCXPBvosWt7MZukwSpQ==", + "dev": true + }, + "marked": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "dev": true + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "dev": true, + "requires": { + "mime-db": "1.43.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.5.tgz", + "integrity": "sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "dev": true, + "requires": { + "mkdirp": "*" + } + }, + "mocha": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", + "integrity": "sha1-0O9NMyEm2/GNDWQMmzgt1IvpdZQ=", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.0", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "debug": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", + "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "mocha-webpack": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/mocha-webpack/-/mocha-webpack-0.7.0.tgz", + "integrity": "sha1-065ax93PKc+UfosO7Xc/pCKODM4=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "fs-extra": "^0.30.0", + "glob-parent": "^2.0.0", + "interpret": "^1.0.1", + "invariant": "^2.2.0", + "is-glob": "^2.0.1", + "loader-utils": "^0.2.13", + "lodash": "^4.3.0", + "normalize-path": "^2.0.1", + "object-hash": "^1.1.2", + "webpack-info-plugin": "^0.1.0", + "webpack-sources": "^0.1.1", + "yargs": "^4.8.0" + }, + "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", + "dev": true, + "requires": { + "source-list-map": "~0.1.7", + "source-map": "~0.5.3" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + } + } + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "multimatch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", + "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", + "dev": true, + "requires": { + "array-differ": "^2.0.3", + "array-union": "^1.0.2", + "arrify": "^1.0.1", + "minimatch": "^3.0.4" + } + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "ncp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", + "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "dev": true + }, + "node-gyp": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.0.7.tgz", + "integrity": "sha512-K8aByl8OJD51V0VbUURTKsmdswkQQusIvlvmTyhHlIT1hBvaSxzdxpSle857XuXa7uc02UEZx9OR5aDxSWS5Qw==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.45", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", + "integrity": "sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "node-sass": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz", + "integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + } + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-lifecycle": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz", + "integrity": "sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A==", + "dev": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", + "dev": true, + "requires": { + "hosted-git-info": "^2.7.1", + "osenv": "^0.1.5", + "semver": "^5.6.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", + "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "octokit-pagination-methods": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", + "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "dev": true, + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + }, + "dependencies": { + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", + "dev": true, + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, + "p-queue": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz", + "integrity": "sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg==", + "dev": true, + "requires": { + "eventemitter3": "^3.1.0" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + } + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + }, + "dependencies": { + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "p-waterfall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz", + "integrity": "sha1-ftlLPOszMngjU69qrhGqn8I1uwA=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-github-repo-url": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", + "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.1.tgz", + "integrity": "sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "parse-url": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.1.tgz", + "integrity": "sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^3.3.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + } + } + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", + "dev": true + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "portfinder": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", + "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "^5.0.16" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "^5.0.5" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, + "prompt": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz", + "integrity": "sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=", + "dev": true, + "requires": { + "colors": "^1.1.2", + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.3.x", + "winston": "2.1.x" + } + }, + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "dev": true, + "requires": { + "read": "1" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "protocols": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz", + "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==", + "dev": true + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", + "dev": true + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", + "integrity": "sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-package-json": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz", + "integrity": "sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "dev": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "dev": true, + "requires": { + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", + "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remedial": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", + "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "requizzle": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "resolve": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", + "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "^1.3.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "sass-loader": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.0.1", + "neo-async": "^2.5.0", + "pify": "^4.0.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + } + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "split2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", + "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", + "dev": true, + "requires": { + "through2": "^2.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + } + }, + "style-loader": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", + "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + } + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", + "slice-ansi": "0.0.4", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "temp-write": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz", + "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "is-stream": "^1.1.0", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "terser": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz", + "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "transform-runtime": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/transform-runtime/-/transform-runtime-0.0.0.tgz", + "integrity": "sha1-5xTZtpIR3ZU3k51Q46pXiMRCuFw=", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "trim-off-newlines": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", + "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "uglify-js": { + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.5.tgz", + "integrity": "sha512-GFZ3EXRptKGvb/C1Sq6nO1iI7AGcjyqmIyOw0DrD0675e+NNbGO72xmMM2iEBdFbxaTLo70NbjM/Wy54uZIlsg==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.3", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", + "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } + } + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "umask": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "dev": true + }, + "underscore": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz", + "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-user-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz", + "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==", + "dev": true, + "requires": { + "os-name": "^3.1.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utile": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", + "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=", + "dev": true, + "requires": { + "async": "~0.9.0", + "deep-equal": "~0.2.1", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "1.0.x", + "rimraf": "2.x.x" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + } + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.41.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", + "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "dev": true + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz", + "integrity": "sha512-rwxyfecTAxoarCC9VlHlIpfQCmmJ/qWD5bpbjkof+7HrNhTNZIwZITxN6CdlYL2axGmwNUQ+tFgcSOiNXMf/sQ==", + "dev": true, + "requires": { + "acorn": "^5.3.0", + "bfj-node4": "^5.2.0", + "chalk": "^2.3.0", + "commander": "^2.13.0", + "ejs": "^2.5.7", + "express": "^4.16.2", + "filesize": "^3.5.11", + "gzip-size": "^4.1.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "opener": "^1.4.3", + "ws": "^4.0.0" + }, + "dependencies": { + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + } + } + }, + "webpack-cli": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", + "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz", + "integrity": "sha512-tj5LLD9r4tDuRIDa5Mu9lnY2qBBehAITv6A9irqXhw/HQquZgTx3BCd57zYbU2gMDnncA49ufK2qVQSbaKJwOw==", + "dev": true, + "requires": { + "loud-rejection": "^1.6.0", + "memory-fs": "~0.4.1", + "mime": "^2.1.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "url-join": "^2.0.2", + "webpack-log": "^1.0.1" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz", + "integrity": "sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.6", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.25", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.4.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "12.0.5" + }, + "dependencies": { + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-info-plugin": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/webpack-info-plugin/-/webpack-info-plugin-0.1.0.tgz", + "integrity": "sha1-3/56qI/LlsWcxFCXZCHq+YzbeQE=", + "dev": true, + "requires": { + "chalk": "^1.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "webpack-log": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", + "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "loglevelnext": "^1.0.1", + "uuid": "^3.1.0" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + }, + "windows-release": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", + "integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==", + "dev": true, + "requires": { + "execa": "^1.0.0" + } + }, + "winston": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz", + "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", + "dev": true, + "requires": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", + "dev": true + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "dependencies": { + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "write-pkg": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz", + "integrity": "sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==", + "dev": true, + "requires": { + "sort-keys": "^2.0.0", + "write-json-file": "^2.2.0" + }, + "dependencies": { + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "write-json-file": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", + "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.0.0" + } + } + } + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xmlcreate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.1.tgz", + "integrity": "sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA==", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + } + }, + "yargs": { + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.2.tgz", + "integrity": "sha512-/4ld+4VV5RnrynMhPZJ/ZpOCGSCeghMykZ3BhdFBDa9Wy/RH6uEGNWDJog+aUlq+9OM1CFTgtYRW5Is1Po9NOA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/packages/layout/src/grid-layout/border-helper.js b/packages/layout/src/grid-layout/border-helper.js index 37e3248a..99793b34 100644 --- a/packages/layout/src/grid-layout/border-helper.js +++ b/packages/layout/src/grid-layout/border-helper.js @@ -1,5 +1,5 @@ import { - TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW, + TOP, BOTTOM, LEFT, RIGHT, CENTER, COLUMN, ROW, VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS } from '../enums/constants'; @@ -16,13 +16,8 @@ const borderMap = (isFacet, showHeaders) => ({ }); const applySpecificBorder = (params) => { - const { type, borderWidth, borderStyle, cells, isFacet, color } = params; - if (!isFacet) { - cells.style(`border-${type}`, `${borderWidth}px ${borderStyle} ${color}`); - } else { - cells.style(`border-${type}-width`, `${borderWidth}px`); - cells.style(`border-${type}-style`, `${borderStyle}`); - } + const { type, borderWidth, borderStyle, cells, color } = params; + cells.style(`border-${type}`, `${borderWidth}px ${borderStyle} ${color}`); }; const specificBorderApplier = (params) => { @@ -32,10 +27,11 @@ const specificBorderApplier = (params) => { style, width } = borderInfo; + borderTypes.forEach((borderType) => { applySpecificBorder({ cells, - color: showBorders[borderType] ? color : BLANK_BORDERS, + color: showBorders[borderType] ? color : 'transparent', type: borderType, borderWidth: width, borderStyle: style, @@ -78,7 +74,7 @@ const borderApplier = (cells, borderInfo, name, isFacet) => { }), [LEFT]: () => specificBorderApplier({ borderTypes: [LEFT], - showBorders: showValueBorders, + showBorders: showRowBorders, cells, borderInfo, name, @@ -86,7 +82,7 @@ const borderApplier = (cells, borderInfo, name, isFacet) => { }), [RIGHT]: () => specificBorderApplier({ borderTypes: [RIGHT], - showBorders: showValueBorders, + showBorders: showRowBorders, cells, borderInfo, name, @@ -94,7 +90,7 @@ const borderApplier = (cells, borderInfo, name, isFacet) => { }), [`${CENTER}${LEFT}`]: () => specificBorderApplier({ borderTypes: [LEFT, TOP, BOTTOM], - showBorders: showValueBorders, + showBorders: showRowBorders, cells, borderInfo, name, @@ -102,7 +98,7 @@ const borderApplier = (cells, borderInfo, name, isFacet) => { }), [`${CENTER}${RIGHT}`]: () => specificBorderApplier({ borderTypes: [RIGHT, TOP, BOTTOM], - showBorders: showValueBorders, + showBorders: showRowBorders, cells, borderInfo, name, diff --git a/packages/muze-axis/src/color-axis/color-axis.js b/packages/muze-axis/src/color-axis/color-axis.js index f8acce47..a16e5854 100644 --- a/packages/muze-axis/src/color-axis/color-axis.js +++ b/packages/muze-axis/src/color-axis/color-axis.js @@ -4,8 +4,8 @@ * plots. */ import { getUniqueId, generateGetterSetters, rgbToHsv, defaultValue } from 'muze-utils'; -import { createScale, getScheme, getSchemeType } from '../scale-creator'; -import { CONTINOUS, DISCRETE, COLOR } from '../enums/constants'; +import { createScale, getScheme, getSchemeType, scaleMap } from '../scale-creator'; +import { CONTINOUS, DISCRETE, ORDINAL, COLOR } from '../enums/constants'; import { strategyGetter } from './color-strategy'; import { DEFAULT_CONFIG } from './defaults'; import { PROPS, getHslString, getActualHslColor } from './props'; @@ -127,6 +127,7 @@ export default class ColorAxis { const scale = this.scale(); const range = scale.range ? scale.range() : null; const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues()); + if (color) { if (typeof color === 'string') { const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\s*/); @@ -138,6 +139,27 @@ export default class ColorAxis { return [...this.config().value]; } + setRangeWithInterpolatedColors (scaleType, scaleInfo) { + const { domain: originalDomain, range: originalRange } = scaleInfo; + const originalDomainLen = originalDomain.length; + const originalRangeLen = originalRange.length; + + if (scaleType === ORDINAL && originalDomainLen > originalRangeLen) { + const newRange = []; + const newDomain = originalDomain.map((d, i) => i / originalDomainLen); + + this._linearScale = scaleMap.linear() + .range(this._config.range) + .domain(newDomain); + + for (let i = 0, len = originalDomainLen; i < len; i++) { + const rangeVal = (1 / len) * i; + newRange.push([...this._linearScale(rangeVal)]); + } + this.scale().range(newRange); + } + } + /** * * @@ -150,12 +172,16 @@ export default class ColorAxis { const scale = this.scale(); const range = scale.range ? scale.range() : null; const domainRangeFn = this._colorStrategy.domainRange(); + const scaleType = this._colorStrategy.scale; const scaleInfo = domainRangeFn(domain, this.config().stops, range); this.domain(scaleInfo.domain); scaleInfo.range && this.scale().range(scaleInfo.range); this.uniqueValues(scaleInfo.uniqueVals); this.scale().domain(scaleInfo.scaleDomain || this.domain()); + + // Interpolate colors using linear scale if domain exceeds range + this.setRangeWithInterpolatedColors(scaleType, scaleInfo); } return this; } diff --git a/packages/muze-axis/src/size-axis/size-axis.js b/packages/muze-axis/src/size-axis/size-axis.js index 8d46adb2..c83d83ae 100644 --- a/packages/muze-axis/src/size-axis/size-axis.js +++ b/packages/muze-axis/src/size-axis/size-axis.js @@ -109,7 +109,7 @@ export default class SizeAxis { const scale = this.scale(); const domain = this.domain() || [1, 1]; - if (!scale || domain[0] === domain[1]) { + if (!scale || domain[0] === domain[1] || domain.length === 1) { sizeVal = value; } else { return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues()); diff --git a/packages/muze-firebolt/src/actions/behavioural/generic.js b/packages/muze-firebolt/src/actions/behavioural/generic.js index 7f94b352..d0898510 100644 --- a/packages/muze-firebolt/src/actions/behavioural/generic.js +++ b/packages/muze-firebolt/src/actions/behavioural/generic.js @@ -2,20 +2,10 @@ import { isSimpleObject, DimensionSubtype, partition, - ReservedFields, - retrieveNearestGroupByReducers + ReservedFields } from 'muze-utils'; -import { getMergedSet, getSourceFields } from '../../helper'; - -export const getIdentifiersFromSet = (set, context, { fields }) => { - const data = [[]]; - - if (fields.length) { - data[0] = fields; - set.forEach(id => data.push(id)); - } - return data; -}; +import { getSourceFields } from '../../helper'; +import { EntryExitSet } from '../../entry-exit-set'; /** * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural @@ -44,22 +34,22 @@ export default class GenericBehaviour { const criteria = payload.criteria; const firebolt = this.firebolt; const formalName = this.constructor.formalName(); - const selectionSets = firebolt.getSelectionSets(formalName); + const selectionSet = firebolt.getSelectionSet(formalName); + const propInf = this.firebolt.getPropagationInf(); const { model: filteredDataModel, uids } = this.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf()); this._payload = payload; - selectionSets.forEach((selectionSet) => { - this.setSelectionSet(uids, selectionSet, { - filteredDataModel, - payload - }); - - selectionSet._volatile && this.propagationIdentifiers(selectionSet, payload); - this.entryExitSet(selectionSet, filteredDataModel, payload); + this.setSelectionSet(uids, selectionSet, { + filteredDataModel, + payload }); + if (!propInf.sourceId) { + this.propagationIdentifiers(selectionSet, payload); + } + this.entryExitSet(selectionSet, filteredDataModel, payload); } getAddSetFromCriteria (...params) { @@ -86,6 +76,8 @@ export default class GenericBehaviour { const { entrySet, exitSet, + mergedEnter, + mergedExit, completeSet } = selectionSet.getSets(); const propagationInf = this.firebolt.getPropagationInf(); @@ -95,11 +87,9 @@ export default class GenericBehaviour { this.getSetInfo('newEntry', entrySet[1], filteredDataModel)], exitSet: [this.getSetInfo('oldEntry', exitSet[0], filteredDataModel), this.getSetInfo('newExit', exitSet[1], filteredDataModel)], - mergedEnter: this.getSetInfo('mergedEnter', getMergedSet(entrySet), filteredDataModel, - selectionSet._fields), - mergedExit: this.getSetInfo('mergedExit', getMergedSet(exitSet), filteredDataModel, - selectionSet._fields), - completeSet: this.getSetInfo('complete', completeSet, filteredDataModel, selectionSet._fields), + mergedEnter: this.getSetInfo('mergedEnter', mergedEnter, filteredDataModel), + mergedExit: this.getSetInfo('mergedExit', mergedExit, filteredDataModel), + completeSet: this.getSetInfo('complete', completeSet, filteredDataModel), fields: getSourceFields(propagationInf, payload.criteria) }; @@ -108,31 +98,31 @@ export default class GenericBehaviour { return this._entryExitSet; } - getSetInfo (type, set, filteredDataModel, setFields) { - let model = null; + getSetInfo (type, set, filteredDataModel) { + const { sourceId } = this.firebolt.getPropagationInf(); const data = this.firebolt.data(); - if (type === 'mergedEnter') { - model = filteredDataModel || null; - } else if (type === 'mergedExit') { - if (filteredDataModel) { - const setKeys = new Set(set.map(d => d[0])); - model = data.select((fields, i) => setKeys.has(setFields.map(field => - (field === ReservedFields.ROW_ID ? i : fields[field].value))), { - saveChild: false - }); - } - model = filteredDataModel || null; - } - const aggFns = retrieveNearestGroupByReducers(model); - - return { + return new EntryExitSet({ uids: set, - length: set.length, - model, - fields: setFields, - aggFns - }; + filteredModel: (fullData) => { + let model = null; + if (type === 'complete') { + return fullData; + } else if (type === 'mergedEnter' && sourceId) { + model = filteredDataModel; + } else { + const uidMap = set.reduce((acc, v) => { + acc[v[0]] = 1; + return acc; + }, {}); + model = fullData.select(fields => fields[ReservedFields.ROW_ID] in uidMap, { + saveChild: false + }); + } + return model; + }, + data + }); } propagationIdentifiers (...params) { @@ -150,27 +140,24 @@ export default class GenericBehaviour { const [, otherFields] = partition(fields, (d => (fieldsConfig[d] ? fieldsConfig[d].def.subtype === DimensionSubtype.CATEGORICAL : d === ReservedFields.MEASURE_NAMES))); - const allFields = selectionSet._fields.filter(d => d === ReservedFields.ROW_ID || - fieldsConfig[d].def.subtype === - DimensionSubtype.CATEGORICAL - ); - const { mergedEnter } = selectionSet.getSets({ keepDims: true, dimensions: allFields }); + const allFields = fields.filter(d => d === ReservedFields.ROW_ID || + fieldsConfig[d] && fieldsConfig[d].def.subtype === DimensionSubtype.CATEGORICAL); + const { mergedEnter } = selectionSet.getSets({ keepDims: true, fields: allFields }); propData = { fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : { name: d })), range: this.firebolt.getRangeFromIdentifiers({ criteria, - entrySet: mergedEnter, + entrySet: selectionSet.getSets().mergedEnter, fields: otherFields }), identifiers: [[...allFields, ReservedFields.MEASURE_NAMES], ...mergedEnter] }; } else { - const { mergedEnter } = selectionSet.getSets({ keepDims: true, - dimensions: propagationFields }); const fields = propagationFields ? [...propagationFields, ReservedFields.MEASURE_NAMES] : criteria[0]; + const { mergedEnter } = selectionSet.getSets({ keepDims: true, fields }); propData = { fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : { diff --git a/packages/muze-firebolt/src/actions/behavioural/persistent.js b/packages/muze-firebolt/src/actions/behavioural/persistent.js index 340ce814..f0badade 100644 --- a/packages/muze-firebolt/src/actions/behavioural/persistent.js +++ b/packages/muze-firebolt/src/actions/behavioural/persistent.js @@ -13,7 +13,7 @@ export default class PersistentBehaviour extends GenericBehaviour { || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY); if (propagationInf.sourceId) { selectionSet.updateExit(); - const { entrySet } = selectionSet.getSets({ keepDims: true }); + const { entrySet } = selectionSet.getSets({ keys: true }); selectionSet.reset(getMergedSet(entrySet)); selectionSet.add(addSet); selectionSet.update(existingAddSet); diff --git a/packages/muze-firebolt/src/actions/behavioural/select.js b/packages/muze-firebolt/src/actions/behavioural/select.js index ea173a25..9951b4a1 100644 --- a/packages/muze-firebolt/src/actions/behavioural/select.js +++ b/packages/muze-firebolt/src/actions/behavioural/select.js @@ -18,7 +18,7 @@ export default class SelectBehaviour extends PersistentBehaviour { || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY); if (propagationInf.sourceId) { selectionSet.updateExit(); - const { entrySet } = selectionSet.getSets({ keepDims: true }); + const { entrySet } = selectionSet.getSets(); selectionSet.reset(getMergedSet(entrySet)); selectionSet.add(addSet); selectionSet.update(existingAddSet); @@ -31,7 +31,7 @@ export default class SelectBehaviour extends PersistentBehaviour { selectionSet.updateEntry(); selectionSet.add(addSet); } - const { exitSet } = selectionSet.getSets({ keepDims: true }); + const { exitSet } = selectionSet.getSets({ keys: true }); const mergedExitSet = getMergedSet(exitSet); const completeSetCount = selectionSet.getCompleteSet().length; if (mergedExitSet.length === completeSetCount) { diff --git a/packages/muze-firebolt/src/actions/behavioural/volatile.js b/packages/muze-firebolt/src/actions/behavioural/volatile.js index 02532ed9..05d07315 100644 --- a/packages/muze-firebolt/src/actions/behavioural/volatile.js +++ b/packages/muze-firebolt/src/actions/behavioural/volatile.js @@ -11,7 +11,7 @@ export default class VolatileBehaviour extends GenericBehaviour { const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY); selectionSet.updateExit(); - const { entrySet } = selectionSet.getSets({ keepDims: true }); + const { entrySet } = selectionSet.getSets({ keys: true }); selectionSet.reset(getMergedSet(entrySet)); selectionSet.add(addSet); selectionSet.update(existingAddSet); diff --git a/packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js b/packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js index ed12b0f5..383cd4c4 100644 --- a/packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js +++ b/packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js @@ -14,6 +14,7 @@ const dragCriteriaRetriever = { const dimensions = {}; dimensions.x = [startPos.x, endPos.x]; dimensions.y = [startPos.y, endPos.y]; + return { criteria: ranges, dimensions diff --git a/packages/muze-firebolt/src/actions/physical/helpers/drag-event.js b/packages/muze-firebolt/src/actions/physical/helpers/drag-event.js index 618ffe13..1aefc044 100644 --- a/packages/muze-firebolt/src/actions/physical/helpers/drag-event.js +++ b/packages/muze-firebolt/src/actions/physical/helpers/drag-event.js @@ -86,6 +86,7 @@ export const attachDragEvent = (targetEl, action, firebolt, touch) => { endPos }); payload.dragEnd = true; + payload.hideSelBox = true; firebolt.triggerPhysicalAction(action, payload); })); }; diff --git a/packages/muze-firebolt/src/actions/physical/hover.js b/packages/muze-firebolt/src/actions/physical/hover.js index 5628c302..97ccf6be 100644 --- a/packages/muze-firebolt/src/actions/physical/hover.js +++ b/packages/muze-firebolt/src/actions/physical/hover.js @@ -27,7 +27,7 @@ import * as ACTION_NAMES from '../../enums/actions'; position: pos, mode }; - + // console.log('payload', payload.criteria); firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, payload); event.stopPropagation(); }; diff --git a/packages/muze-firebolt/src/actions/physical/index.js b/packages/muze-firebolt/src/actions/physical/index.js index cf2644f3..b448886c 100644 --- a/packages/muze-firebolt/src/actions/physical/index.js +++ b/packages/muze-firebolt/src/actions/physical/index.js @@ -2,6 +2,7 @@ import drag from './drag'; import hover from './hover'; import { longtouch } from './longtouch'; import { touchdrag } from './touch-drag'; +import { selectionBoxDrag } from './selection-box-drag'; import * as ACTION_NAMES from '../../enums/actions'; import click from './click'; @@ -10,6 +11,7 @@ export const physicalActions = { [ACTION_NAMES.HOVER]: hover, [ACTION_NAMES.CLICK]: click, [ACTION_NAMES.LONGTOUCH]: longtouch, - [ACTION_NAMES.TOUCHDRAG]: touchdrag + [ACTION_NAMES.TOUCHDRAG]: touchdrag, + [ACTION_NAMES.SELECTIONDRAG]: selectionBoxDrag }; diff --git a/packages/muze-firebolt/src/behaviour-effect-map.js b/packages/muze-firebolt/src/behaviour-effect-map.js index 9fbaccf5..0ea19c91 100644 --- a/packages/muze-firebolt/src/behaviour-effect-map.js +++ b/packages/muze-firebolt/src/behaviour-effect-map.js @@ -1,7 +1,6 @@ -import { intersect } from 'muze-utils'; +import { intersect, getObjProp } from 'muze-utils'; import * as BEHAVIOURS from './enums/behaviours'; import * as SIDE_EFFECTS from './enums/side-effects'; -import { unionSets } from './helper'; const nullDataTooltipMap = { area: true, @@ -59,12 +58,20 @@ export const behaviourEffectMap = { const selectEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.SELECT); const brushEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.BRUSH); if (selectEntrySet || brushEntrySet) { - const unionedSet = unionSets(sideEffect.firebolt, [BEHAVIOURS.SELECT, BEHAVIOURS.BRUSH]); - const { uids } = unionedSet.mergedEnter; + let uids = []; + let returnEntrySet = null; + if (getObjProp(selectEntrySet, 'mergedEnter', 'uids', 'length')) { + uids = selectEntrySet.mergedEnter.uids; + returnEntrySet = selectEntrySet; + } else if (getObjProp(brushEntrySet, 'mergedEnter', 'uids', 'length')) { + uids = brushEntrySet.mergedEnter.uids; + returnEntrySet = brushEntrySet; + } + const { uids: highlightUids } = selectionSet.mergedEnter; if (intersect(uids, highlightUids, [id => id[0], id => id[0]]).length) { - return unionedSet; + return returnEntrySet; } } diff --git a/packages/muze-firebolt/src/entry-exit-set.js b/packages/muze-firebolt/src/entry-exit-set.js new file mode 100644 index 00000000..2a9ec684 --- /dev/null +++ b/packages/muze-firebolt/src/entry-exit-set.js @@ -0,0 +1,29 @@ +import { retrieveNearestGroupByReducers } from 'muze-utils'; + +export class EntryExitSet { + constructor ({ uids, data, filteredModel }) { + this._uids = uids; + this._data = data; + this._filteredModel = filteredModel; + this._model = null; + } + + get uids () { + return this._uids; + } + + get model () { + if (!this._model) { + this._model = this._filteredModel(this._data); + } + return this._model; + } + + get length () { + return this._uids.length; + } + + get aggFns () { + return retrieveNearestGroupByReducers(this._model); + } +} diff --git a/packages/muze-firebolt/src/firebolt.js b/packages/muze-firebolt/src/firebolt.js index e6c69db2..ee910e78 100644 --- a/packages/muze-firebolt/src/firebolt.js +++ b/packages/muze-firebolt/src/firebolt.js @@ -15,11 +15,76 @@ import { initializeSideEffects, changeSideEffectAvailability, initializePhysicalActions, - unionSets, getSideEffects, setSideEffectConfig } from './helper'; +export const getUidsFromCriteria = (data, { dm, dimensionsMap, dimsMapGetter, addMeasures = true }) => { + const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), { + [ReservedFields.ROW_ID]: { + index: Object.keys(dm.getFieldsConfig()).length, + def: { + name: ReservedFields.ROW_ID, + type: FieldType.DIMENSION + } + } + }); + + if (data === null) { + return null; + } + + const criteriaFields = data[0]; + const fields = criteriaFields.length ? criteriaFields.map((d, i) => ({ + name: d, + index: i + })) : []; + + const fieldIndexMap = fields.reduce((acc, v, i) => { + acc[v.name] = i; + return acc; + }, {}); + + const uids = []; + const measureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES); + const propDims = fields.filter(d => d.name in fieldsConfig).map(d => d.name); + + const dimsMap = dimsMapGetter(propDims, fieldsConfig); + for (let i = 1, len = data.length; i < len; i++) { + const row = data[i]; + const dimKey = propDims.map(field => row[fieldIndexMap[field]]); + const origRow = dimsMap[dimKey]; + if (origRow) { + origRow.forEach((rowVal) => { + const rowId = rowVal[rowVal.length - 1]; + if (!measureNameField) { + const measuresArr = dimensionsMap[rowId].length ? dimensionsMap[rowId] : [[]]; + measuresArr.forEach((measures) => { + uids.push([rowId, ...(addMeasures ? measures : [])]); + }); + } else { + let measuresArr = row[fieldIndexMap[measureNameField]]; + + if (!measuresArr.length) { + measuresArr = dimensionsMap[rowId].length ? dimensionsMap[rowId] : []; + if (measuresArr.length) { + measuresArr.forEach((measures) => { + uids.push([rowId, measures]); + }); + } else { + uids.push([rowId]); + } + } else { + uids.push(measuresArr.length ? [rowId, measuresArr] : [rowId]); + } + } + }); + } + } + + return uids; +}; + const cloneObj = (behaviourEffectMap) => { const keys = Object.keys(behaviourEffectMap); @@ -40,29 +105,29 @@ const cloneObj = (behaviourEffectMap) => { const getKeysFromCriteria = (criteria, firebolt) => { if (criteria) { const data = firebolt.data(); - const { dimensionsMap, dimensions: dimArr } = firebolt._metaData; + const { dimensionsMap } = firebolt._metaData; let values = []; if (isSimpleObject(criteria)) { const dm = getDataModelFromRange(data, criteria); - const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), { - [ReservedFields.ROW_ID]: { - index: Object.keys(dm.getFieldsConfig()).length, - def: { - name: ReservedFields.ROW_ID, - type: FieldType.DIMENSION - } - } - }); dm.getData({ withUid: true }).data.forEach((row) => { - const dimKey = `${dimArr.map(d => row[fieldsConfig[d].index])}`; - const measures = criteria[ReservedFields.MEASURE_NAMES] || dimensionsMap[dimKey] || [[]]; - measures.forEach((measureArr) => { - values.push(`${[dimKey, ...measureArr]}`); - }); + const id = row[row.length - 1]; + const measures = criteria[ReservedFields.MEASURE_NAMES] || dimensionsMap[id] || []; + if (measures.length) { + measures.forEach((measureArr) => { + values.push(`${[id, ...measureArr]}`); + }); + } else { + values.push([id]); + } }); } else { - values = criteria.slice(1, criteria.length).map(d => `${d}`); + const dimsMapGetter = firebolt._dimsMapGetter; + values = getUidsFromCriteria(criteria, { + dm: firebolt.data(), + dimensionsMap, + dimsMapGetter + }); } return values; } @@ -178,7 +243,6 @@ export default class Firebolt { sideEffects.forEach((sideEffect) => { const effects = sideEffect.effects; const behaviours = sideEffect.behaviours; - let combinedSet = this.mergeSelectionSets(behaviours); effects.forEach((effect) => { let options = {}; let name; @@ -188,20 +252,16 @@ export default class Firebolt { } else { name = effect; } - const set = options.set; - if (set) { - combinedSet = this.mergeSelectionSets(set); - } const sideEffectInstance = sideEffectStore[name]; if (sideEffectInstance && sideEffectInstance.isEnabled()) { if (!sideEffectInstance.constructor.mutates() && Object.values(actionHistory).some(d => d.isMutableAction)) { queuedSideEffects[`${name}-${behaviours.join()}`] = { name, - params: [combinedSet, payload, options] + params: [selectionSet, payload, options] }; } else { - this.dispatchSideEffect(name, combinedSet, payload, options); + this.dispatchSideEffect(name, selectionSet, payload, options); } } }); @@ -222,8 +282,12 @@ export default class Firebolt { return this; } + shouldApplyHighlightEffect () { + return true; + } + dispatchBehaviour (behaviour, payload, propagationInfo = {}) { - payload = this.sanitizePayload(payload); + // payload = this.sanitizePayload(payload); const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true; const behaviouralActions = this._actions.behavioural; const action = behaviouralActions[behaviour]; @@ -236,17 +300,19 @@ export default class Firebolt { action.dispatch(payload); this._entryExitSet[behaviour] = action.entryExitSet(); const shouldApplySideEffects = this.shouldApplySideEffects(propagationInfo); + const shouldApplyHighlightEffect = this.shouldApplyHighlightEffect(behaviour); - if (propagate) { - this.propagate(behaviour, payload, action.propagationIdentifiers(), { sideEffects }); - } + if (shouldApplyHighlightEffect) { + if (propagate) { + this.propagate(behaviour, payload, action.propagationIdentifiers(), { sideEffects }); + } - if (shouldApplySideEffects) { - const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo); - this.applySideEffects(applicableSideEffects, this.getEntryExitSet(behaviour), payload); + if (shouldApplySideEffects) { + const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo); + this.applySideEffects(applicableSideEffects, this.getEntryExitSet(behaviour), payload); + } } } - return this; } @@ -494,19 +560,8 @@ export default class Firebolt { }; } - getSelectionSets (action) { - const sourceId = this.id(); - const propagationInf = this._propagationInf || {}; - const propagationSource = propagationInf.sourceId; - let applicableSelectionSets = []; - if (propagationSource !== sourceId) { - applicableSelectionSets = [this._volatileSelectionSet[action]]; - } - - if (propagationSource) { - applicableSelectionSets.push(this.selectionSet()[action]); - } - return applicableSelectionSets; + getSelectionSet (action) { + return this.selectionSet()[action]; } getFullData () { @@ -530,14 +585,14 @@ export default class Firebolt { return this._entryExitSet[behaviour]; } - mergeSelectionSets (behaviours) { - return unionSets(this, behaviours); - } - data () { return this.context.data(); } + currentData () { + return this.data(); + } + triggerPhysicalAction (event, payload) { const handlers = this._handlers[event] || []; const genericHandlers = this._handlers['*']; diff --git a/packages/muze-firebolt/src/helper/index.js b/packages/muze-firebolt/src/helper/index.js index bcdb0fda..2c04e67d 100644 --- a/packages/muze-firebolt/src/helper/index.js +++ b/packages/muze-firebolt/src/helper/index.js @@ -1,5 +1,3 @@ -import { clone, unique, intersect } from 'muze-utils'; - export const initializeSideEffects = (context, sideEffects) => { const sideEffectsMap = context._sideEffects; sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects); @@ -90,78 +88,3 @@ export const getSideEffects = (behaviour, behaviourEffectMap) => { return sideEffects; }; -export const unionSets = (firebolt, behaviours) => { - let combinedSet = null; - const models = { - mergedEnter: null, - mergedExit: null - }; - const uidSet = { - mergedEnter: [], - mergedExit: [] - }; - - behaviours.forEach((behaviour) => { - const entryExitSet = firebolt._entryExitSet[behaviour]; - if (entryExitSet) { - combinedSet = Object.assign(combinedSet || {}, clone(entryExitSet)); - ['mergedEnter', 'mergedExit'].forEach((type) => { - const { model, uids } = entryExitSet[type]; - let existingModel = models[type]; - - if (!existingModel) { - existingModel = models[type] = model; - uidSet[type] = uids; - } else if (`${model.getSchema().map(d => d.name).sort()}` === - `${existingModel.getSchema().map(d => d.name).sort()}`) { - uidSet[type] = unique([...uidSet[type], ...uids]); - models[type] = model.isEmpty() ? existingModel : existingModel.union(model); - } else { - existingModel = model; - uidSet[type] = uids; - } - combinedSet[type].uids = uidSet[type]; - combinedSet[type].model = models[type]; - }); - } - }); - - return combinedSet; -}; - -export const intersectSets = (firebolt, behaviours) => { - let combinedSet = null; - const models = { - mergedEnter: null, - mergedExit: null - }; - const uidSet = { - mergedEnter: [], - mergedExit: [] - }; - - behaviours.forEach((behaviour) => { - const entryExitSet = firebolt._entryExitSet[behaviour]; - if (entryExitSet) { - combinedSet = Object.assign(combinedSet || {}, clone(entryExitSet)); - ['mergedEnter', 'mergedExit'].forEach((type) => { - const { model, uids } = entryExitSet[type]; - let existingModel = models[type]; - - if (!existingModel) { - existingModel = models[type] = model; - uidSet[type] = uids; - } else if (`${model.getSchema().map(d => d.name).sort()}` === - `${existingModel.getSchema().map(d => d.name).sort()}`) { - const commonSet = intersect(uidSet[type], uids, [id => id[0], id => id[0]]); - uidSet[type] = [...commonSet]; - models[type] = model.isEmpty() ? existingModel : existingModel.union(model); - } - combinedSet[type].uids = unique(uidSet[type]); - combinedSet[type].model = models[type]; - }); - } - }); - - return combinedSet; -}; diff --git a/packages/muze-firebolt/src/selection-set/selection-set.js b/packages/muze-firebolt/src/selection-set/selection-set.js index 8601fbef..5450ea66 100644 --- a/packages/muze-firebolt/src/selection-set/selection-set.js +++ b/packages/muze-firebolt/src/selection-set/selection-set.js @@ -1,3 +1,4 @@ +import { ReservedFields } from 'muze-utils'; import { SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT } from '../enums/selection'; @@ -31,15 +32,13 @@ class SelectionSet { this._measureNames[key] = keys[key].measureNames; this._dimVals[key] = keys[key].dims; } - - this._volatile = _volatile; - this._completeSetCount = Object.keys(keys).length; - this._lockedSelection = {}; + this._fields = fields; this._fieldIndices = fields.reduce((acc, v, i) => { acc[v] = i; return acc; }, {}); - this._fields = fields; + this._volatile = _volatile; + this._completeSetCount = Object.keys(keys).length; this._resetted = true; } @@ -160,25 +159,26 @@ class SelectionSet { mergedExit: [], completeSet: [] }; - const measureNames = this._measureNames; const dimVals = this._dimVals; - const { keepDims = false, dimensions = this._fields } = config; - const fieldIndices = this._fieldIndices; + const { keepDims, fields = [], keys = false } = config; + const measureNames = this._measureNames; for (const key in set) { - let val; const measureNamesArr = measureNames[key] || []; - let dims = dimVals[key]; - + let val; if (keepDims) { - if (measureNamesArr.length) { - dims = dimensions.map(d => dims[fieldIndices[d]]); - val = dims.length ? [...dims, `${measureNamesArr}`] : [uidMap[key], `${measureNamesArr}`]; - } else { - val = dims.length ? [...dims] : [uidMap[key]]; - } + val = fields.map((field) => { + if (field === ReservedFields.MEASURE_NAMES) { + return measureNamesArr; + } else if (field === ReservedFields.ROW_ID) { + return uidMap[key]; + } + return dimVals[key][this._fieldIndices[field]]; + }); + } else if (keys) { + val = key; } else { - val = measureNamesArr.length ? [uidMap[key], measureNames[key], dims] : [uidMap[key]]; + val = measureNamesArr.length ? [uidMap[key], measureNamesArr] : [uidMap[key]]; } if (set[key] > 0) { @@ -275,35 +275,6 @@ class SelectionSet { return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT); } - /** - * Gets the set of ids which are added in the selection set. - * @return {Array.} Array of unique ids - */ - getOldEntry () { - const set = this._set; - const updateSet = []; - - for (const key in set) { - set[key] === SELECTION_OLD_ENTRY && updateSet.push(key); - } - return updateSet; - } - - /** - * Gets the set of ids which are added in the selection set. - * @return {Array.} Array of unique ids - */ - getOldExit () { - const set = this._set; - const updateSet = []; - - for (const key in set) { - set[key] === SELECTION_OLD_EXIT && updateSet.push(key); - } - - return updateSet; - } - /** * Gets the array of ids which are in the exit set. * @@ -344,62 +315,6 @@ class SelectionSet { resetted () { return this._resetted; } - - /** - * Swaps the add set and remove set in the selection set. - * @return {SelectionSet} Instance of selection set. - */ - toggle () { - const set = this._set; - - for (const key in set) { - if (set[key] === SELECTION_NEW_ENTRY) { - set[key] = SELECTION_NEW_EXIT; - } else if (set[key] === SELECTION_NEW_EXIT) { - set[key] = SELECTION_NEW_ENTRY; - } else if (set[key] === SELECTION_OLD_ENTRY) { - set[key] = SELECTION_OLD_EXIT; - } else { - set[key] = SELECTION_OLD_ENTRY; - } - } - - return this; - } - - getMergedEntrySet (raw) { - const set = this._set; - const mergedEnter = []; - const uidMap = this._uidMap; - const measureNames = this._measureNames; - const dimVals = this._dimVals; - - for (const key in set) { - const val = raw ? [...dimVals[key], `${measureNames[key]}`] : - [uidMap[key], measureNames[key]]; - if (set[key] === SELECTION_NEW_ENTRY || set[key] === SELECTION_OLD_ENTRY) { - mergedEnter.push(val); - } - } - return mergedEnter; - } - - getMergedExitSet (raw) { - const set = this._set; - const mergedExit = []; - const uidMap = this._uidMap; - const measureNames = this._measureNames; - const dimVals = this._dimVals; - - for (const key in set) { - const val = raw ? [...dimVals[key], `${measureNames[key]}`] : - [uidMap[key], measureNames[key]]; - if (set[key] === SELECTION_NEW_EXIT || set[key] === SELECTION_OLD_EXIT) { - mergedExit.push(val); - } - } - return mergedExit; - } } export default SelectionSet; diff --git a/packages/muze-firebolt/src/side-effects/axis-labels-highlighter/index.js b/packages/muze-firebolt/src/side-effects/axis-labels-highlighter/index.js index 8c1510c4..502e1bd9 100644 --- a/packages/muze-firebolt/src/side-effects/axis-labels-highlighter/index.js +++ b/packages/muze-firebolt/src/side-effects/axis-labels-highlighter/index.js @@ -1,6 +1,7 @@ import SurrogateSideEffect from '../surrogate'; import { AXIS_LABEL_HIGHLIGHTER } from '../../enums/side-effects'; import './styles.scss'; +import { shouldApplySideEffect } from '../helper'; export default class AxisLabelHighLighter extends SurrogateSideEffect { static formalName () { @@ -14,6 +15,9 @@ export default class AxisLabelHighLighter extends SurrogateSideEffect { apply (selectionSet) { const context = this.firebolt.context; const dataModel = selectionSet && selectionSet.mergedEnter.model; + if (!shouldApplySideEffect(dataModel, this)) { + return this; + } const selectedData = dataModel && dataModel.getData().data; const selectedDataValues = selectedData && selectedData.length ? selectedData[0] : []; const { x = [], y = [] } = context.axes(); @@ -25,5 +29,7 @@ export default class AxisLabelHighLighter extends SurrogateSideEffect { selectedElements && selectedElements.selectAll('text').classed('muze-axis-ticks-highlight', true); rejectionSet.selectAll('text').classed('muze-axis-ticks-highlight', false); }); + + return this; } } diff --git a/packages/muze-firebolt/src/side-effects/filter/index.js b/packages/muze-firebolt/src/side-effects/filter/index.js index 9cde643f..87914fab 100644 --- a/packages/muze-firebolt/src/side-effects/filter/index.js +++ b/packages/muze-firebolt/src/side-effects/filter/index.js @@ -6,7 +6,7 @@ export default class FilterEffect extends SurrogateSideEffect { } static target () { - return 'visual-unit'; + return 'all'; } static mutates () { @@ -14,12 +14,13 @@ export default class FilterEffect extends SurrogateSideEffect { } apply (selectionSet, payload) { - const context = this.firebolt.context; + const firebolt = this.firebolt; const entryModel = selectionSet.mergedEnter.model; + if (payload.criteria === null) { - context.clearCaching().resetData(); + firebolt.resetData(); } else { - context.enableCaching().data(entryModel); + firebolt.data(entryModel); } return this; } diff --git a/packages/muze-firebolt/src/side-effects/fragmented-tooltip/index.js b/packages/muze-firebolt/src/side-effects/fragmented-tooltip/index.js index 15e340b7..c15835fb 100644 --- a/packages/muze-firebolt/src/side-effects/fragmented-tooltip/index.js +++ b/packages/muze-firebolt/src/side-effects/fragmented-tooltip/index.js @@ -1,4 +1,4 @@ -import { FieldType } from 'muze-utils'; +import { FieldType, ReservedFields } from 'muze-utils'; import { spaceOutBoxes } from '../helper'; import { FRAGMENTED_TOOLTIP } from '../../enums/side-effects'; import Tooltip from '../tooltip'; @@ -30,9 +30,10 @@ export default class FragmentedTooltip extends Tooltip { const boxes = []; const uids = dataModel.getUids(); - dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, { - saveChild: false - }))); + dataModels.push(...uids.map(uid => dataModel.select(fieldsArr => + fieldsArr[ReservedFields.ROW_ID].value === uid, { + saveChild: false + }))); const enter = {}; for (let i = 0, len = dataModels.length; i < len; i++) { diff --git a/packages/muze-firebolt/src/side-effects/helper/index.js b/packages/muze-firebolt/src/side-effects/helper/index.js index 78453fed..771fc83c 100644 --- a/packages/muze-firebolt/src/side-effects/helper/index.js +++ b/packages/muze-firebolt/src/side-effects/helper/index.js @@ -1,3 +1,5 @@ +import { intersect } from 'muze-utils'; + export const spaceOutBoxes = (boxes, extent, showVertically) => { let y; let height; @@ -45,3 +47,14 @@ export const spaceOutBoxes = (boxes, extent, showVertically) => { } return boxes; }; + +export const shouldApplySideEffect = (dm, sideEffect) => { + const propagationInf = sideEffect.firebolt.getPropagationInf(); + if (propagationInf.sourceIdentifiers && dm) { + const { fields } = propagationInf.sourceIdentifiers; + const sourceDims = fields.filter(field => field.type === 'dimension').map(d => d.name); + const dims = Object.keys(dm.getFieldspace().getDimension()); + return intersect(sourceDims, dims).length; + } + return true; +}; diff --git a/packages/muze-firebolt/src/side-effects/plot-highlighter/helper.js b/packages/muze-firebolt/src/side-effects/plot-highlighter/helper.js index 21a2814d..b77821b8 100644 --- a/packages/muze-firebolt/src/side-effects/plot-highlighter/helper.js +++ b/packages/muze-firebolt/src/side-effects/plot-highlighter/helper.js @@ -1,5 +1,4 @@ import { difference, intersect } from 'muze-utils'; -import { intersectSets } from '../../helper'; /** * @private @@ -19,15 +18,3 @@ export const getFormattedSet = (set, selectedPointsId, intersection = false) => } }; }; - -export const highlightSelectIntersection = (firebolt) => { - const selectEntrySet = firebolt.getEntryExitSet('select'); - const highlightEntrySet = firebolt.getEntryExitSet('highlight'); - - if (selectEntrySet && highlightEntrySet) { - const intersectSet = intersectSets(firebolt, ['select', 'highlight']); - return intersectSet; - } - - return null; -}; diff --git a/packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js b/packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js index 62de19f4..a57f7b45 100644 --- a/packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js +++ b/packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js @@ -102,22 +102,22 @@ export const strategies = { context.applyInteractionStyle(mergedExit, { interactionType: 'focusStroke', apply: false }); context.applyInteractionStyle(entrySet, { interactionType: 'focusStroke', apply: true }); - const payload = firebolt.getPayload(BEHAVIOURS.HIGHLIGHT); + const payload = firebolt.getPayload(BEHAVIOURS.HIGHLIGHT) || {}; const entryExitSet = firebolt.getEntryExitSet(BEHAVIOURS.HIGHLIGHT); const layers = firebolt.context.layers(); - if (payload.target && entryExitSet) { - layers.forEach((layer) => { - const layerName = layer.constructor.formalName(); + layers.forEach((layer) => { + const layerName = layer.constructor.formalName(); - if (layerName === 'area') { - context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]); - context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]); - } else { - context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]); - context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false }, [layer]); - } + if (layerName === 'area') { + context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]); + context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]); + } else { + context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]); + context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false }, [layer]); + } + if (payload.target !== null && entryExitSet) { // get uids of only the currently highlighted point const actualPoint = layer.getUidsFromPayload(entryExitSet.mergedEnter, payload.target); @@ -135,8 +135,8 @@ export const strategies = { [layer] ); } - }); - } + } + }); } }, highlight: (set, context, payload, excludeSetIds) => { @@ -152,7 +152,7 @@ export const strategies = { const layers = context.firebolt.context.layers(); layers.forEach((layer) => { - if (payload.target) { + if (payload.target !== null) { // get uids of only the currently highlighted point const actualPoint = layer.getUidsFromPayload(selectionSet.mergedEnter, payload.target); // get uids of only the currently highlighted point excluding the excludeSet ids diff --git a/packages/muze-firebolt/src/side-effects/selection-box/index.js b/packages/muze-firebolt/src/side-effects/selection-box/index.js index 1b59295a..f665702f 100644 --- a/packages/muze-firebolt/src/side-effects/selection-box/index.js +++ b/packages/muze-firebolt/src/side-effects/selection-box/index.js @@ -4,6 +4,7 @@ import { makeElement, isValidValue } from 'muze-utils'; +import { SELECTIONDRAG } from '../../enums/actions'; import { CLASSPREFIX } from '../../enums/constants'; import './styles.scss'; import SpawnableSideEffect from '../spawnable'; @@ -71,7 +72,7 @@ class SelectionBox extends SpawnableSideEffect { height = unitHeight; // Hide selection-box on dragEnd or when criteria is empty - if (!payload.criteria || (payload.dragEnd && !config.persistent)) { + if (!payload.criteria || (payload.hideSelBox && !config.persistent)) { this.hide(drawingInf); return this; } @@ -105,8 +106,10 @@ class SelectionBox extends SpawnableSideEffect { const selection = selectionGroup.selectAll('rect').data(points); const selectionBox = selection.enter().append('rect') .each(function () { + // Add selectiondrag entry in firebolt._actionBehaviourMap firebolt.registerPhysicalBehaviouralMap({ - selectiondrag: { + [SELECTIONDRAG]: { + target: [selectElement(this)], behaviours: [BEHAVIOURS.BRUSH] } }); diff --git a/packages/muze-firebolt/src/side-effects/tooltip/index.js b/packages/muze-firebolt/src/side-effects/tooltip/index.js index 5b6e43bd..b31ad3b9 100644 --- a/packages/muze-firebolt/src/side-effects/tooltip/index.js +++ b/packages/muze-firebolt/src/side-effects/tooltip/index.js @@ -6,6 +6,7 @@ import SpawnableSideEffect from '../spawnable'; import './styles.scss'; import { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies'; +import { shouldApplySideEffect } from '../helper'; const configResolvers = { [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config), @@ -66,7 +67,9 @@ export default class Tooltip extends SpawnableSideEffect { apply (selectionSet, payload, options = {}) { const dataModel = selectionSet && selectionSet.mergedEnter.model; - + if (!shouldApplySideEffect(dataModel, this)) { + return this; + } if ((payload.criteria === null || (dataModel && dataModel.isEmpty())) || selectionSet === null) { this.hide(options, null); return this; @@ -109,20 +112,18 @@ export default class Tooltip extends SpawnableSideEffect { } getPlotPointsFromIdentifiers (payload) { - let target = payload.target; - let targetFields = []; - - if (target) { - targetFields = target[0] || []; - const sourceFields = payload.sourceFields; - const indices = []; - for (let i = 0, len = targetFields.length; i < len; i++) { - if (sourceFields.indexOf(targetFields[i]) !== -1) { - indices.push(i); - } - } - target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1)); - } + const target = payload.target; + // if (target) { + // targetFields = target[0] || []; + // const sourceFields = payload.sourceFields; + // const indices = []; + // for (let i = 0, len = targetFields.length; i < len; i++) { + // if (sourceFields.indexOf(targetFields[i]) !== -1) { + // indices.push(i); + // } + // } + // target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1)); + // } return super.plotPointsFromIdentifiers(target || payload.criteria, { getBBox: true diff --git a/packages/muze-firebolt/src/side-effects/tooltip/strategies.js b/packages/muze-firebolt/src/side-effects/tooltip/strategies.js index d3ae2116..66cbe195 100644 --- a/packages/muze-firebolt/src/side-effects/tooltip/strategies.js +++ b/packages/muze-firebolt/src/side-effects/tooltip/strategies.js @@ -348,11 +348,11 @@ export const buildTooltipData = (dataModel, config = {}, context) => { * @param {EntrySet} entrySet Entry set */ const getAggregatedValues = (dm, entrySet) => { - const fields = entrySet.fields; + // const fields = entrySet.fields; const aggFns = entrySet.aggFns; // Create a map of all the dimensions and the measures const dimsMap = entrySet.uids.reduce((acc, v) => { - const dims = v[2]; + const dims = v[0]; !acc[dims] && (acc[dims] = []); acc[dims].push(v[1]); @@ -362,10 +362,9 @@ const getAggregatedValues = (dm, entrySet) => { const aggregatedValues = {}; aggMeasures.forEach((measure) => { // Filter all the rows which has this measure and dimensions and apply aggregation. - const groupedDm = dm.select((dmFields, id) => { - const row = `${fields.map(field => (field === ReservedFields.ROW_ID ? id : - dmFields[field].internalValue))}`; - const measures = dimsMap[row]; + const groupedDm = dm.select((dmFields) => { + const id = dmFields[ReservedFields.ROW_ID]; + const measures = dimsMap[id]; if (measures) { return measures.find(arr => arr.indexOf(measure) !== -1); } diff --git a/packages/muze-legend/src/firebolt/behavioural/select.js b/packages/muze-legend/src/firebolt/behavioural/select.js index d71870d7..a2e65315 100644 --- a/packages/muze-legend/src/firebolt/behavioural/select.js +++ b/packages/muze-legend/src/firebolt/behavioural/select.js @@ -26,7 +26,7 @@ export default class SelectBehaviour extends PersistentBehaviour { selectionSet.updateExit(); selectionSet.remove(addSet); } - const { exitSet } = selectionSet.getSets(true); + const { exitSet } = selectionSet.getSets({ keys: true }); const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])]; const completeSetCount = selectionSet.getCompleteSet().length; if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) { diff --git a/packages/muze-legend/src/firebolt/legend-firebolt.js b/packages/muze-legend/src/firebolt/legend-firebolt.js index 72568eeb..a851b1c4 100644 --- a/packages/muze-legend/src/firebolt/legend-firebolt.js +++ b/packages/muze-legend/src/firebolt/legend-firebolt.js @@ -1,7 +1,7 @@ import { Firebolt } from '@chartshq/muze-firebolt'; import { propagate, payloadGenerator } from './helper'; import { STEP, GRADIENT } from '../enums/constants'; -import { HIGHLIGHT } from '../enums/behaviours'; +import { HIGHLIGHT, SELECT } from '../enums/behaviours'; /** * This class manages the interactions of legend. * @export @@ -93,4 +93,30 @@ export class LegendFireBolt extends Firebolt { shouldApplySideEffects () { return true; } + + /** + * Finds out if a deselected legend item is hovered + * @param {string} behaviour type of interaction + * @return {bool} true if highlight should work on the legend item, false otherwise + */ + shouldApplyHighlightEffect (behaviour) { + const highlightedSet = this.getEntryExitSet(HIGHLIGHT); + const selectionSet = this.getEntryExitSet(SELECT); + + if (highlightedSet && selectionSet) { + const currentHighlightedSet = highlightedSet.mergedEnter.uids; + const deselectedLegendItemsSet = selectionSet.mergedExit.uids; + + // Find out if the currently highlighted item is also the deselected item + if (behaviour === HIGHLIGHT) { + const disabledLegendItems = [].concat(...currentHighlightedSet).filter( + id => [].concat(...deselectedLegendItemsSet).includes(id) + ); + if (disabledLegendItems.length) { + return false; + } + } + } + return true; + } } diff --git a/packages/muze-legend/src/firebolt/side-effects/legend-marker/index.js b/packages/muze-legend/src/firebolt/side-effects/legend-marker/index.js index b6a2effb..0d43b717 100644 --- a/packages/muze-legend/src/firebolt/side-effects/legend-marker/index.js +++ b/packages/muze-legend/src/firebolt/side-effects/legend-marker/index.js @@ -63,8 +63,13 @@ export default class LegendMarker extends GenericSideEffect { const firebolt = this.firebolt; const labelManager = firebolt.context.labelManager; const context = firebolt.context; + const legendConfig = firebolt.context.config(); + const legendScale = firebolt.context.scale(); + const { formatter: pointerTextFormatter } = legendConfig.marker.text; const config = this.config(); const axis = context.axis().source(); + const dm = context.metaData(); + const domain = legendScale.domain(); const range = payload.criteria[0] ? axis.getScaleValue(payload.criteria[1]) : 0; @@ -128,7 +133,10 @@ export default class LegendMarker extends GenericSideEffect { .attr('d', getSymbol(shape).size(size * size)()) .classed(`${className}-show`, true) .classed(`${className}-hide`, false); - textElement.source(lableConfig.labelText); + + // pointer label formatter + textElement.source(pointerTextFormatter(lableConfig.labelText, domain, dm)); + textElement.render(this._graphicElements.legendmarkerText.node()); this._graphicElements.legendmarkerText .attr('style', `top: ${lableConfig.top}px; left:${lableConfig.left}px`) diff --git a/packages/muze-legend/src/firebolt/side-effects/selection-box/index.js b/packages/muze-legend/src/firebolt/side-effects/selection-box/index.js index 35d78c69..7110556f 100644 --- a/packages/muze-legend/src/firebolt/side-effects/selection-box/index.js +++ b/packages/muze-legend/src/firebolt/side-effects/selection-box/index.js @@ -69,13 +69,14 @@ import './styles.scss'; const legendSelGroup = makeElement(legendGradContainer, 'g', [1], `${config.classPrefix}-selection-box-group`); + const { size, BUFFER } = LEGEND_MARKER_PROPS; if (firebolt.context.config().align === HORIZONTAL) { x = range[0] - rangeShifter || 0; - y = LEGEND_MARKER_PROPS.size + 4; + y = size + BUFFER; width = range[1] - range[0] || 0; height = gradientDimension; } else { - x = LEGEND_MARKER_PROPS.size + 4; + x = size + BUFFER; y = range[1] - rangeShifter || 0; height = range[0] - range[1] || 0; width = gradientDimension; diff --git a/packages/muze-legend/src/legend/defaults.js b/packages/muze-legend/src/legend/defaults.js index 7315988b..f16f1392 100644 --- a/packages/muze-legend/src/legend/defaults.js +++ b/packages/muze-legend/src/legend/defaults.js @@ -45,6 +45,11 @@ export const DEFAULT_CONFIG = { upper: 'more than' } }, + marker: { + text: { + formatter: data => data + } + }, item: { text: { orientation: 'right', @@ -88,6 +93,7 @@ export const ICON_MAP = (icon) => { export const LEGEND_MARKER_PROPS = { size: 8, + BUFFER: 4, ROTATE_HORIZONTAL: 180, ROTATE_VERTICAL: 90, shape: 'triangle' diff --git a/packages/muze-legend/src/legend/gradient-helper.js b/packages/muze-legend/src/legend/gradient-helper.js index 21967f5b..8695451f 100644 --- a/packages/muze-legend/src/legend/gradient-helper.js +++ b/packages/muze-legend/src/legend/gradient-helper.js @@ -155,11 +155,14 @@ export const renderGradient = (context, container) => { gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border)); gradWidth = Math.floor(Math.min(width, maxWidth) - (margin * 2 + border * 2)); + const { size: markerSize, BUFFER } = LEGEND_MARKER_PROPS; + const markerWithBuffer = markerSize + BUFFER; + if (align === ALIGN.HORIZONTAL) { gradientDimensions.height = item.icon.height; gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2; linearGradient.attr('x2', '100%').attr('y1', '0%'); - legendGradCont.attr('transform', `translate( ${labelDim.width / 2} ${LEGEND_MARKER_PROPS.size + 4})`); + legendGradCont.attr('transform', `translate( ${labelDim.width / 2} ${markerWithBuffer})`); renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1); applyStyle(legendContainer, { @@ -174,8 +177,13 @@ export const renderGradient = (context, container) => { gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2; gradientDimensions.width = item.icon.width; linearGradient.attr('x2', '0%').attr('y1', '100%'); - legendGradCont.attr('transform', `translate(${LEGEND_MARKER_PROPS.size + 4} ${labelDim.height / 2})`); - renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2); + legendGradCont.attr('transform', `translate(${markerWithBuffer} ${labelDim.height / 2})`); + renderAxis( + context, + legendContainer, + gradHeight - 2 * padding - 1, + gradWidth - (gradientDimensions.width + markerWithBuffer) - padding * 2 + ); applyStyle(legendContainer, { height: `${Math.min(height, maxHeight)}px`, @@ -188,16 +196,16 @@ export const renderGradient = (context, container) => { // Apply Styles to the legend plot area applyStyle(legendGradSvg, { - height: `${gradientDimensions.height + LEGEND_MARKER_PROPS.size + 4}px`, - width: `${gradientDimensions.width + LEGEND_MARKER_PROPS.size + 4}px` + height: `${gradientDimensions.height + markerWithBuffer}px`, + width: `${gradientDimensions.width + markerWithBuffer}px` }); // Apply styles to the legend rect applyStyle(legendRect, { fill: `url(#linear-gradient-${context._id})` }); - legendGradSvg.attr('height', gradientDimensions.height + LEGEND_MARKER_PROPS.size + 4); - legendGradSvg.attr('width', gradientDimensions.width + LEGEND_MARKER_PROPS.size + 4); + legendGradSvg.attr('height', gradientDimensions.height + markerWithBuffer); + legendGradSvg.attr('width', gradientDimensions.width + markerWithBuffer); context.measurement({ gradientDimensions diff --git a/packages/muze-legend/src/legend/legend-helper.js b/packages/muze-legend/src/legend/legend-helper.js index 07ce55c8..a9879190 100644 --- a/packages/muze-legend/src/legend/legend-helper.js +++ b/packages/muze-legend/src/legend/legend-helper.js @@ -413,7 +413,6 @@ export const prepareSelectionSetData = (data, fieldName, dm) => { acc[d.rawVal] = { uid: d.id, dims: [d.rawVal] - }; return acc; }, {}), diff --git a/packages/muze-legend/src/legend/renderer.js b/packages/muze-legend/src/legend/renderer.js index 758b51c0..9fdf5130 100644 --- a/packages/muze-legend/src/legend/renderer.js +++ b/packages/muze-legend/src/legend/renderer.js @@ -292,7 +292,9 @@ export const renderDiscreteItem = (context, container) => { } = context.config(); const { maxIconWidth, - padding + padding, + margin, + border } = context.measurement(); const { width: iconWidth, @@ -300,6 +302,7 @@ export const renderDiscreteItem = (context, container) => { color, className } = item.icon; + const textOrientation = item.text.orientation; const formatter = item.text.formatter; @@ -312,7 +315,11 @@ export const renderDiscreteItem = (context, container) => { }); const marginHorizontalBuffer = HORIZONTAL_BUFFER; - const marginVerticalBuffer = textOrientation === TOP || textOrientation === BOTTOM ? 0 : VERTICAL_BUFFER; + + const bufferCondition = textOrientation === TOP || textOrientation === BOTTOM + || !padding || !margin || !border; + + const marginVerticalBuffer = bufferCondition ? 0 : VERTICAL_BUFFER; labelManager.setStyle(context._computedStyle); const dataArr = context.metaData(); diff --git a/packages/muze-legend/src/legend/simple-legend.js b/packages/muze-legend/src/legend/simple-legend.js index 7d00c002..6cc91988 100644 --- a/packages/muze-legend/src/legend/simple-legend.js +++ b/packages/muze-legend/src/legend/simple-legend.js @@ -346,16 +346,6 @@ export default class SimpleLegend { return [[fieldName], [data.rawVal]]; } - getValueFromId (id, fields = []) { - const data = this.data(); - if (fields.length) { - id = Number(id); - return [data.find(d => id === d.id).rawVal]; - } - - return []; - } - getRangeFromIdentifiers ({ fields, entrySet }) { const data = this.data(); const idRangeMap = data.reduce((acc, v) => { diff --git a/packages/muze-utils/package.json b/packages/muze-utils/package.json index 0a0dc868..40c398a1 100644 --- a/packages/muze-utils/package.json +++ b/packages/muze-utils/package.json @@ -56,7 +56,7 @@ "d3-time": "^1.0.11", "d3-transition": "^1.1.1", "d3-voronoi": "^1.1.2", - "datamodel": "^2.3.0", + "datamodel": "^2.3.1", "fusioncharts-smartlabel": "^1.0.2", "hyperdis": "^1.0.1" } diff --git a/packages/muze-utils/src/common-utils.js b/packages/muze-utils/src/common-utils.js index 9a11ebfd..8d3454fb 100644 --- a/packages/muze-utils/src/common-utils.js +++ b/packages/muze-utils/src/common-utils.js @@ -1381,7 +1381,7 @@ const nearestSortingDetails = (dataModel) => { }; const sortingOrder = (a, b) => { - const sortOrder = !(a instanceof InvalidAwareTypes || a instanceof InvalidAwareTypes) + const sortOrder = !(a instanceof InvalidAwareTypes || b instanceof InvalidAwareTypes) ? a.localeCompare(b) : 1; return sortOrder; @@ -1591,7 +1591,14 @@ const dmMultipleSelection = (targetData, dm) => { return filterFn; }; +const getIndexMap = (arr, prop) => arr.reduce((acc, v, i) => { + const key = prop ? v[prop] : v; + acc[key] = i; + return acc; +}, {}); + export { + getIndexMap, arraysEqual, componentRegistry, mix, diff --git a/packages/muze-utils/src/index.js b/packages/muze-utils/src/index.js index 3f463224..88cea90a 100644 --- a/packages/muze-utils/src/index.js +++ b/packages/muze-utils/src/index.js @@ -115,7 +115,8 @@ export { getReadableTicks, unique, dmMultipleSelection, - pointWithinCircle + pointWithinCircle, + getIndexMap } from './common-utils'; export { diff --git a/packages/muze/package.json b/packages/muze/package.json index b13dcb0a..114937a7 100644 --- a/packages/muze/package.json +++ b/packages/muze/package.json @@ -1,7 +1,7 @@ { "name": "muze", "private": true, - "version": "1.3.0", + "version": "1.3.1", "description": "Composable visualisation library for web with a data-first approach", "homepage": "https://muzejs.org", "author": "Muzejs.org (https://muzejs.org/)", diff --git a/packages/muze/src/border-applier.scss b/packages/muze/src/border-applier.scss index c315e9b3..b092ae67 100644 --- a/packages/muze/src/border-applier.scss +++ b/packages/muze/src/border-applier.scss @@ -1,53 +1,53 @@ @import "./prefix.scss"; .#{$prefix}grid-normal { - border-color: #ebebeb; + border-color: #ebebeb !important; .#{$prefix}axis-name{ - font-size: 12px; - line-height: 15px; + font-size: 12px !important; + line-height: 15px !important; } } .#{$prefix}grid-dark { - border-color: #cbcbcb; + border-color: #cbcbcb !important; .#{$prefix}axis-name{ - font-size: 12px; - line-height: 15px; + font-size: 12px !important; + line-height: 15px !important; } } .#{$prefix}grid-dark-bottom { - border-bottom-color:#cbcbcb; + border-bottom-color:#cbcbcb !important; } .#{$prefix}grid-darker-top { - border-top-color: #979797; + border-top-color: #979797 !important; } .#{$prefix}grid-dark-top { - border-top-color: #cbcbcb; + border-top-color: #cbcbcb !important; } .#{$prefix}grid-dark-right { - border-right-color: #cbcbcb; + border-right-color: #cbcbcb !important; } .#{$prefix}grid-darker-bottom { - border-bottom-color: #979797; + border-bottom-color: #979797 !important; } .#{$prefix}grid-dark-left { - border-left-color: #cbcbcb; + border-left-color: #cbcbcb !important; } .#{$prefix}grid-none-left { - border-left-color:transparent; + border-left-color:transparent !important; } .#{$prefix}grid-none-right { - border-right-color:transparent; + border-right-color:transparent !important; } .#{$prefix}grid-none-top { - border-top-color:transparent; + border-top-color:transparent !important; } .#{$prefix}grid-none-bottom { - border-bottom-color:transparent; + border-bottom-color:transparent !important; } diff --git a/packages/muze/src/canvas/firebolt/group-firebolt.js b/packages/muze/src/canvas/firebolt/group-firebolt.js index 8f8358fc..00abbe21 100644 --- a/packages/muze/src/canvas/firebolt/group-firebolt.js +++ b/packages/muze/src/canvas/firebolt/group-firebolt.js @@ -4,12 +4,11 @@ import { CommonProps, ReservedFields } from 'muze-utils'; -import { Firebolt, getSideEffects } from '@chartshq/muze-firebolt'; +import { Firebolt, getSideEffects, SpawnableSideEffect } from '@chartshq/muze-firebolt'; import { createMapByDimensions } from '@chartshq/visual-unit/src/firebolt/helper'; import { payloadGenerator, isSideEffectEnabled, - sanitizePayloadCriteria, prepareSelectionSetMap } from '@chartshq/visual-unit'; import { TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects'; @@ -18,7 +17,6 @@ import { applyInteractionPolicy } from '../helper'; import { propagateValues, isCrosstab, - addSelectedMeasuresInPayload, resetSelectAction, dispatchBehaviours, attachBehaviours @@ -64,53 +62,38 @@ const prepareSelectionSetData = (group, dataModel) => { const measureName = hasMeasures ? [ReservedFields.MEASURE_NAMES] : []; const keys = {}; const dimensionsMap = {}; - const unitDimsMap = {}; - - valueMatrix.each((cell) => { - const unit = cell.source(); - const dm = unit.data(); - const unitDims = dm.getSchema().filter(field => field.type === FieldType.DIMENSION).map(field => field.name); - const facetFields = Object.keys(unit.facetFieldsMap()); - - unitDimsMap[unitDims] = { - inst: unit, - dims: [...facetFields, ...unitDims] - }; - }); - const groupDataMap = {}; - dataModel.getData().data.forEach((row) => { - for (const key in unitDimsMap) { - const { dims } = unitDimsMap[key]; - const dimKey = dims.map(dim => row[fieldsConfig[dim].index]); - groupDataMap[dimKey] = row; - } + dataModel.getData({ withUid: true }).data.forEach((row) => { + const uid = row[row.length - 1]; + uid.values().reduce((acc, id) => { + acc[id] = row; + return acc; + }, groupDataMap); }); valueMatrix.each((cell) => { const unit = cell.source(); - const dm = unit.data(); + const dm = unit.cachedData()[0]; const layers = unit.layers(); - const unitDims = dm.getSchema().filter(field => field.type === FieldType.DIMENSION).map(field => field.name); - const facetMap = unit.facetFieldsMap(); - const facetFields = Object.keys(facetMap); - const unitFieldsConfig = dm.getFieldsConfig(); const linkedRows = []; + const { uids: uidsArr } = dm.getData(); + const uids = []; - dm.getData().data.forEach((row) => { - const dimKey = [...facetFields.map(field => facetMap[field]), ...unitDims.map(d => - row[unitFieldsConfig[d].index])]; - const linkedRow = groupDataMap[dimKey]; + uidsArr.forEach((uid) => { + const values = uid.values(); + const id = values.find(idValue => groupDataMap[idValue]); + const linkedRow = groupDataMap[id]; if (linkedRow) { linkedRows.push(linkedRow); + uids.push(linkedRow[linkedRow.length - 1]); } }); prepareSelectionSetMap({ data: linkedRows, - uids: dm.getUids(), + uids, dimensions }, layers, { keys, @@ -118,14 +101,11 @@ const prepareSelectionSetData = (group, dataModel) => { }); }); - const dimensionFields = dimensions.length ? [...dimensions.map(d => d.def.name)] : - [ReservedFields.ROW_ID]; - return { keys, dimensionsMap, - dimensions: dimensionFields, - allFields: [...dimensionFields, ...measureName] + dimensions, + allFields: [...dimensions, ...measureName] }; }; @@ -167,6 +147,21 @@ export default class GroupFireBolt extends Firebolt { this.payloadGenerators(payloadGenerator); this._interactionPolicy = this.constructor.defaultInteractionPolicy(); this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy()); + const throwback = this.context._throwback; + throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => { + this.config(this.context.config().interaction); + applyInteractionPolicy(this); + const group = this.context.composition().visualGroup; + if (group) { + setSideEffectConfig(this); + this.createSelectionSet(group.groupedData()); + group.getGroupByData().on('propagation', (data, config) => { + this.handleDataModelPropagation(data, config); + }); + // Dispatch pseudo select behaviour for highlighting measures with common dimensions in crosstab + attachBehaviours(group); + } + }); } static defaultInteractionPolicy () { @@ -187,34 +182,10 @@ export default class GroupFireBolt extends Firebolt { crossInteractionPolicy (...policy) { if (policy.length) { - const context = this.context; this._crossInteractionPolicy = mergeRecursive(mergeRecursive({}, this.constructor.defaultCrossInteractionPolicy()), policy[0] || {}); applyInteractionPolicy(this); - const throwback = context._throwback; - throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => { - this.config(this.context.config().interaction); - applyInteractionPolicy(this); - const group = this.context.composition().visualGroup; - if (group) { - setSideEffectConfig(this); - - const { keys, dimensions, dimensionsMap, allFields } = prepareSelectionSetData(group, - group.getGroupByData()); - this._metaData = { - dimensionsMap, - dimensions, - allFields - }; - this.createSelectionSet({ keys, fields: dimensions }); - group.getGroupByData().on('propagation', (data, config) => { - this.handleDataModelPropagation(data, config); - }); - // Dispatch pseudo select behaviour for highlighting measures with common dimensions in crosstab - attachBehaviours(group); - } - }); return this; } return this._crossInteractionPolicy; @@ -225,6 +196,9 @@ export default class GroupFireBolt extends Firebolt { const valueMatrix = group.matrixInstance().value; const units = group.resolver().units(); const propagationData = data; + if (config.propagationSourceId === this.id()) { + return this; + } // @todo refactor this code const { enabled: enabledFn, @@ -253,41 +227,18 @@ export default class GroupFireBolt extends Firebolt { } if (enabled) { + const { instance: unit = units[0][0] } = + valueMatrix.findPlaceHolderById(propPayload.sourceUnit) || {}; const propagationInf = { propagate: false, data: propagationData, propPayload, sourceIdentifiers, sourceId: config.propagationSourceId, - isMutableAction: config.isMutableAction + isMutableAction: config.isMutableAction, + unit }; - const behaviourEffectMap = this._behaviourEffectMap; - const sideEffects = getSideEffects(action, behaviourEffectMap); - const sideEffectInstances = this.sideEffects(); - const { instance: unit = units[0][0] } = - valueMatrix.findPlaceHolderById(propPayload.sourceUnit) || {}; - - sideEffects.forEach(({ effects }) => { - effects.forEach((effect) => { - const name = effect.name; - const inst = sideEffectInstances[name]; - - if (inst) { - inst.sourceInfo(() => unit.getSourceInfo()); - inst.layers(() => unit.layers()); - inst.plotPointsFromIdentifiers((...params) => - unit.getPlotPointsFromIdentifiers(...params)); - inst.drawingContext(() => unit.getDrawingContext()); - inst.valueParser(unit.valueParser()); - } - }); - }); - - if (propPayload.sourceUnit) { - addSelectedMeasuresInPayload(this, unit, payload); - } - this.dispatchBehaviour(action, payload, propagationInf); } @@ -341,22 +292,15 @@ export default class GroupFireBolt extends Firebolt { resetSelectAction(this, { behaviours, payload, unit }); } - sanitizePayload (payload) { - const { criteria } = payload; - const { allFields: fields, dimensionsMap } = this._metaData; - - return Object.assign({}, payload, - { - criteria: sanitizePayloadCriteria(criteria, fields, { - dm: this.data(), - dimensionsMap, - dimsMapGetter: this._dimsMapGetter - }) - }); - } - - createSelectionSet (...params) { - super.createSelectionSet(...params); + createSelectionSet (data) { + const group = this.context.composition().visualGroup; + const { keys, dimensions, dimensionsMap, allFields } = prepareSelectionSetData(group, data); + this._metaData = { + dimensionsMap, + dimensions, + allFields + }; + super.createSelectionSet({ keys, fields: dimensions.map(d => d.def.name) }); this._dimsMapGetter = createMapByDimensions(this, this.data()); @@ -371,8 +315,24 @@ export default class GroupFireBolt extends Firebolt { return propInf.applySideEffect !== false; } - data () { - return this.context.composition().visualGroup.getGroupByData(); + data (...params) { + const group = this.context.composition().visualGroup; + + if (params.length) { + const model = params[0]; + group.groupedData(model); + this.createSelectionSet(group.groupedData()); + return this; + } + + return group.getGroupByData(); + } + + resetData () { + const group = this.context.composition().visualGroup; + group.resetData(); + this.createSelectionSet(group.groupedData()); + return this; } getRangeFromIdentifiers ({ criteria, fields }) { @@ -394,7 +354,9 @@ export default class GroupFireBolt extends Firebolt { } getPropagationSource () { - return this.data(); + const group = this.context.composition().visualGroup; + + return group._originalGroupedData; } sourceCanvas () { @@ -422,4 +384,31 @@ export default class GroupFireBolt extends Firebolt { }); return sideEffects; } + + dispatchBehaviour (action, payload, propagationInf = {}) { + const group = this.context.composition().visualGroup; + const units = group.resolver().units(); + const { unit = units[0][0] } = propagationInf; + const behaviourEffectMap = this._behaviourEffectMap; + const sideEffects = getSideEffects(action, behaviourEffectMap); + const sideEffectInstances = this.sideEffects(); + + sideEffects.forEach(({ effects }) => { + effects.forEach((effect) => { + const name = effect.name; + const inst = sideEffectInstances[name]; + + if (inst) { + inst.sourceInfo(() => unit.getSourceInfo()); + inst.layers(() => unit.layers()); + inst.plotPointsFromIdentifiers((...params) => + unit.getPlotPointsFromIdentifiers(...params)); + inst instanceof SpawnableSideEffect && + inst.drawingContext(() => unit.getDrawingContext()); + inst.valueParser(unit.valueParser()); + } + }); + }); + super.dispatchBehaviour(action, payload, propagationInf); + } } diff --git a/packages/muze/src/canvas/firebolt/helper.js b/packages/muze/src/canvas/firebolt/helper.js index 1643a47e..c898995b 100644 --- a/packages/muze/src/canvas/firebolt/helper.js +++ b/packages/muze/src/canvas/firebolt/helper.js @@ -1,7 +1,6 @@ import { isSimpleObject, ReservedFields, FieldType } from 'muze-utils'; import { getSideEffects, BEHAVIOURS } from '@chartshq/muze-firebolt'; import { PSEUDO_SELECT } from '@chartshq/visual-unit/src/enums/behaviours'; -import { COMMON_INTERACTION } from '../../constants'; export const addFacetDataAndMeasureNames = (data, facetData, measureNames) => { if (data === null) { @@ -126,32 +125,25 @@ export const addSelectedMeasuresInPayload = (firebolt, unit, payload) => { }; export const dispatchBehaviours = (firebolt, { payload, unit, behaviours }) => { - const { interaction: { behaviours: behaviourConfs = {} } } = firebolt.context.config(); - const unitFirebolt = unit.firebolt(); - behaviours.forEach((action) => { - const mode = behaviourConfs[action]; - let targetFirebolt = unitFirebolt; - if (mode === COMMON_INTERACTION) { - targetFirebolt = firebolt; - } - - const actions = targetFirebolt._actions.behavioural; + const actions = firebolt._actions.behavioural; payload.criteria = addFacetDataAndMeasureNames(payload.criteria, unit.facetFieldsMap(), unit.layers().map(layer => Object.keys(layer.data().getFieldspace().getMeasure()))); - targetFirebolt.dispatchBehaviour(action, payload, { + addSelectedMeasuresInPayload(firebolt, unit, payload); + payload.sourceCanvas = firebolt.sourceCanvas(); + firebolt.dispatchBehaviour(action, payload, { propagate: false, - applySideEffect: false + unit }); const identifiers = actions[action].propagationIdentifiers(); firebolt.propagate(action, payload, identifiers, { - sideEffects: getSideEffects(action, targetFirebolt._behaviourEffectMap), + sideEffects: getSideEffects(action, firebolt._behaviourEffectMap), sourceUnitId: unit.id(), - sourceId: targetFirebolt.id(), - propagationDataSource: targetFirebolt.getPropagationSource() + sourceId: firebolt.id(), + propagationDataSource: firebolt.getPropagationSource() }); }); }; diff --git a/packages/muze/src/canvas/helper.js b/packages/muze/src/canvas/helper.js index ec352a01..3ec8466c 100644 --- a/packages/muze/src/canvas/helper.js +++ b/packages/muze/src/canvas/helper.js @@ -25,18 +25,14 @@ export const initCanvas = (context) => { export const fixFacetConfig = (config) => { if (config) { - let isBorderPresent = false; const isGridLinePresent = {}; - - if (config.border && config.border.width) { - isBorderPresent = true; - } - if (config.gridLines) { - isGridLinePresent.x = !!config.gridLines.x; - isGridLinePresent.y = !!config.gridLines.y; + const { border, gridLines } = config; + if (gridLines) { + isGridLinePresent.x = !!gridLines.x; + isGridLinePresent.y = !!gridLines.y; } const facetsUserConfig = { - isBorderPresent, + isBorderPresent: border || {}, isGridLinePresent }; return { @@ -52,6 +48,16 @@ export const fixScrollBarConfig = (config) => { return config; }; +export const excludeKeys = (config, keys) => { + const emptyValueKeyObject = {}; + keys.forEach((key) => { + if (config && config[key] && Object.keys(config[key]).length) { + emptyValueKeyObject[key] = {}; + } + }); + return emptyValueKeyObject; +}; + export const setLayoutInfForUnits = (context) => { const layoutManager = context._layoutManager; const gridLayout = layoutManager.getComponent(GRID); diff --git a/packages/muze/src/defaults.js b/packages/muze/src/defaults.js index 7ae6d803..bc3971f2 100644 --- a/packages/muze/src/defaults.js +++ b/packages/muze/src/defaults.js @@ -9,7 +9,8 @@ export const DEFAULT_CONFIG = { behaviours: { highlight: COMMON_INTERACTION, select: COMMON_INTERACTION, - brush: COMMON_INTERACTION + brush: COMMON_INTERACTION, + filter: COMMON_INTERACTION }, tooltip: { @@ -79,3 +80,5 @@ export const DEFAULT_CONFIG = { invalidValues: {}, sort: {} }; + +export const EXCLUDE_CONFIG_KEYS = ['sort']; diff --git a/packages/muze/src/legend-config.js b/packages/muze/src/legend-config.js index 1801c528..04f68f44 100644 --- a/packages/muze/src/legend-config.js +++ b/packages/muze/src/legend-config.js @@ -6,6 +6,9 @@ * * @param {boolean} show Whether to show or hide the legend. * @param {string} borderColor Border color of legend box. + * @param {Object} marker Legend marker configuration + * @param {Object} marker.text Legend marker text configuration. + * @param {string} marker.text.formatter Returns formatted marker text value. * @param {Object} item Legend item configuration * @param {Object} item.text Legend item text configuration. * @param {number} item.text.width Item text width. diff --git a/packages/muze/src/options.js b/packages/muze/src/options.js index 72ab751c..c9ac8923 100644 --- a/packages/muze/src/options.js +++ b/packages/muze/src/options.js @@ -15,8 +15,8 @@ */ import { intSanitizer, mergeRecursive, DataModel } from 'muze-utils'; -import { fixScrollBarConfig, fixFacetConfig } from './canvas/helper'; -import { DEFAULT_CONFIG } from './defaults'; +import { fixScrollBarConfig, fixFacetConfig, excludeKeys } from './canvas/helper'; +import { DEFAULT_CONFIG, EXCLUDE_CONFIG_KEYS } from './defaults'; export default { data: { @@ -70,6 +70,7 @@ export default { if (!reset) { oldConf = mergeRecursive({}, config === null ? {} : oldConfig); + oldConf = Object.assign(oldConf, excludeKeys(config, EXCLUDE_CONFIG_KEYS)); } const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG); diff --git a/packages/visual-group/src/encoder/cartesian-encoder.js b/packages/visual-group/src/encoder/cartesian-encoder.js index a23eb33a..317f828c 100644 --- a/packages/visual-group/src/encoder/cartesian-encoder.js +++ b/packages/visual-group/src/encoder/cartesian-encoder.js @@ -19,7 +19,7 @@ import { } from './encoder-helper'; import { retriveDomainFromData } from '../group-helper'; -import { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y } from '../enums/constants'; +import { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y, TEMPORAL } from '../enums/constants'; import VisualEncoder from './visual-encoder'; const CARTESIAN = COORD_TYPES.CARTESIAN; @@ -283,7 +283,14 @@ export default class CartesianEncoder extends VisualEncoder { const encodingObj = encoding[key]; const field = encodingObj.field; if (!encodingObj.domain && field) { - const domain = retriveDomainFromData(groupedModel, field); + let domain = retriveDomainFromData(groupedModel, field); + const fieldInstance = groupedModel.getFieldspace().fieldsObj()[field]; + const isTemporalField = fieldInstance.schema().subtype === TEMPORAL; + + if (isTemporalField) { + domain = fieldInstance.data(); + } + domains[field] = domain; } } diff --git a/packages/visual-group/src/group-helper/cell-creator.js b/packages/visual-group/src/group-helper/cell-creator.js index 390d6088..529b37f5 100644 --- a/packages/visual-group/src/group-helper/cell-creator.js +++ b/packages/visual-group/src/group-helper/cell-creator.js @@ -14,7 +14,8 @@ import { mutateAxesFromMap, getFieldsFromSuppliedLayers, extractFields, - removeExitCells + removeExitCells, + sanitizeCheck } from './group-utils'; import { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP, BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants'; @@ -556,8 +557,7 @@ export const computeMatrices = (resolverConfig) => { config } = resolverConfig; - const { rowFacets, colFacets, colProjections, rowProjections } = facetsAndProjections; - const isProjection = rowProjections.length > 0 || colProjections.length > 0; + const { rowFacets, colFacets } = facetsAndProjections; const isFacet = rowFacets.length > 0 || colFacets.length > 0; if (isFacet) { @@ -657,14 +657,16 @@ export const computeMatrices = (resolverConfig) => { resolver.rowMatrix(rows); resolver.columnMatrix(columns); - if (isFacet || isProjection) { - const arr = sanitiseBorderMatrix({ + + if (isFacet) { + const sanitizeCheckBorder = sanitizeCheck(globalConfig.facetsUserConfig); + const arr = sanitizeCheckBorder && sanitiseBorderMatrix({ leftMatrix: rows[0], rightMatrix: rows[1], topMatrix: columns[0], bottomMatrix: columns[1] }, registry.cells.BlankCell); - valueMatrixInfo.matrix = sanitiseGeomMatrix(valueMatrixInfo.matrix, arr); + valueMatrixInfo.matrix = sanitizeCheckBorder && sanitiseGeomMatrix(valueMatrixInfo.matrix, arr); } placeholderInfo = { diff --git a/packages/visual-group/src/group-helper/group-utils.js b/packages/visual-group/src/group-helper/group-utils.js index e14a860e..74795ea7 100644 --- a/packages/visual-group/src/group-helper/group-utils.js +++ b/packages/visual-group/src/group-helper/group-utils.js @@ -145,7 +145,7 @@ export const getHeaderText = (headers, index, rowLength) => { * @param {*} labelManager * */ -export const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => { +export const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager, sanitizeCheck }) => { const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({ type: HEADER, className: `${classPrefix}-grid-headers` @@ -153,10 +153,20 @@ export const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, lab labelManager }).source(getHeaderText(fieldHeaders, i, fields[0].length)) .config({ show: cell.config().show })) : []; - sanitiseHeaderMatrix(headers, true); + sanitizeCheck && sanitiseHeaderMatrix(headers, true); return headers; }; +/** + * @param {*} facetConfig + * + */ +export const sanitizeCheck = (facetConfig = {}) => { + const { isBorderPresent } = facetConfig; + const updateBorderMap = ['color', 'showRowBorders', 'showColBorders', 'showValueBorders']; + return (!isBorderPresent || updateBorderMap.every(d => !isBorderPresent[d])); +}; + /** * * @@ -348,22 +358,32 @@ export const setFacetsAndProjections = (context, fieldInfo, encoder) => { }; const getRowBorders = (left, right) => { - const borders = {}; - borders.top = false; - borders.bottom = false; + const borders = { + top: false, + bottom: false, + left: false, + right: false + }; if (left.length > 1 || right.length > 1) { borders.top = true; borders.bottom = true; + borders.left = true; + borders.right = true; } return borders; }; const getColumnsBorders = (top, bottom) => { - const borders = {}; - borders.left = false; - borders.right = false; + const borders = { + top: false, + bottom: false, + left: false, + right: false + }; if (top.length || bottom.length) { if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) { + borders.top = true; + borders.bottom = true; borders.left = true; borders.right = true; } @@ -394,8 +414,8 @@ const getValueBorders = (rows, columns) => { }; export const getBorders = (matrices, encoder) => { - let showRowBorders = { top: false, bottom: false }; - let showColBorders = { left: false, right: false }; + let showRowBorders = { top: false, bottom: false, left: false, right: false }; + let showColBorders = { top: false, bottom: false, left: false, right: false }; let showValueBorders = { top: false, bottom: false, left: false, right: false }; const { rows, diff --git a/packages/visual-group/src/group-helper/matrix-model.js b/packages/visual-group/src/group-helper/matrix-model.js index 3f8ffcab..67d21e08 100644 --- a/packages/visual-group/src/group-helper/matrix-model.js +++ b/packages/visual-group/src/group-helper/matrix-model.js @@ -101,15 +101,33 @@ const createJoinedKeys = keys => keys.map(e => ({ const setDefaultConfigForFacet = (facetInfo, projectionInfo, config) => { let conf = {}; - if (facetInfo.allFacets.length || projectionInfo.indices.length > 1) { - const { facetsUserConfig, border } = config; - const { isBorderPresent, isGridLinePresent } = facetsUserConfig; + if (config && (facetInfo.allFacets.length || projectionInfo.indices.length > 1)) { + const { facetsUserConfig = {}, border } = config; + const { isBorderPresent = {}, isGridLinePresent = {} } = facetsUserConfig; const gridLinesShowLength = Object.keys(isGridLinePresent).length; - let borderWidth = border.width; + const { + width: borderWidth, + color: borderColor, + style: borderStyle, + showValueBorders, + showRowBorders, + showColBorders + } = border; let gridLines = {}; + let borderConf = {}; - if (!isBorderPresent) { - borderWidth = BORDER_WIDTH[FACET]; + if (Object.keys(isBorderPresent).length === 0 || !(isBorderPresent.width)) { + borderConf = { + width: BORDER_WIDTH[FACET] + }; + } else { + Object.assign(borderConf, + borderWidth ? { width: borderWidth } : null, + borderColor ? { color: borderColor } : null, + showValueBorders ? { showValueBorders } : null, + showRowBorders ? { showRowBorders } : null, + showColBorders ? { showColBorders } : null, + borderStyle ? { style: borderStyle } : null); } if (gridLinesShowLength <= 0) { gridLines = { @@ -119,9 +137,7 @@ const setDefaultConfigForFacet = (facetInfo, projectionInfo, config) => { }; } conf = { - border: { - width: borderWidth - }, + border: borderConf, gridLines }; } diff --git a/packages/visual-group/src/group-helper/matrix-resolver.js b/packages/visual-group/src/group-helper/matrix-resolver.js index ab5f00a2..2628aa2f 100644 --- a/packages/visual-group/src/group-helper/matrix-resolver.js +++ b/packages/visual-group/src/group-helper/matrix-resolver.js @@ -3,7 +3,8 @@ import { initializeCacheMaps, headerCreator, extractUnitConfig, - setFacetsAndProjections + setFacetsAndProjections, + sanitizeCheck } from './group-utils'; import { ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED, @@ -415,13 +416,14 @@ export default class MatrixResolver { const rowHeaders = fieldNames.rows; const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show }); + const sanitizeCheckBorder = sanitizeCheck(config.facetsUserConfig); // Headers and footers are created based on the rows. Thereafter, using the column information // they are tabularized into the current structure const headers = { left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell, - { classPrefix, labelManager }), + { classPrefix, labelManager, sanitizeCheckBorder }), right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell, - { classPrefix, labelManager }) + { classPrefix, labelManager, sanitizeCheckBorder }) }; const footers = { left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [], diff --git a/packages/visual-group/src/visual-group/helper.js b/packages/visual-group/src/visual-group/helper.js index 49d2a3df..c8c13178 100644 --- a/packages/visual-group/src/visual-group/helper.js +++ b/packages/visual-group/src/visual-group/helper.js @@ -177,7 +177,7 @@ export const createMatrices = (context, sanitizedConfig) => { const placeholderInfo = resolver.getMatrices(resolverConfig); - context._groupedDataModel = placeholderInfo.dataModels.groupedModel; + context._originalGroupedData = context._groupedDataModel = placeholderInfo.dataModels.groupedModel; // Set the selection object context.selection(placeholderInfo.selection); diff --git a/packages/visual-group/src/visual-group/props.js b/packages/visual-group/src/visual-group/props.js index 404c11c3..655f58a1 100644 --- a/packages/visual-group/src/visual-group/props.js +++ b/packages/visual-group/src/visual-group/props.js @@ -2,7 +2,11 @@ import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } export const PROPS = { alias: {}, - data: {}, + data: { + preset: (context) => { + context._prevData = null; + } + }, cornerMatrices: { defaultValue: { topLeft: [], diff --git a/packages/visual-group/src/visual-group/visual-group.js b/packages/visual-group/src/visual-group/visual-group.js index 380478a4..b80141d0 100644 --- a/packages/visual-group/src/visual-group/visual-group.js +++ b/packages/visual-group/src/visual-group/visual-group.js @@ -72,6 +72,8 @@ class VisualGroup extends SimpleGroup { this._composition = {}; // store reference to data this._data = []; + this._prevData = null; + this._groupedDataModel = []; // store reference to mountpoint this._mount = null; // selection object that takes care of updating of components @@ -330,6 +332,23 @@ class VisualGroup extends SimpleGroup { return this; } + + groupedData (...params) { + if (params.length) { + this._groupedDataModel = params[0]; + return this; + } + return this.getGroupByData(); + } + + resetData () { + const oriData = this._originalGroupedData; + if (oriData) { + this._groupedDataModel = oriData; + } + + return this; + } } export default VisualGroup; diff --git a/packages/visual-layer/src/base-layer/base-mixin.js b/packages/visual-layer/src/base-layer/base-mixin.js index ec8cccac..432c9369 100644 --- a/packages/visual-layer/src/base-layer/base-mixin.js +++ b/packages/visual-layer/src/base-layer/base-mixin.js @@ -291,48 +291,46 @@ export const BaseLayerMixin = superclass => class extends superclass { } getUidsFromPayload ({ model, uids }, targetData) { - const targetFields = targetData[0]; - const targetVals = targetData.slice(1, targetData.length); - const payloadMap = targetVals.reduce((acc, v) => { - acc[v] = v; - return acc; - }, {}); - const measures = Object.keys(this.data().getFieldspace().getMeasure()); - - const filterFn = (fields, i) => { - const row = `${targetFields.map((field) => { - let val; - if (field === ReservedFields.MEASURE_NAMES) { - val = measures; - } else if (field === ReservedFields.ROW_ID) { - val = i; - } else { - const currentField = fields[field]; - const isFieldInvalid = currentField instanceof InvalidAwareTypes; - - val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue; - } - return val; - })}`; - return row in payloadMap; - }; - - const dm = model.select(filterFn, {}); - - // Need to find a better way to do this instead of iterating the full data - const currentSetIds = this.data().select(filterFn, { - saveChild: false - }).getUids(); + let uidsArr = uids; + let dm = model; + + if (targetData) { + const targetFields = targetData[0]; + const targetVals = targetData.slice(1, targetData.length); + const payloadMap = targetVals.reduce((acc, v) => { + acc[v] = v; + return acc; + }, {}); + const measures = Object.keys(this.data().getFieldspace().getMeasure()); + + dm = model.select((fields) => { + const row = `${targetFields.map((field) => { + let val; + if (field === ReservedFields.MEASURE_NAMES) { + val = measures; + } else if (field === ReservedFields.ROW_ID) { + val = fields[ReservedFields.ROW_ID]; + } else { + const currentField = fields[field]; + const isFieldInvalid = currentField instanceof InvalidAwareTypes; + + val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue; + } + return val; + })}`; + return row in payloadMap; + }, { + saveChild: false + }); - const uidMap = currentSetIds.reduce((acc, v) => { - acc[v] = true; - return acc; - }, {}); + const dmUids = dm.getUids(); + uidsArr = uids.filter(d => dmUids.find(id => `${id}` === `${d[0]}`)); + } return { model: dm, - uids: uids.filter(d => uidMap[d[0]]), - length: currentSetIds.length + uids: uidsArr, + length: uidsArr.length }; } @@ -471,16 +469,14 @@ export const BaseLayerMixin = superclass => class extends superclass { }); const measures = schema.filter(d => d.type === FieldType.MEASURE).map(d => d.name); - if (measures.length) { - identifiers[0].push(ReservedFields.MEASURE_NAMES); - identifiers[1].push(measures.join()); - } - if (allMeasures) { identifiers[0].push(...[ReservedFields.ROW_ID]); identifiers[1].push(...[rowId]); } - + if (measures.length) { + identifiers[0].push(ReservedFields.MEASURE_NAMES); + identifiers[1].push(measures.join()); + } return identifiers; } diff --git a/packages/visual-layer/src/helpers/index.js b/packages/visual-layer/src/helpers/index.js index 9898a9f0..0a6eb465 100644 --- a/packages/visual-layer/src/helpers/index.js +++ b/packages/visual-layer/src/helpers/index.js @@ -10,8 +10,8 @@ import { COORD_TYPES, CommonProps, defaultValue, - InvalidAwareTypes, - isSimpleObject + isSimpleObject, + InvalidAwareTypes } from 'muze-utils'; import { ScaleType } from '@chartshq/muze-axis'; import { transformFactory } from '@chartshq/transform'; @@ -79,19 +79,13 @@ export const setNullsInStack = (transformedData, schema, value, setNulls) => { transformedData.forEach((seriesData) => { seriesData.forEach((dataObj) => { if (dataObj.data[uniqueFieldIndex] === null && !setNulls) { - dataObj[0] = null; - dataObj[1] = null; + dataObj[0] = new InvalidAwareTypes(); + dataObj[1] = new InvalidAwareTypes(); } }); }); return transformedData; }; -export const setNulls = (transformedData, val) => transformedData.map((seriesData) => { - if (val && (seriesData[val.index] instanceof InvalidAwareTypes)) { - seriesData[val.index] = null; - } - return seriesData; -}); /** * @@ -124,8 +118,6 @@ export const transformData = (dataModel, config, transformType, encodingFieldInf if (transformType === STACK) { transformedData = setNullsInStack(transformedData, schema, value, setNullData); - } else { - transformedData = setNulls(transformedData, dataModel.getFieldsConfig()[value]); } return transformedData; }; @@ -598,8 +590,8 @@ export const getBoundBoxes = points => points.map((point) => { }; }); -export const getDataFromEvent = (context, event) => { - const dataPoint = selectElement(event.target).data()[0]; +export const getDataFromEvent = (context, event, data) => { + const dataPoint = data || selectElement(event.target).data()[0]; if (isSimpleObject(dataPoint) && getObjProp(dataPoint, 'meta', 'layerId') === context.id()) { const values = dataPoint && dataPoint.source; let identifiers = null; diff --git a/packages/visual-layer/src/layers/arc/default-config.js b/packages/visual-layer/src/layers/arc/default-config.js index 57f0183a..e170475b 100644 --- a/packages/visual-layer/src/layers/arc/default-config.js +++ b/packages/visual-layer/src/layers/arc/default-config.js @@ -17,7 +17,7 @@ export const defaultConfig = { fade: { style: { fill: (rgbaValues, data, apply) => transformColor(rgbaValues, { - l: +15 + a: -0.3 }, data, apply).color } }, diff --git a/packages/visual-layer/src/layers/area/renderer.js b/packages/visual-layer/src/layers/area/renderer.js index a513f23f..4eb3617a 100644 --- a/packages/visual-layer/src/layers/area/renderer.js +++ b/packages/visual-layer/src/layers/area/renderer.js @@ -6,14 +6,14 @@ import { } from 'muze-utils'; const area = Symbols.area; + /** * Draws a line from the points * Generates a svg path string * @param {Object} params Contains container, points and interpolate attribute. */ const /* istanbul ignore next */ drawArea = (params) => { - const { layer, container, points, style, transition, className, interpolate, connectNullData } = params; - + const { layer, container, style, points, transition, className, interpolate, connectNullData } = params; const graphicElems = layer._graphicElems; const { effect: easeEffect, duration } = transition; const mount = selectElement(container); @@ -23,13 +23,13 @@ const /* istanbul ignore next */ drawArea = (params) => { .x(d => d[e].x) .y1(d => d[e].y) .y0(d => d[e].y0) - .defined(d => d[e].y !== undefined)); + .defined(d => d[e].y !== null)); mount.attr('class', className); let filteredPoints = points; if (connectNullData) { - filteredPoints = filteredPoints.filter(d => d.update.y !== undefined); + filteredPoints = filteredPoints.filter(d => d.update.y !== null); } const selectionEnter = selection .enter() @@ -37,7 +37,7 @@ const /* istanbul ignore next */ drawArea = (params) => { .attr('d', enterAreaPath(filteredPoints)) .each((d) => { d.forEach((dd) => { - if (dd.rowId) { + if (dd.rowId !== null) { graphicElems[dd.rowId] = mount.select('path'); } }); diff --git a/packages/visual-layer/src/layers/bar/bar-mixin.js b/packages/visual-layer/src/layers/bar/bar-mixin.js index 7c89cf92..29bd6f21 100644 --- a/packages/visual-layer/src/layers/bar/bar-mixin.js +++ b/packages/visual-layer/src/layers/bar/bar-mixin.js @@ -7,7 +7,8 @@ import { Scales, getObjProp, makeElement, - appendElement + appendElement, + RTree } from 'muze-utils'; import { BaseLayer } from '../../base-layer'; import { drawRects } from './renderer'; @@ -35,6 +36,7 @@ export const BarLayerMixin = superclass => class extends superclass { }; this._pointMap = {}; this._overlayPath = {}; + this._rtree = new RTree(); } elemType () { @@ -145,7 +147,9 @@ export const BarLayerMixin = superclass => class extends superclass { }); } }); - + const elements = this.getBoundBoxes().flat().filter(d => d !== null); + this._rtree = new RTree(); + this._rtree.load(elements); return this; } @@ -186,15 +190,25 @@ export const BarLayerMixin = superclass => class extends superclass { * @param {number} y y position * @return {Object} Nearest point. */ - getNearestPoint (x, y, { event }) { + getNearestPoint (x, y) { if (!this.data()) { return null; } - return this.getDataFromEvent(event); + const data = this._rtree.search({ + minX: Math.max(x - 1, 0), + minY: Math.max(y - 1, 0), + maxX: x + 1, + maxY: y + 1 + }); + + if (data.length) { + return this.getDataFromEvent(null, data[0].point); + } + return null; } - getDataFromEvent (event) { - return getDataFromEvent(this, event); + getDataFromEvent (event, data) { + return getDataFromEvent(this, event, data); } getPlotSpan () { @@ -267,7 +281,8 @@ export const BarLayerMixin = superclass => class extends superclass { maxX: x + width, minY: y, maxY: y + height, - data + data, + point }; }); } diff --git a/packages/visual-unit/src/firebolt/data-propagator.js b/packages/visual-unit/src/firebolt/data-propagator.js deleted file mode 100644 index 32eb516e..00000000 --- a/packages/visual-unit/src/firebolt/data-propagator.js +++ /dev/null @@ -1,139 +0,0 @@ -// import { isSimpleObject, FieldType } from 'muze-utils'; - -// export const addFacetData = ({ identifiers: data }, facetData, propFields, dm) => { -// const facets = Object.keys(facetData); -// const facetVals = Object.values(facetData); -// const facetLen = facets.length; -// if (isSimpleObject(data)) { -// return Object.assign({}, Object.keys(facetData).reduce((acc, v) => { -// acc[v] = [facetData[v]]; -// return acc; -// }, {}), data); -// } -// const fieldsWithFacets = data[0].length ? [...facets.map(d => ({ name: d, type: FieldType.DIMENSION })), -// ...data[0].map((d, i) => ({ -// name: d, -// index: i + facetLen -// }))] : []; - -// const fieldIndexMap = fieldsWithFacets.reduce((acc, v, i) => { -// acc[v.name] = i; -// return acc; -// }, {}); -// propFields = propFields || fieldsWithFacets.map(d => d.name); -// const dataWithFacets = [ -// propFields -// ]; -// const fieldsConfig = dm.getFieldsConfig(); -// const propDims = fieldsWithFacets.filter(d => d.name in fieldsConfig).map(d => d.name); - -// const dimsMap = dm.getData().data.reduce((acc, row) => { -// const key = propDims.map(d => row[fieldsConfig[d].index]); -// acc[key] || (acc[key] = []); -// acc[key].push(row); -// return acc; -// }, {}); - -// for (let i = 1, len = data.length; i < len; i++) { -// const row = [...facetVals, ...data[i]]; -// const newRow = []; -// const dimKey = propDims.map(field => row[fieldIndexMap[field]]); -// const origRow = dimsMap[dimKey]; -// if (origRow) { -// origRow.forEach((rowVal) => { -// const newRowVal = []; -// propFields.forEach((field) => { -// if (field in fieldIndexMap) { -// const idx = fieldIndexMap[field]; -// newRowVal.push(row[idx]); -// } else { -// const idx = fieldsConfig[field].index; -// newRowVal.push(rowVal[idx]); -// } -// }); - -// dataWithFacets.push(newRowVal); -// }); -// } else { -// propFields.forEach((field) => { -// if (field in fieldIndexMap) { -// const idx = fieldIndexMap[field]; -// newRow.push(row[idx]); -// } -// }); -// dataWithFacets.push(newRow); -// } -// } -// return dataWithFacets; -// }; - -// export const propagateValues = (instance, action, config = {}) => { -// let propFields = []; -// const { payload, identifiers, propagationFields } = config; -// const { fields: propagationFieldNames = [], append } = propagationFields[action] || {}; -// const context = instance.context; -// const dataModel = context.cachedData()[0]; -// const sourceId = context.id(); -// const sideEfffects = instance.sideEffects(); -// const behaviourEffectMap = instance._behaviourEffectMap; -// const propagationBehaviourMap = instance._propagationBehaviourMap; -// const propagationBehaviour = propagationBehaviourMap[action] || action; -// const facetByFields = context.facetByFields(); - -// payload.sourceUnit = sourceId; -// payload.action = action; -// payload.sourceCanvas = context.parentAlias(); - -// if (identifiers !== null) { -// propFields = identifiers.fields; - -// if (propagationFieldNames.length) { -// const fields = identifiers.fields; -// propFields = append ? [...fields.map(d => d.name), ...propagationFieldNames] : propagationFieldNames; -// Object.assign(identifiers, { -// identifiers: addFacetData(identifiers, facetByFields, propFields) -// }); -// } -// } - -// const groupId = context.parentAlias(); - -// const filterFn = (entry, propagationConf) => { -// const effects = behaviourEffectMap[entry.config.action]; -// const mutates = entry.config.groupId ? -// (effects ? effects.some(d => sideEfffects[d.name || d].constructor.mutates()) : false) : true; -// return entry.config.groupId !== propagationConf.groupId && mutates; -// }; - -// const sourceBehaviour = instance._actions.behavioural[action]; -// let isMutableAction = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false; -// const propConfig = { -// payload, -// action, -// criteria: identifiers, -// isMutableAction, -// groupId, -// sourceId: config.sourceId, -// filterFn, -// enabled: (propConf, firebolt) => (action !== propagationBehaviour ? -// propConf.payload.sourceCanvas === firebolt.context.parentAlias() : true) -// }; - -// dataModel.propagate(identifiers, propConfig, true); - -// if (action !== propagationBehaviour) { -// const behaviourInstance = instance._actions.behavioural[propagationBehaviour]; -// isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false; - -// dataModel.propagate(identifiers, Object.assign({}, propConfig, { -// isMutableAction, -// applyOnSource: false, -// action: propagationBehaviour, -// sourceId: isMutableAction ? groupId : sourceId, -// enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.context.parentAlias() -// }), true, { -// filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId -// }); -// } -// }; - diff --git a/packages/visual-unit/src/firebolt/helper.js b/packages/visual-unit/src/firebolt/helper.js index 96fb4a40..fba9c914 100644 --- a/packages/visual-unit/src/firebolt/helper.js +++ b/packages/visual-unit/src/firebolt/helper.js @@ -1,5 +1,5 @@ import { SpawnableSideEffect } from '@chartshq/muze-firebolt'; -import { FieldType, ReservedFields, defaultValue, isSimpleObject, getObjProp } from 'muze-utils'; +import { FieldType, defaultValue } from 'muze-utils'; export const initSideEffects = (sideEffects, firebolt) => { for (const key in sideEffects) { @@ -42,21 +42,21 @@ export const isSideEffectEnabled = (firebolt, { se, propagationInf }) => { })) : true; }; -const getUniqueKeys = (data, dimensions, { layers, uids, keys = {}, dimensionsMap = {} }) => { +const getUniqueKeys = (data, { layers, uids, keys = {}, dimensionsMap = {}, dimensions }) => { data.forEach((row, i) => { - const key = dimensions.length ? dimensions.map(d => row[d.index]) : [uids[i]]; - + const key = [uids[i]]; + const dims = dimensions.map(d => row[d.index]); layers.forEach((layer) => { const measureNames = Object.keys(layer.data().getFieldspace().getMeasure()); const mKey = `${[key, ...measureNames]}`; keys[mKey] = defaultValue(keys[mKey], {}); keys[mKey] = { - dims: key, + dims, measureNames, uid: uids[i] }; dimensionsMap[key] = defaultValue(dimensionsMap[key], []); - dimensionsMap[key].push(measureNames); + measureNames.length && dimensionsMap[key].push(measureNames); }); }); @@ -67,10 +67,11 @@ const getUniqueKeys = (data, dimensions, { layers, uids, keys = {}, dimensionsMa }; export const prepareSelectionSetMap = ({ data, uids, dimensions }, layers, maps = {}) => { - const obj = getUniqueKeys(data, dimensions, { + const obj = getUniqueKeys(data, { layers, uids, keys: maps.keys, + dimensions, dimensionsMap: maps.dimensionsMap }); @@ -82,95 +83,18 @@ export const prepareSelectionSetMap = ({ data, uids, dimensions }, layers, maps export const prepareSelectionSetData = (dataModel, unit) => { const { data, uids } = dataModel.getData(); - const dimensions = Object.values(dataModel.getFieldsConfig()).filter(d => d.def.type === FieldType.DIMENSION); + const fieldsConfig = dataModel.getFieldsConfig(); + const dimensions = Object.values(fieldsConfig).filter(d => d.def.type === FieldType.DIMENSION); const layers = unit.layers(); const { keys, dimensionsMap } = prepareSelectionSetMap({ data, uids, dimensions }, layers); - const dimensionFields = dimensions.length ? dimensions.map(d => d.def.name) : [ReservedFields.ROW_ID]; - const hasMeasures = Object.keys(dataModel.getFieldspace().getMeasure()).length; - const measureName = hasMeasures ? [ReservedFields.MEASURE_NAMES] : []; return { keys, - dimensions: dimensionFields, - dimensionsMap, - allFields: [...dimensionFields, ...measureName] + dimensions, + dimensionsMap }; }; -export const sanitizePayloadCriteria = (data, propFields, { dm, dimensionsMap, dimsMapGetter }) => { - const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), { - [ReservedFields.ROW_ID]: { - index: Object.keys(dm.getFieldsConfig()).length, - def: { - name: ReservedFields.ROW_ID, - type: FieldType.DIMENSION - } - } - }); - if (data === null) { - return null; - } - - if (isSimpleObject(data)) { - return Object.keys(data).reduce((acc, v) => { - if (v in fieldsConfig || v === ReservedFields.MEASURE_NAMES) { - acc[v] = data[v]; - } - return acc; - }, {}); - } - - const criteriaFields = data[0]; - const fields = criteriaFields.length ? criteriaFields.map((d, i) => ({ - name: d, - index: i - })) : []; - - const fieldIndexMap = fields.reduce((acc, v, i) => { - acc[v.name] = i; - return acc; - }, {}); - - propFields = propFields || fields.map(d => d.name); - const dataWithFacets = [ - propFields - ]; - - const measureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES); - const propDims = fields.filter(d => d.name in fieldsConfig).map(d => d.name); - - const dimsMap = dimsMapGetter(propDims, fieldsConfig); - - for (let i = 1, len = data.length; i < len; i++) { - const row = data[i]; - const dimKey = propDims.map(field => row[fieldIndexMap[field]]); - const origRow = dimsMap[dimKey]; - if (origRow) { - origRow.forEach((rowVal) => { - const newRowVal = []; - propFields.forEach((field) => { - if (field in fieldIndexMap) { - const idx = fieldIndexMap[field]; - newRowVal.push(row[idx]); - } else { - const idx = getObjProp(fieldsConfig[field], 'index'); - idx !== undefined && newRowVal.push(rowVal[idx]); - } - }); - if (!measureNameField) { - const measuresArr = dimensionsMap[newRowVal].length ? dimensionsMap[newRowVal] : [[]]; - measuresArr.forEach((measures) => { - dataWithFacets.push([...newRowVal, ...measures]); - }); - } else { - dataWithFacets.push(newRowVal); - } - }); - } - } - return dataWithFacets; -}; - export const dispatchSecondaryActions = (firebolt, { action, propagationData, config, propagationInf }) => { const context = firebolt.context; diff --git a/packages/visual-unit/src/firebolt/index.js b/packages/visual-unit/src/firebolt/index.js index 6ff1e2b1..93463837 100644 --- a/packages/visual-unit/src/firebolt/index.js +++ b/packages/visual-unit/src/firebolt/index.js @@ -3,7 +3,6 @@ import { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt'; import { payloadGenerator } from './payload-generator'; import { isSideEffectEnabled, - sanitizePayloadCriteria, dispatchSecondaryActions, createMapByDimensions } from './helper'; @@ -81,18 +80,18 @@ export default class UnitFireBolt extends Firebolt { return propInf.propagate === false && propInf.applySideEffect !== false; } - sanitizePayload (payload) { - const { criteria } = payload; - const { allFields: fields, dimensionsMap } = this._metaData; - - return Object.assign({}, payload, - { - criteria: sanitizePayloadCriteria(criteria, fields, { - dm: this.data(), - dimensionsMap, - dimsMapGetter: this._dimsMapGetter - }) - }); + data (...params) { + if (params.length) { + const model = params[0]; + this.context.enableCaching().data(model); + return this; + } + return this.context.data(); + } + + resetData () { + this.context.clearCaching().resetData(); + return this; } onDataModelPropagation () { @@ -112,7 +111,7 @@ export default class UnitFireBolt extends Firebolt { } = config; const payloadFn = this.getPayloadGeneratorFor(action); - const payload = payloadFn(this, propagationData, config, context.facetByFields()); + const payload = payloadFn(this, propagationData, config, context.facetFieldsMap()); const behaviourPolicies = this._behaviourPolicies; const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {}); let enabled = filterFns.every(fn => fn(propPayload || {}, this, { diff --git a/packages/visual-unit/src/firebolt/payload-generator.js b/packages/visual-unit/src/firebolt/payload-generator.js index 259555de..028d2a02 100644 --- a/packages/visual-unit/src/firebolt/payload-generator.js +++ b/packages/visual-unit/src/firebolt/payload-generator.js @@ -1,4 +1,38 @@ -import { ReservedFields, FieldType, difference, isSimpleObject } from 'muze-utils'; +import { ReservedFields, difference, isSimpleObject, getIndexMap } from 'muze-utils'; + +const getIdentifierMeasureMap = (identifiers, fields, facetsMap) => { + const identifierIdxMap = getIndexMap(identifiers[0]); + const identifierValues = identifiers.slice(1, identifiers.length); + + return identifierValues.reduce((acc, row) => { + let facetPresent = true; + + for (const field in facetsMap) { + const facetVal = row[identifierIdxMap[field]]; + facetPresent = facetPresent && facetVal === facetsMap[field]; + } + + if (facetPresent) { + const key = fields.map((field) => { + const fieldIndex = identifierIdxMap[field]; + + return row[fieldIndex]; + }); + const measureNamesIdx = identifierIdxMap[ReservedFields.MEASURE_NAMES]; + + if (measureNamesIdx !== undefined) { + const measureArr = row[measureNamesIdx]; + !acc[key] && (acc[key] = []); + + if (measureArr && measureArr.length) { + acc[key].push([measureArr]); + } + } + } + + return acc; + }, {}); +}; const getRangeFromData = (instance, selectionDataModel, propConfig) => { const dataObj = selectionDataModel.getData(); @@ -45,101 +79,70 @@ export const payloadGenerator = { return payload; }, - __default: (instance, selectionDataModel, propConfig, facetByFields = []) => { + __default: (instance, propagationDataModel, propConfig, facetByFields = {}) => { + let propagationDataDims = []; + let criteria = null; + const { payload: propPayload, sourceIdentifiers, excludeSelectedMeasures } = propConfig; - const dataObj = selectionDataModel.getData({ withUid: true }); + const { data } = propagationDataModel.getData({ withUid: true }); const payload = Object.assign({}, propPayload); - const data = dataObj.data; - const fieldsConfig = Object.assign({}, selectionDataModel.getFieldsConfig(), { + const fieldsConfig = Object.assign({}, propagationDataModel.getFieldsConfig(), { [ReservedFields.ROW_ID]: { - index: Object.keys(selectionDataModel.getFieldsConfig()).length, - def: { - type: FieldType.DIMENSION - } + index: Object.keys(propagationDataModel.getFieldsConfig()).length } }); - const selectionSet = instance._selectionSet[propConfig.action]; - const selectionSetFields = selectionSet._fields; - if (sourceIdentifiers) { - const [facetFields = [], facetValues = []] = facetByFields; - const facetIndices = facetFields.reduce((acc, v, i) => { - acc[v] = i; - return acc; - }, {}); - const identifierIdxMap = sourceIdentifiers.fields.reduce((acc, v, i) => { - acc[v.name] = i; - return acc; - }, {}); - const identifiers = sourceIdentifiers.identifiers.slice(1, sourceIdentifiers.identifiers.length); - const sourceIdentifierFields = sourceIdentifiers.fields.filter(d => d.name in fieldsConfig || - d.name in facetIndices || d.name === ReservedFields.ROW_ID); - - const identifierMap = identifiers.reduce((acc, v) => { - const key = sourceIdentifierFields.map(d => v[identifierIdxMap[d.name]]); - const measureNamesIdx = identifierIdxMap[ReservedFields.MEASURE_NAMES]; - if (measureNamesIdx) { - !acc[key] && (acc[key] = []); - acc[key].push([v[measureNamesIdx]]); - } - return acc; - }, {}); + propagationDataDims = Object.keys(propagationDataModel.getFieldspace().getDimension()); + !propagationDataDims.length && (propagationDataDims = [ReservedFields.ROW_ID]); + + if (sourceIdentifiers) { + const identifierMap = getIdentifierMeasureMap(sourceIdentifiers.identifiers, propagationDataDims, + facetByFields); const dataArr = []; + for (let i = 0, len = data.length; i < len; i++) { const row = data[i]; const dims = []; - selectionSetFields.forEach((field) => { - if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) { - const idx = fieldsConfig[field].index; - dims.push(row[idx]); - } - }); - const vals = `${sourceIdentifierFields.map((d) => { - if (d.name in fieldsConfig) { - return row[fieldsConfig[d.name].index]; - } else if (d.name in facetIndices) { - return facetValues[facetIndices[d.name]]; - } - return null; - }).filter(d => d !== null)}`; + propagationDataDims.forEach((field) => { + const idx = fieldsConfig[field].index; + dims.push(row[idx]); + }); + const uid = row[row.length - 1]; + const dimKey = `${dims}`; - if (vals in identifierMap) { - const measures = identifierMap[vals]; - const allMeasures = instance._metaData.dimensionsMap[dims]; + if (dimKey in identifierMap) { + const measures = identifierMap[dimKey]; + const allMeasures = instance._metaData.dimensionsMap[uid]; if (excludeSelectedMeasures) { - const fn = v => `${v}`; - const diffMeasures = difference(allMeasures, measures, [fn, fn]); + const diffMeasures = difference(allMeasures, measures); diffMeasures.forEach((measureArr) => { dataArr.push([...dims, measureArr]); }); - } else { + } else if (measures && measures.length) { measures.forEach((measureArr) => { dataArr.push([...dims, measureArr]); }); + } else { + dataArr.push([...dims, []]); } } else { - let measures = instance._metaData.dimensionsMap[dims]; - measures = measures && measures.length ? measures : [[]]; - measures.forEach((measureArr) => { - dataArr.push([...dims, measureArr]); - }); + dataArr.push([...dims, []]); } } - payload.criteria = [[...selectionSetFields, ReservedFields.MEASURE_NAMES], ...dataArr]; - } else { - payload.criteria = null; + criteria = [[...propagationDataDims, ReservedFields.MEASURE_NAMES], ...dataArr]; } + payload.criteria = criteria; payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : []; return payload; }, - pseudoSelect: (instance, selectionDataModel, propConfig, facetByFields = []) => + pseudoSelect: (instance, selectionDataModel, propConfig) => payloadGenerator.__default(instance, selectionDataModel, Object.assign({}, { excludeSelectedMeasures: true - }, propConfig), facetByFields) + }, propConfig)) }; export const getPayloadGenerator = (action, criteria) => { diff --git a/packages/visual-unit/src/helper/index.js b/packages/visual-unit/src/helper/index.js index 5e477e0f..3e78d220 100644 --- a/packages/visual-unit/src/helper/index.js +++ b/packages/visual-unit/src/helper/index.js @@ -327,77 +327,6 @@ export const setAxisRange = (context) => { } }; -export const isXandYMeasures = (context) => { - const { x: xFields, y: yFields } = context.fields(); - const [xMeasures, yMeasures] = [xFields, yFields].map(fields => fields - .every(field => field.type() === FieldType.MEASURE)); - return xMeasures && yMeasures; -}; - -const getKey = (arr, row) => { - let key = row[arr[0]]; - for (let i = 1, len = arr.length; i < len; i++) { - key = `${key},${row[arr[i]]}`; - } - return key; -}; - -export const getValuesMap = (model, context) => { - const idValuesMap = {}; - const valuesIdMap = {}; - const { data: dataArr, schema, uids } = model.getData(); - const fieldsConfig = model.getFieldsConfig(); - const fieldIndices = isXandYMeasures(context) ? schema.map((d, i) => i) : - Object.keys(model.getFieldspace().getDimension()).map(d => fieldsConfig[d].index); - dataArr.forEach((row, i) => { - const key = getKey(fieldIndices, row); - valuesIdMap[key] = uids[i]; - idValuesMap[uids[i]] = row; - }); - return { valuesIdMap, idValuesMap, fieldsConfig }; -}; - -export const getSelectionRejectionModel = (model, propModel, measures, propValuesMap) => { - let rejectionModel; - const { data, schema } = propModel.getData(); - const entryRowIds = []; - const exitRowIds = []; - - if (schema.length) { - const fieldMap = model.getFieldsConfig(); - const { valuesIdMap } = propValuesMap; - - const rowIdsObj = {}; - const filteredSchema = measures ? schema.map((d, idx) => idx) : - Object.keys(model.getFieldspace().getDimension()).map(d => fieldMap[d].index); - data.forEach((row) => { - const key = getKey(filteredSchema, row); - const id = valuesIdMap[key]; - if (key in valuesIdMap) { - entryRowIds.push(id); - rowIdsObj[id] = 1; - } - }); - rejectionModel = model.select((fields, i) => { - if (!rowIdsObj[i]) { - exitRowIds.push(i); - return true; - } - return false; - }, { - saveChild: false - }); - } else { - rejectionModel = propModel; - } - - return { - model: [propModel, rejectionModel], - entryRowIds, - exitRowIds - }; -}; - export const createRTree = (context) => { const elements = [].concat(...context.layers().filter(layer => layer.config().interactive !== false) .map((layer) => { diff --git a/packages/visual-unit/src/index.js b/packages/visual-unit/src/index.js index 7d480cf1..a1320ee2 100644 --- a/packages/visual-unit/src/index.js +++ b/packages/visual-unit/src/index.js @@ -1,7 +1,7 @@ import * as helpers from './helper'; import * as enums from './enums'; import UnitFireBolt from './firebolt'; -import { isSideEffectEnabled, prepareSelectionSetMap, sanitizePayloadCriteria } from './firebolt/helper'; +import { isSideEffectEnabled, prepareSelectionSetMap } from './firebolt/helper'; import { payloadGenerator } from './firebolt/payload-generator'; export { default as VisualUnit } from './visual-unit'; @@ -11,6 +11,6 @@ export { UnitFireBolt, isSideEffectEnabled, payloadGenerator, - prepareSelectionSetMap, - sanitizePayloadCriteria + prepareSelectionSetMap + // sanitizePayloadCriteria }; diff --git a/packages/visual-unit/src/listener-map.js b/packages/visual-unit/src/listener-map.js index 01856dda..41fdc518 100644 --- a/packages/visual-unit/src/listener-map.js +++ b/packages/visual-unit/src/listener-map.js @@ -94,13 +94,13 @@ export const listenerMap = [ context._timeDiffs = timeDiffs; const firebolt = context.firebolt(); const originalData = context.cachedData()[0]; - const { keys, dimensionsMap, dimensions, allFields } = prepareSelectionSetData(context.data(), context); + const { keys, dimensionsMap, dimensions } = prepareSelectionSetData(context.data(), context); firebolt._metaData = { dimensionsMap, - dimensions, - allFields + dimensions + }; - firebolt.createSelectionSet({ keys, fields: dimensions }); + firebolt.createSelectionSet({ keys, fields: dimensions.map(d => d.def.name) }); firebolt.attachPropagationListener(originalData); } } diff --git a/packages/visual-unit/src/local-options.js b/packages/visual-unit/src/local-options.js index 9eddf306..2ee15be6 100644 --- a/packages/visual-unit/src/local-options.js +++ b/packages/visual-unit/src/local-options.js @@ -1,7 +1,7 @@ import { mergeRecursive, DataModel } from 'muze-utils'; import { defaultConfig } from './default-config'; import { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props'; -import { sanitizeLayerDef, getValuesMap } from './helper'; +import { sanitizeLayerDef } from './helper'; export default { [CONFIG]: { @@ -29,16 +29,6 @@ export default { meta: { typeCheck: d => d instanceof DataModel, preset: (data, context) => { - context._cachedValuesMap = ((model) => { - let valuesMap = null; - return () => { - if (valuesMap) { - return valuesMap; - } - valuesMap = getValuesMap(model, context); - return valuesMap; - }; - })(data); if (context._cache) { const cachedData = context.cachedData(); context.cachedData([...cachedData, data]); diff --git a/packages/visual-unit/src/visual-unit.js b/packages/visual-unit/src/visual-unit.js index feae75f8..29106456 100644 --- a/packages/visual-unit/src/visual-unit.js +++ b/packages/visual-unit/src/visual-unit.js @@ -778,14 +778,6 @@ export default class VisualUnit { return domain; } - getValueFromId (id, fields, fieldsConfig) { - const { idValuesMap } = this._cachedValuesMap(); - const row = idValuesMap[id]; - const filteredRow = fields.map(d => (d === ReservedFields.ROW_ID ? id : row[fieldsConfig[d].index])); - - return filteredRow; - } - getRangeFromIdentifiers ({ criteria, fields }) { return fields.reduce((acc, v) => { acc[v] = criteria[v]; diff --git a/release/README.md b/release/README.md index c7365ff6..5ec848c4 100644 --- a/release/README.md +++ b/release/README.md @@ -127,13 +127,13 @@ canvas .mount("#chart"); // Specify an element to mount on using a CSS selector ``` -See [muzejs.org/docs](https://muzejs.org/docs) for more documentation! +See [muzejs.org/docs](https://muzejs.org/docs/v1.3.1) for more documentation! You also can checkout our Yeoman Generator [generator-muze](https://github.com/chartshq/generator-muze) to try out the **muze** through a boilerplate app. ## Documentation -You can find detailed tutorials, concepts and API references at [muzejs.org/docs](https://muzejs.org/docs). +You can find detailed tutorials, concepts and API references at [muzejs.org/docs](https://muzejs.org/docs/v1.3.1). ## Support diff --git a/release/dist/muze.css b/release/dist/muze.css index 48a75f3e..fd4f6648 100644 --- a/release/dist/muze.css +++ b/release/dist/muze.css @@ -1 +1 @@ -.muze-simple-axis text{text-align:center;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-ticks{font-style:"normal";fill:#858585}.muze-tick-lines,.muze-ticks{font-size:12px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-tick-lines{stroke:#efefef}.muze-axis-name{font-size:14px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;fill:#5f5f5f}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke-linejoin:round;stroke-width:2px;stroke:#1f77b4}.muze-layer-area{stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#1f77b4}.muze-layer-text text{font-size:12px;fill:#000}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill-opacity:.5}.muze-layer-bar{fill-opacity:1;stroke:none;stroke-width:0}.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke-opacity:.7;stroke:#f44336}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke-opacity:.3!important;stroke:#7f7f7f!important}.muze-layer-tick-selected{stroke:#000!important}.muze-selection-box-group{fill:#d3d3d3;fill-opacity:.3;stroke:#b4b4b4;cursor:all-scroll;pointer-events:all}.muze-tooltip-box{opacity:1;border:1px solid hsla(0,0%,59.2%,.19);background:#fbfbfb;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);font-size:12px;color:#5f5f5f;-webkit-border-radius:1px;border-radius:1px;padding-top:4px;display:inline-block;pointer-events:none;z-index:9999999999;text-align:left}.muze-tooltip-row{padding-bottom:2px;padding-top:2px;overflow:auto}.muze-tooltip-parent-container{pointer-events:none;z-index:9999999999}.muze-tooltip-stacked-row{color:#828282;margin-left:10px;font-size:12px;font-weight:600;line-height:"15px"}.muze-tooltip-stacked-row-key{margin-left:10px}.muze-tooltip-stacked-row-value{margin-left:2px}.muze-tooltip-stacked-percentage{font-size:10px;color:#828282;margin-left:-20px;margin-right:20px;float:right;line-height:17px}.muze-tooltip-selected-row{background-color:#ebebeb}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{color:#5f5f5f;float:right;margin-left:10px}.muze-tooltip-connectors path{stroke-width:2px;stroke:#c7c7be;stroke-linejoin:round;stroke-linecap:round}.muze-tooltip-html-container{margin-left:10px;margin-right:10px}.muze-tooltip-content svg{margin-left:10px;margin-right:5px}.muze-tooltip-value{margin-right:24px;margin-left:24px}.muze-tooltip-first{font-weight:600;font-size:15px;margin-left:15px}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-tooltip-content-parent-container{display:inline-block}.muze-tooltip-content-container-highlightSummary{border-right:1px solid #e9e9e9}.muze-tooltip-content-container-selectionSummary-crosstab{display:inline-block}.muze-tooltip-content-container-selectionSummary-default{border-bottom:1px solid #e9e9e9}.muze-tooltip-content-container-highlightSummary-crosstab{float:left}.muze-tooltip-content-container-selectionSummary .muze-tooltip-content{margin-left:3px;margin-right:3px}.muze-crossband{stroke-opacity:0;fill:grey;fill-opacity:.2}.muze-crossline{stroke:#979797;stroke-dasharray:5,7;fill:#979797;opacity:.65}.muze-anchors-group{pointer-events:none}.muze-anchors-group-lower .muze-layer-point,.muze-anchors-group-upper .muze-layer-point,.muze-anchors-group .muze-layer-point,.muze-brush-anchors-lower .muze-layer-point,.muze-brush-anchors-upper .muze-layer-point,.muze-persistent-anchors-lower .muze-layer-point,.muze-persistent-anchors-upper .muze-layer-point,.muze-persistent-anchors .muze-layer-point{fill-opacity:1}.muze-axis-ticks-highlight{font-weight:700;fill:#595959}.muze-axis-ticks-unhighlight{font-weight:400;fill:#858585}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box,.muze-legend-item-info,.muze-legend-title{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-legend-box{line-height:10px!important;height:100px;display:inline-block}.muze-legend-title{display:table;-webkit-box-align:center;-webkit-align-items:center;align-items:center;float:left;text-align:left;font-size:14px;height:30px;fill:#5f5f5f;font-weight:600}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3}.muze-legend-fadeout path{stroke-width:1px;fill-opacity:0}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{float:left;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;cursor:pointer;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{fill:#d3d3d3;fill-opacity:.3;stroke:#b4b4b4;cursor:all-scroll;pointer-events:all}.muze-legend-marker{stroke:#e2e2e2;stroke-width:1px;fill:#797474}.muze-legend-marker-show{display:block}.muze-legend-marker-hide{display:none}.muze-legend-marker-text-container{position:relative}.muze-legend-marker-text{position:absolute}.muze-legend-marker-text div{text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff;pointer-events:none}.muze-text-cell{font-size:12px;color:#5f5f5f;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:15px;white-space:nowrap;-webkit-transform-origin:0 0;transform-origin:0 0}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{text-align:center;color:#858585;font-weight:800;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1;white-space:nowrap}.muze-subheader-cell{font-size:15px}.muze-scroll-bar{background:#f8f8f8;position:relative;font-size:10px}.muze-scroll-arrow{float:left;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;background:#a2a2a2;color:#fff}.muze-scroll-arrow-left{height:100%;width:20px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-right{height:100%;width:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.muze-scroll-arrow-right,.muze-scroll-arrow-top{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.muze-scroll-arrow-top{width:100%;height:20px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-bottom{width:100%;height:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.muze-scroll-rect{float:left;position:relative}.muze-scroll-mover{position:absolute;-webkit-border-radius:3px;background:#a2a2a2;cursor:-webkit-grab;border-radius:3px}.muze-scroll-mover:active{cursor:-webkit-grabbing}.muze-scroll-arrow-chevron{position:relative;text-align:center;padding:1px;margin-bottom:0}.muze-scroll-arrow-chevron:after,.muze-scroll-arrow-chevron:before{content:"";position:absolute;background:#fff}#muze-scroll-arrow-chevron-bottom,#muze-scroll-arrow-chevron-top{height:1px;width:6px}#muze-scroll-arrow-chevron-left,#muze-scroll-arrow-chevron-right{width:1px;height:6px}#muze-scroll-arrow-chevron-bottom:before{top:0;left:0;height:100%;width:51%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-bottom:after{right:0;width:50%}#muze-scroll-arrow-chevron-bottom:after,#muze-scroll-arrow-chevron-top:before{top:0;height:100%;-webkit-transform:skew(0deg,-35deg);transform:skew(0deg,-35deg)}#muze-scroll-arrow-chevron-top:before{left:0;width:51%}#muze-scroll-arrow-chevron-top:after{top:0;right:0;height:100%;width:50%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-right:before{top:0;left:0;height:51%;width:100%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-right:after{bottom:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}#muze-scroll-arrow-chevron-left:before{bottom:0;left:0;width:100%;height:51%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-left:after{top:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}.muze-grid-normal{border-color:#ebebeb}.muze-grid-normal .muze-axis-name{font-size:12px;line-height:15px}.muze-grid-dark{border-color:#cbcbcb}.muze-grid-dark .muze-axis-name{font-size:12px;line-height:15px}.muze-grid-dark-bottom{border-bottom-color:#cbcbcb}.muze-grid-darker-top{border-top-color:#979797}.muze-grid-dark-top{border-top-color:#cbcbcb}.muze-grid-dark-right{border-right-color:#cbcbcb}.muze-grid-darker-bottom{border-bottom-color:#979797}.muze-grid-dark-left{border-left-color:#cbcbcb}.muze-grid-none-left{border-left-color:transparent}.muze-grid-none-right{border-right-color:transparent}.muze-grid-none-top{border-top-color:transparent}.muze-grid-none-bottom{border-bottom-color:transparent}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container,.muze-subtitle-cell,.muze-title-cell{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-group-container{font-size:12px;line-height:15px;-webkit-tap-highlight-color:rgba(0,0,0,0);line-height:1.42857143;color:#5f5f5f;background-color:transparent;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{margin:5px;width:0;height:0;position:absolute;opacity:.5;z-index:10;cursor:pointer}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{left:100%;border-left:15px solid #4682b4}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{top:-webkit-calc(50% - 25px);top:calc(50% - 25px);border-top:20px solid transparent;border-bottom:20px solid transparent}.muze-group-container .muze-table-arrow-left{right:100%;border-right:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom{top:100%;border-top:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{left:-webkit-calc(50% - 25px);left:calc(50% - 25px);border-left:20px solid transparent;border-right:20px solid transparent}.muze-group-container .muze-table-arrow-top{bottom:100%;border-bottom:15px solid #4682b4}.muze-group-container .table-row-nested{visibility:hidden;border-top:none}.muze-group-container svg{display:block;width:inherit;height:inherit;float:left;vertical-align:top}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-width:100%;max-height:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{text-align:center;float:left}.muze-legend-horizontal-section{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:wrap;flex-wrap:wrap}.muze-legend-components{text-align:center;float:left}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{width:inherit;height:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-grid-top{position:relative;top:100%;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.muze-grid div{float:left}.muze-grid div,.muze-grid table{border-collapse:collapse}.muze-title-cell{font-size:24px;font-weight:700;color:#5f5f5f}.muze-grid-headers{font-size:12px}.muze-subtitle-cell{font-size:16px;font-weight:400;color:#b1b1b1}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.muze-message-container{background-color:#f1f1f1;display:table;border:1px solid #c3c9d0}.muze-message-container-child{display:table-cell;vertical-align:middle}.muze-message-container-child-img{text-align:center}.muze-message-container-child-img svg{display:unset;float:unset}.muze-message-container-child-message{color:#4f708c;text-align:center;font-weight:600}.hidden{display:none} \ No newline at end of file +.muze-simple-axis text{text-align:center;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-ticks{font-style:"normal";fill:#858585}.muze-tick-lines,.muze-ticks{font-size:12px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-tick-lines{stroke:#efefef}.muze-axis-name{font-size:14px;text-align:center;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;fill:#5f5f5f}.muze-axis-name.hidden{display:none}.muze-fadeout-interaction{stroke-opacity:.3}.muze-layer-line{stroke-linejoin:round;stroke-width:2px;stroke:#1f77b4}.muze-layer-area{stroke-linejoin:round}.muze-layer-arc-highlight{fill:#7f7f7f!important}.muze-layer-arc-fadeout{fill-opacity:.3!important}.muze-layer-arc-selected{fill:#e6e6e6!important}.muze-layer-arc{fill:#1f77b4}.muze-layer-text text{font-size:12px;fill:#000}.muze-layer-text rect{fill:#7f7f7f;fill-opacity:.3}.muze-layer-text-highlight{fill-opacity:1}.muze-layer-text-fadeout{fill-opacity:.3!important}.muze-layer-text-selected{fill:#000!important}.muze-layer-point{fill-opacity:.5}.muze-layer-bar{fill-opacity:1;stroke:none;stroke-width:0}.muze-layer-bar-highlight{fill-opacity:1}.muze-layer-bar-fadeout{fill-opacity:.2!important}.muze-layer-bar-selected{fill:#4682b4!important}.muze-layer-tick{stroke-opacity:.7;stroke:#f44336}.muze-layer-tick-highlight{stroke-opacity:1}.muze-layer-tick-fadeout{stroke-opacity:.3!important;stroke:#7f7f7f!important}.muze-layer-tick-selected{stroke:#000!important}.muze-selection-box-group{fill:#d3d3d3;fill-opacity:.3;stroke:#b4b4b4;cursor:all-scroll;pointer-events:all}.muze-tooltip-box{opacity:1;border:1px solid hsla(0,0%,59.2%,.19);background:#fbfbfb;-webkit-box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);box-shadow:2px 2px 3px 0 hsla(0,0%,82.7%,.5);font-size:12px;color:#5f5f5f;-webkit-border-radius:1px;border-radius:1px;padding-top:4px;display:inline-block;pointer-events:none;z-index:9999999999;text-align:left}.muze-tooltip-row{padding-bottom:2px;padding-top:2px;overflow:auto}.muze-tooltip-parent-container{pointer-events:none;z-index:9999999999}.muze-tooltip-stacked-row{color:#828282;margin-left:10px;font-size:12px;font-weight:600;line-height:"15px"}.muze-tooltip-stacked-row-key{margin-left:10px}.muze-tooltip-stacked-row-value{margin-left:2px}.muze-tooltip-stacked-percentage{font-size:10px;color:#828282;margin-left:-20px;margin-right:20px;float:right;line-height:17px}.muze-tooltip-selected-row{background-color:#ebebeb}.muze-tooltip-row:last-child{padding-bottom:4px}.muze-tooltip-value{color:#5f5f5f;float:right;margin-left:10px}.muze-tooltip-connectors path{stroke-width:2px;stroke:#c7c7be;stroke-linejoin:round;stroke-linecap:round}.muze-tooltip-html-container{margin-left:10px;margin-right:10px}.muze-tooltip-content svg{margin-left:10px;margin-right:5px}.muze-tooltip-value{margin-right:24px;margin-left:24px}.muze-tooltip-first{font-weight:600;font-size:15px;margin-left:15px}.muze-tooltip-table-tbody td{padding:3px}.muze-tooltip-table-row-0{font-weight:700}.muze-tooltip-content-parent-container :last-child{border-bottom:none}.muze-tooltip-content-parent-container{display:inline-block}.muze-tooltip-content-container-highlightSummary{border-right:1px solid #e9e9e9}.muze-tooltip-content-container-selectionSummary-crosstab{display:inline-block}.muze-tooltip-content-container-selectionSummary-default{border-bottom:1px solid #e9e9e9}.muze-tooltip-content-container-highlightSummary-crosstab{float:left}.muze-tooltip-content-container-selectionSummary .muze-tooltip-content{margin-left:3px;margin-right:3px}.muze-crossband{stroke-opacity:0;fill:grey;fill-opacity:.2}.muze-crossline{stroke:#979797;stroke-dasharray:5,7;fill:#979797;opacity:.65}.muze-anchors-group{pointer-events:none}.muze-anchors-group-lower .muze-layer-point,.muze-anchors-group-upper .muze-layer-point,.muze-anchors-group .muze-layer-point,.muze-brush-anchors-lower .muze-layer-point,.muze-brush-anchors-upper .muze-layer-point,.muze-persistent-anchors-lower .muze-layer-point,.muze-persistent-anchors-upper .muze-layer-point,.muze-persistent-anchors .muze-layer-point{fill-opacity:1}.muze-axis-ticks-highlight{font-weight:700;fill:#595959}.muze-axis-ticks-unhighlight{font-weight:400;fill:#858585}.muze-visual-unit{background:transparent}.muze-axis-zero-line{stroke-width:1px}.muze-grid-band-x-0,.muze-grid-band-y-0{fill-opacity:0}.muze-unit{-webkit-touch-callout:none;-webkit-user-select:none}.muze-legend-box,.muze-legend-item-info,.muze-legend-title{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-legend-box{line-height:10px!important;height:100px;display:inline-block}.muze-legend-title{display:table;-webkit-box-align:center;-webkit-align-items:center;align-items:center;float:left;text-align:left;font-size:14px;height:30px;fill:#5f5f5f;font-weight:600}.muze-legend-title-text{display:table-cell;vertical-align:middle}.muze-legend-overflow{text-align:center}.muze-legend-icon,.muze-legend-icon-svg{cursor:pointer}.muze-overflow-y{overflow-y:scroll}.muze-overflow-x{overflow-x:scroll}.muze-legend-fadeout{fill-opacity:.3}.muze-legend-fadeout path{stroke-width:1px;fill-opacity:0}.muze-legend-brighten{fill-opacity:1}.muze-legend-item-info{float:left;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;cursor:pointer;font-size:12px}.muze-legend-item-info.center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.muze-legend-item-info.start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.muze-legend-item-info.end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.muze-legend-selection-box{fill:#d3d3d3;fill-opacity:.3;stroke:#b4b4b4;cursor:all-scroll;pointer-events:all}.muze-legend-marker{stroke:#e2e2e2;stroke-width:1px;fill:#797474}.muze-legend-marker-show{display:block}.muze-legend-marker-hide{display:none}.muze-legend-marker-text-container{position:relative}.muze-legend-marker-text{position:absolute}.muze-legend-marker-text div{text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff;pointer-events:none}.muze-text-cell{font-size:12px;color:#5f5f5f;font-weight:400;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:15px;white-space:nowrap;-webkit-transform-origin:0 0;transform-origin:0 0}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{text-align:center;color:#858585;font-weight:800;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1;white-space:nowrap}.muze-subheader-cell{font-size:15px}.muze-scroll-bar{background:#f8f8f8;position:relative;font-size:10px}.muze-scroll-arrow{float:left;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;background:#a2a2a2;color:#fff}.muze-scroll-arrow-left{height:100%;width:20px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-right{height:100%;width:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.muze-scroll-arrow-right,.muze-scroll-arrow-top{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.muze-scroll-arrow-top{width:100%;height:20px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-bottom{width:100%;height:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.muze-scroll-rect{float:left;position:relative}.muze-scroll-mover{position:absolute;-webkit-border-radius:3px;background:#a2a2a2;cursor:-webkit-grab;border-radius:3px}.muze-scroll-mover:active{cursor:-webkit-grabbing}.muze-scroll-arrow-chevron{position:relative;text-align:center;padding:1px;margin-bottom:0}.muze-scroll-arrow-chevron:after,.muze-scroll-arrow-chevron:before{content:"";position:absolute;background:#fff}#muze-scroll-arrow-chevron-bottom,#muze-scroll-arrow-chevron-top{height:1px;width:6px}#muze-scroll-arrow-chevron-left,#muze-scroll-arrow-chevron-right{width:1px;height:6px}#muze-scroll-arrow-chevron-bottom:before{top:0;left:0;height:100%;width:51%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-bottom:after{right:0;width:50%}#muze-scroll-arrow-chevron-bottom:after,#muze-scroll-arrow-chevron-top:before{top:0;height:100%;-webkit-transform:skew(0deg,-35deg);transform:skew(0deg,-35deg)}#muze-scroll-arrow-chevron-top:before{left:0;width:51%}#muze-scroll-arrow-chevron-top:after{top:0;right:0;height:100%;width:50%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-right:before{top:0;left:0;height:51%;width:100%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-right:after{bottom:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}#muze-scroll-arrow-chevron-left:before{bottom:0;left:0;width:100%;height:51%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-left:after{top:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}.muze-grid-normal{border-color:#ebebeb!important}.muze-grid-normal .muze-axis-name{font-size:12px!important;line-height:15px!important}.muze-grid-dark{border-color:#cbcbcb!important}.muze-grid-dark .muze-axis-name{font-size:12px!important;line-height:15px!important}.muze-grid-dark-bottom{border-bottom-color:#cbcbcb!important}.muze-grid-darker-top{border-top-color:#979797!important}.muze-grid-dark-top{border-top-color:#cbcbcb!important}.muze-grid-dark-right{border-right-color:#cbcbcb!important}.muze-grid-darker-bottom{border-bottom-color:#979797!important}.muze-grid-dark-left{border-left-color:#cbcbcb!important}.muze-grid-none-left{border-left-color:transparent!important}.muze-grid-none-right{border-right-color:transparent!important}.muze-grid-none-top{border-top-color:transparent!important}.muze-grid-none-bottom{border-bottom-color:transparent!important}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:local("Source Sans Pro ExtraLight Italic"),local("SourceSansPro-ExtraLightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:local("Source Sans Pro Light Italic"),local("SourceSansPro-LightItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("SourceSansPro-Italic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:local("Source Sans Pro SemiBold Italic"),local("SourceSansPro-SemiBoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro Bold Italic"),local("SourceSansPro-BoldItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:local("Source Sans Pro Black Italic"),local("SourceSansPro-BlackItalic"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:local("Source Sans Pro ExtraLight"),local("SourceSansPro-ExtraLight"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:local("Source Sans Pro Light"),local("SourceSansPro-Light"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:local("Source Sans Pro SemiBold"),local("SourceSansPro-SemiBold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format("woff2");unicode-range:U+0460-052f,U+1c80-1c88,U+20b4,U+2de0-2dff,U+a640-a69f,U+fe2e-fe2f}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format("woff2");unicode-range:U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format("woff2");unicode-range:U+1f??}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0370-03ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format("woff2");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:local("Source Sans Pro Black"),local("SourceSansPro-Black"),url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format("woff2");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}.muze-group-container,.muze-subtitle-cell,.muze-title-cell{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-group-container{font-size:12px;line-height:15px;-webkit-tap-highlight-color:rgba(0,0,0,0);line-height:1.42857143;color:#5f5f5f;background-color:transparent;margin:0}.muze-group-container *,.muze-group-container :after,.muze-group-container :before{-webkit-box-sizing:border-box;box-sizing:border-box}.muze-group-container .muze-table-arrow{margin:5px;width:0;height:0;position:absolute;opacity:.5;z-index:10;cursor:pointer}.muze-group-container .muze-table-arrow:hover{opacity:1}.muze-group-container .muze-table-arrow-right{left:100%;border-left:15px solid #4682b4}.muze-group-container .muze-table-arrow-left,.muze-group-container .muze-table-arrow-right{top:-webkit-calc(50% - 25px);top:calc(50% - 25px);border-top:20px solid transparent;border-bottom:20px solid transparent}.muze-group-container .muze-table-arrow-left{right:100%;border-right:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom{top:100%;border-top:15px solid #4682b4}.muze-group-container .muze-table-arrow-bottom,.muze-group-container .muze-table-arrow-top{left:-webkit-calc(50% - 25px);left:calc(50% - 25px);border-left:20px solid transparent;border-right:20px solid transparent}.muze-group-container .muze-table-arrow-top{bottom:100%;border-bottom:15px solid #4682b4}.muze-group-container .table-row-nested{visibility:hidden;border-top:none}.muze-group-container svg{display:block;width:inherit;height:inherit;float:left;vertical-align:top}.muze-group-container .axisName.hidden{opacity:0}.muze-group-container .axisName{opacity:1}.muze-group-container .grid-td svg{max-width:100%;max-height:100%}.muze-group-container .domain{opacity:0}.muze-board{float:left}.muze-layout-container{float:left;position:relative}.muze-board-legend,.muze-legend-section{text-align:center;float:left}.muze-legend-horizontal-section{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:wrap;flex-wrap:wrap}.muze-legend-components{text-align:center;float:left}.muze-grid-layout,.muze-grid-layout-container,.muze-grid-layout-row{float:left;position:relative}.muze-grid-table{background-color:transparent;border-spacing:0;table-layout:fixed}.muze-grid-td,.muze-grid-th{padding:0}.muze-table-header{width:inherit;height:inherit}.muze-grid-layout,.muze-layout-grid-container{float:left;position:relative}.muze-grid-top{position:relative;top:100%;-webkit-transform:translateY(-100%);transform:translateY(-100%)}.muze-grid div{float:left}.muze-grid div,.muze-grid table{border-collapse:collapse}.muze-title-cell{font-size:24px;font-weight:700;color:#5f5f5f}.muze-grid-headers{font-size:12px}.muze-subtitle-cell{font-size:16px;font-weight:400;color:#b1b1b1}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.muze-message-container{background-color:#f1f1f1;display:table;border:1px solid #c3c9d0}.muze-message-container-child{display:table-cell;vertical-align:middle}.muze-message-container-child-img{text-align:center}.muze-message-container-child-img svg{display:unset;float:unset}.muze-message-container-child-message{color:#4f708c;text-align:center;font-weight:600}.hidden{display:none} \ No newline at end of file diff --git a/release/dist/muze.js b/release/dist/muze.js index 7267db07..6665f629 100644 --- a/release/dist/muze.js +++ b/release/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=18)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports=JSON.parse('{"name":"datamodel","description":"Relational algebra compliant in-memory tabular data store","homepage":"https://github.com/chartshq/datamodel","version":"2.3.0","license":"MIT","main":"dist/datamodel.js","keywords":["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],"author":"Muzejs.org (https://muzejs.org/)","repository":{"type":"git","url":"https://github.com/chartshq/datamodel.git"},"contributors":[{"name":"Akash Goswami","email":"akashgoswami90s@gmail.com"},{"name":"Subhash Haldar"},{"name":"Rousan Ali","email":"rousanali786@gmail.com","url":"https://rousan.io"},{"name":"Ujjal Kumar Dutta","email":"duttaujjalkumar@live.com"},{"name":"Ranajit Banerjee","email":"ranajit.113124@gmail.com"},{"name":"Adarsh Lilha","email":"adarshlilha@gmail.com"}],"dependencies":{"d3-dsv":"^1.0.8"},"devDependencies":{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","chai":"3.5.0","cross-env":"^5.0.5","eslint":"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0","jsdoc":"3.5.5","json2yaml":"^1.1.0","karma":"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3","marked":"^0.5.0","mocha":"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0","webpack":"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},"scripts":{"test":"npm run lint && npm run ut","ut":"karma start karma.conf.js","utd":"karma start --single-run false --browsers Chrome karma.conf.js ","build":"npm run build:prod","build:dev":"webpack --mode development","build:prod":"webpack --mode production","start":"webpack-dev-server --config webpack.config.dev.js --mode development --open","lint":"eslint ./src","lint-errors":"eslint --quiet ./src","docs":"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}')},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"DataFormat",function(){return o}),n.d(r,"DimensionSubtype",function(){return u}),n.d(r,"MeasureSubtype",function(){return c}),n.d(r,"FieldType",function(){return f}),n.d(r,"FilteringMode",function(){return l}),n.d(r,"GROUP_BY_FUNCTIONS",function(){return s});var i={};n.r(i),n.d(i,"Dimension",function(){return Me}),n.d(i,"Measure",function(){return xe}),n.d(i,"FieldParser",function(){return Le}),n.d(i,"fieldRegistry",function(){return ot}),n.d(i,"columnMajor",function(){return v});var a={};n.r(a),n.d(a,"sum",function(){return kn}),n.d(a,"avg",function(){return Dn}),n.d(a,"min",function(){return Tn}),n.d(a,"max",function(){return Fn}),n.d(a,"first",function(){return Nn}),n.d(a,"last",function(){return Rn}),n.d(a,"count",function(){return Pn}),n.d(a,"sd",function(){return Cn});var o={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},u={CATEGORICAL:"categorical",TEMPORAL:"temporal",BINNED:"binned"},c={CONTINUOUS:"continuous"},f={MEASURE:"measure",DIMENSION:"dimension"},l={NORMAL:"normal",INVERSE:"inverse",ALL:"all"},s={SUM:"sum",AVG:"avg",MIN:"min",MAX:"max",FIRST:"first",LAST:"last",COUNT:"count",STD:"std"};function p(e){return e instanceof Date?e:new Date(e)}function d(e){return e<10?"0"+e:e}function h(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},h.TOKEN_PREFIX="%",h.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},h.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},h.defaultRangeParser=function(e,t){return function(n){var r,i=void 0;if(!n)return t;var a=n.toLowerCase();for(i=0,r=e.length;ii.getFullYear()&&(t=""+(a-1)+r),p(t).getFullYear()},formatter:function formatter(e){var t=p(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return p(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},h.formatAs=function(e,t){var n,r=p(e),i=h.findTokens(t),a=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=i.length;l=0;p--)(f=a[p].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(p=0;p0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var R=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:V.CROSS,a=[],o=[],u=n||J,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,p=c.name+"."+f.name,d=H(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=O({},e.schema());-1===d.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),f.fields.forEach(function(e){var t=O({},e.schema());-1!==d.indexOf(t.name)?r||(t.name=f.name+"."+t.name,a.push(t)):a.push(t)}),N(e._rowDiffset,function(n){var p=!1,h=void 0;N(t._rowDiffset,function(v){var y=[],m={};m[l]={},m[s]={},c.fields.forEach(function(e){y.push(e.partialField.data[n]),m[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}}),f.fields.forEach(function(e){-1!==d.indexOf(e.schema().name)&&r||y.push(e.partialField.data[v]),m[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}});var b=Bt(m[l]),g=Bt(m[s]);if(u(b,g,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var _={};y.forEach(function(e,t){_[a[t].name]=e}),p&&V.CROSS!==i?o[h]=_:(o.push(_),p=!0,h=n)}else if((i===V.LEFTOUTER||i===V.RIGHTOUTER)&&!p){var w={},O=c.fields.length-1;y.forEach(function(e,t){w[a[t].name]=t<=O?e:null}),p=!0,h=n,o.push(w)}})}),new Sn(o,a,{name:p})}function z(e,t){var n=""+e,r=""+t;return nr?1:0}function K(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z;return e.length>1&&function e(t,n,r,i){if(r===n)return t;var a=n+Math.floor((r-n)/2);return e(t,n,a,i),e(t,a+1,r,i),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[f],f+=1):f>r?(a[l]=o[c],c+=1):i(o[c],o[f])<=0?(a[l]=o[c],c+=1):(a[l]=o[f],f+=1)}(t,n,a,r,i),t}(e,0,e.length-1,t),e}var W=function W(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function X(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=""+e)==(t=""+t)?0:e>t?-1:1}}return n}(e.type,n)}function Z(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function $(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function Q(e,t,n){for(var r=void 0,i=void 0,a=void 0,o=n.length-1;o>=0;o--)r=n[o][0],i=n[o][1],(a=sn(t,r))&&("function"==typeof i?K(e,function(e,t){return i(e[a.index],t[a.index])}):E(i)?function(){var n=Z(e,a.index),r=i[i.length-1],o=i.slice(0,i.length-1),u=o.map(function(e){return sn(t,e)});n.forEach(function(e){e.push($(e,o,u))}),K(n,function(e,t){var n=e[2],i=t[2];return r(n,i)}),e.length=0,n.forEach(function(t){e.push.apply(e,X(t[1]))})}():function(){var t=q(a,i);K(e,function(e,n){return t(e[a.index],n[a.index])})}())}var ee,te=function e(t,n,r,i){if(0===t.length)return n;var a=t[0],o=new Map;n.reduce(function(e,t){var n=t[a.index];return e.has(n)?e.get(n).push(t):e.set(n,[t]),e},o);var u=!0,c=!1,f=void 0;try{for(var l,s=o[Symbol.iterator]();!(u=(l=s.next()).done);u=!0){var p=l.value,d=W(p,2),h=d[0],v=d[1],y=e(t.slice(1),v,r,i);o.set(h,y),Array.isArray(y)&&Q(y,r,i)}}catch(e){c=!0,f=e}finally{try{!u&&s.return&&s.return()}finally{if(c)throw f}}return o};function re(e,t,n,r,i){var a={schema:[],data:[],uids:[]},o=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,u=r&&r.length>0,c=[];if(n.split(",").forEach(function(t){for(var n=0;nr&&(r=i))}),[n,r]},Ke=function(){function e(e,t){for(var n=0;n=a?c=!0:(r=e.charCodeAt(o++))===ht?f=!0:r===vt&&(f=!0,e.charCodeAt(o)===ht&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+bt(t,6):bt(t,4))+"-"+bt(e.getUTCMonth()+1,2)+"-"+bt(e.getUTCDate(),2)+(a?"T"+bt(n,2)+":"+bt(r,2)+":"+bt(i,2)+"."+bt(a,3)+"Z":i?"T"+bt(n,2)+":"+bt(r,2)+":"+bt(i,2)+"Z":r||n?"T"+bt(n,2)+":"+bt(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,i,a=r(e,function(e,r){if(n)return n(e,r-1);i=e,n=t?function(e,t){var n=yt(e);return function(r,i){return t(n(r),i,e)}}(e,t):yt(e)});return a.columns=i||[],a},parseRows:r,format:function format(t,n){return null==n&&(n=mt(t)),[n.map(o).join(e)].concat(i(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=mt(e)),i(e,t).join("\n")},formatRows:function formatRows(e){return e.map(a).join("\n")},formatRow:a,formatValue:o}},wt=function wt(e,t,n){if(!Array.isArray(t))throw new Error("Schema missing or is in an unsupported format");var r=t.map(function(e){return e.name});n=Object.assign({},{firstRowHeader:!0},n);var i=[],a=v(i),o=r;n.firstRowHeader&&(o=e.splice(0,1)[0]);var u=o.reduce(function(e,t,n){return Object.assign(e,(a=n,(i=t)in(r={})?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a,r));var r,i,a},{});return e.forEach(function(e){var t=[];return r.forEach(function(n){var r=u[n];t.push(e[r])}),a.apply(void 0,t)}),[r,i]},Ot=function Ot(e,t,n){n=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},n);var r=_t(n.fieldSeparator);return wt(r.parseRows(e),t,n)},Et=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(t){return e.store.set(t.type,t)}),this.store}},{key:"register",value:function value(e){return e instanceof lt?(this.store.set(e.type,e),this):null}},{key:"unregister",value:function value(e){return this.store.delete(e.type),this}},{key:"get",value:function value(e){return this.store.has(e)?this.store.get(e):null}}]),e}(),xt=function(){var e=null;return e||new It}(),Ut=function Ut(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function Lt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Vt(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3];t===L.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,Vt(i))):e._derivation.push({op:t,meta:r,criteria:i})})(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function Jt(e,t){var n;(n=t._ancestorDerivation).push.apply(n,Vt(e._ancestorDerivation).concat(Vt(e._derivation)))}(e,t)},zt=(Lt(Ct={},l.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),Lt(Ct,l.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),Lt(Ct,l.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),Ct),Kt=function Kt(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split("-")[0]+"-"+t}else e.push(""+t)},Wt=function Wt(e,t,n){var r=[],i=[],a=Ut(zt[n].calcDiff,2),o=a[0],u=a[1];return N(e,function(e){var n=t(e);n&&o&&Kt(r,e,-1),!n&&u&&Kt(i,e,-1)}),{rowDiffset:r.join(","),rejectRowDiffset:i.join(",")}},qt=function qt(e,t,n,r,i){var a={},o=function o(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e._partialFieldspace._cachedValueObjects;return i(c,function(e){return t(f[e],e,o,a)},u)},Qt=function Qt(e,t,n,r){var i=e[n];return i===U?r:t[i].internalValue},en=function en(e,t){return(t[0]instanceof Array?t:[t]).some(function(t){return e>=t[0]&&e<=t[1]})},tn=(Lt(Mt={},c.CONTINUOUS,en),Lt(Mt,u.TEMPORAL,en),Mt),rn=function rn(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=[],i=n.operation||"and",a=n.filterByDim,o=void 0===a||a,u=n.filterByMeasure,c=void 0!==u&&u,l=n.clone,p=void 0===l||l?function Zt(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t}(e):e,d=p.getFieldsConfig();return r=t.length?t.map(function(e){return function(e){var t=e.criteria,n=void 0===t?{}:t,r=n.identifiers,i=void 0===r?[[],[]]:r,a=n.range,u=Ut(i,2),l=u[0],s=void 0===l?[]:l,p=u[1],h=void 0===p?[]:p,v=s.reduce(function(e,t,n){return e[t]=n,e},{}),y=(s=s.filter(function(e){return e in d&&d[e].def.type===f.DIMENSION||e===U})).length,m={};if(y)for(var b=function b(e,t){var n=i[e],r=""+s.map(function(e){var t=v[e];return n[t]});m[r]=1},g=1,_=i.length;g<_;g++)b(g);var w=Object.keys(a||{}).filter(function(e){return e in d}),O=h.length||w.length;return c||(w=w.filter(function(e){return d[e].def.type!==f.MEASURE})),o||(w=w.filter(function(e){return d[e].def.type!==f.DIMENSION})),O?function(e,t){var n=!0;return o&&(n=!y||m[function $t(e,t,n,r){for(var i=n(e,t,0,r),a=1,o=e.length;a1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}i=(s=[]).concat.apply(s,[].concat(Vt(d.map(c)),[{criteria:e,groupedModel:null!==e&&e.fields.some(function(e){return e.type===f.MEASURE})?dn(n.propagationSource):null}])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(h,Vt(r.excludeModels||[]))})}var y=t.model,m=Object.assign({sourceIdentifiers:e,propagationSourceId:u},r);l.forEach(function(e){var t=e.criteria,n=rn(y,t,{filterByMeasure:!!t.find(function(e){return e.groupedModel===y})}),r=e.path;if(r){var i=function(e,t){for(var n=0,r=t.length;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.excludeModels||[],o=i.criteria;(!a.length||-1===a.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=o.filter(function(e){return e.groupedModel===t}),u=pn(n,t);a.length&&(u=rn(u,a,{filterByDim:!1,filterByMeasure:!0,clone:!1})),e(t,u,r,i)})}(y,n,m,{excludeModels:e.excludeModels,criteria:t})})},gn=function gn(e,t,n){var r=e.reduce(function(e,r){return"RegExp"===r.constructor.name?e.push.apply(e,Vt(t.filter(function(e){return-1!==e.search(r)}))):r in n&&e.push(r),e},[]);return Array.from(new Set(r)).map(function(e){return e.trim()})},_n=function _n(e,t){return e.numberFormat?e.numberFormat()(t):t},wn=function(){function e(e,t){for(var n=0;n1?(i=e.clone(r.saveChild),an(i,u[c[1]],e,n,t),[o,i]):o}(this,e,t,{saveChild:t.saveChild})}},{key:"isEmpty",value:function value(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:"clone",value:function value(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=gn(e,i,r);return a===l.ALL?[on(this,o,{mode:l.NORMAL,saveChild:t.saveChild},i),on(this,o,{mode:l.INVERSE,saveChild:t.saveChild},i)]:on(this,o,t,i)}},{key:"getFieldsConfig",value:function value(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function value(){return this._fieldConfig=this._fieldspace.fields.reduce(function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e},{}),this}},{key:"dispose",value:function value(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(e){e._parent=null}),this._children=[]}},{key:"removeChild",value:function value(e){var t=this._children.findIndex(function(t){return t===e});-1===t||this._children.splice(t,1)}},{key:"setParent",value:function value(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}},{key:"getAncestorDerivations",value:function value(){return this._ancestorDerivation}}]),e}(),En=function En(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},jn=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),a=function Ae(e,t,n,r){var i=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=je(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),i=Ee.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var a=Ee.resolve(t[e]);a?n[e]=a:(n[e]=i,t[e]=ge)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],p=[],d={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=je(e,2),n=t[0],r=t[1];if(-1!==i.indexOf(n)||a[n])switch(p.push(O({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var y=0;N(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===d[t]?(d[t]=y,h.push({}),l.forEach(function(t){h[y][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[y][t]=[u[t].partialField.data[e]]}),y+=1):s.forEach(function(n){h[d[t]][n].push(u[n].partialField.data[e])})});var m={},b=function b(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=a[n](e[n],b,m)})}),r?(r.__calculateFieldspace(),v=r):v=new xn(h,p,{name:c}),v}.apply(void 0,[this,e,t]);return Gt(this,a,L.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:Ee.defaultReducer()},t),n.saveChild?a.setParent(this):a.setParent(null),a}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e}),i=[n.schema.map(function(e){return e.name})].concat(n.data),a=new this.constructor(i,n.schema,{dataFormat:"DSVArr"});return Gt(this,a,L.SORT,t,e),t.saveChild?a.setParent(this):a.setParent(null),a}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),i=r[0].length,a=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(a=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach(function(t,n){t[e.name()]=new F(i[n],a[n],e)});return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=cn(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var i=this.getFieldsConfig(),a=t.slice(0,t.length-1),o=t[t.length-1];if(i[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=a.map(function(e){var t=i[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},p=function p(){return r.detachedRoot()},d=[];N(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});d[e]=o.apply(void 0,An(t).concat([e,p,s]))});var h=ut([d],[e],[e.name]),v=En(h,1)[0];return c.addField(v),Gt(this,c,L.CAL_VAR,{config:e,fields:a},o),c}},{key:"propagate",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function hn(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,l={groupByModel:dn(this),model:u};return n&&function bn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),yn(e,l,{propagationNameSpace:c,sourceId:a,propagationSource:this},Object.assign({payload:o},t)),i&&function mn(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i],o=a.config,u=n.config.sourceId,c=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(o,n.config);if(o.sourceId!==u&&c){var f=o.criteria;yn(f,{model:t,groupByModel:dn(a.model)},{propagationNameSpace:e,propagateToSource:!1,sourceId:u,propagationSource:a.model},o)}}}(c,u,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var i=function(e,t,n){var r=n.buckets,i=n.binsCount,a=n.binSize,o=n.start,u=n.end,f=function M(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(e.domain(),2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var p=[],d=0;d=(a=e[i=n+Math.floor((r-n)/2)]).start&&t=a.end?n=i+1:t2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],i=r.saveChild,a=e.getFieldspace().fieldsObj(),o=qt(e.clone(i),n,r,e,function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},i=this.getFieldsConfig(),a=Object.keys(i),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach(function(e,n){o[n]=gn([].concat(An(e),An(t)),a,i)}),function un(e,t,n,r){return t.map(function(t){return on(e,t,n,r)})}(this,o,n,a)}}],[{key:"configureInvalidAwareTypes",value:function value(e){return C.invalidAwareVals(e)}},{key:"Reducers",get:function get(){return Ee}},{key:"Converters",get:function get(){return xt}},{key:"FieldTypes",get:function get(){return ot}}]),t}(),kn=be.sum,Dn=be.avg,Tn=be.min,Fn=be.max,Nn=be.first,Rn=be.last,Pn=be.count,Cn=be.std,Mn={compose:function compose(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,i=void 0,a=[];return t.forEach(function(e){r=e(r),a.push.apply(a,function Y(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var muze_utils_src_namespaceObject={};__webpack_require__.r(muze_utils_src_namespaceObject),__webpack_require__.d(muze_utils_src_namespaceObject,"InvalidAwareTypes",function(){return src_InvalidAwareTypes}),__webpack_require__.d(muze_utils_src_namespaceObject,"DataModel",function(){return datamodel_default.a}),__webpack_require__.d(muze_utils_src_namespaceObject,"ReservedFields",function(){return reserved_fields}),__webpack_require__.d(muze_utils_src_namespaceObject,"CommonProps",function(){return common_props}),__webpack_require__.d(muze_utils_src_namespaceObject,"COORD_TYPES",function(){return COORD_TYPES}),__webpack_require__.d(muze_utils_src_namespaceObject,"STATE_NAMESPACES",function(){return namespace_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"scales",function(){return scales_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"colorSchemes",function(){return color_schemes_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"getNearestValue",function(){return getNearestValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"getValueParser",function(){return getValueParser}),__webpack_require__.d(muze_utils_src_namespaceObject,"transformColor",function(){return common_utils_transformColor}),__webpack_require__.d(muze_utils_src_namespaceObject,"transformColors",function(){return common_utils_transformColors}),__webpack_require__.d(muze_utils_src_namespaceObject,"detectColor",function(){return detectColor}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslToRgb",function(){return hslToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"rgbToHsv",function(){return rgbToHsv}),__webpack_require__.d(muze_utils_src_namespaceObject,"hexToHsv",function(){return hexToHsv}),__webpack_require__.d(muze_utils_src_namespaceObject,"hsvToRgb",function(){return hsvToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslaToRgb",function(){return hslaToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"escapeHTML",function(){return escapeHTML}),__webpack_require__.d(muze_utils_src_namespaceObject,"angleToRadian",function(){return angleToRadian}),__webpack_require__.d(muze_utils_src_namespaceObject,"generateGetterSetters",function(){return generateGetterSetters}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArraySum",function(){return getArraySum}),__webpack_require__.d(muze_utils_src_namespaceObject,"ERROR_MSG",function(){return ERROR_MSG}),__webpack_require__.d(muze_utils_src_namespaceObject,"interpolator",function(){return common_utils_interpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"colorInterpolator",function(){return common_utils_colorInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"numberInterpolator",function(){return common_utils_numberInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"piecewiseInterpolator",function(){return common_utils_piecewiseInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"reqAnimFrame",function(){return reqAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"cancelAnimFrame",function(){return cancelAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"nextAnimFrame",function(){return nextAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMax",function(){return getMax}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMin",function(){return getMin}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDomainFromData",function(){return getDomainFromData}),__webpack_require__.d(muze_utils_src_namespaceObject,"getUniqueId",function(){return getUniqueId}),__webpack_require__.d(muze_utils_src_namespaceObject,"mergeRecursive",function(){return mergeRecursive}),__webpack_require__.d(muze_utils_src_namespaceObject,"unionDomain",function(){return unionDomain}),__webpack_require__.d(muze_utils_src_namespaceObject,"replaceCSSPrefix",function(){return replaceCSSPrefix}),__webpack_require__.d(muze_utils_src_namespaceObject,"symbolFns",function(){return symbolFns}),__webpack_require__.d(muze_utils_src_namespaceObject,"defaultValue",function(){return defaultValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"easeFns",function(){return easeFns}),__webpack_require__.d(muze_utils_src_namespaceObject,"clone",function(){return clone}),__webpack_require__.d(muze_utils_src_namespaceObject,"interpolateArray",function(){return interpolateArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMinPoint",function(){return getMinPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMaxPoint",function(){return getMaxPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"getClosestIndexOf",function(){return common_utils_getClosestIndexOf}),__webpack_require__.d(muze_utils_src_namespaceObject,"registerListeners",function(){return common_utils_registerListeners}),__webpack_require__.d(muze_utils_src_namespaceObject,"Voronoi",function(){return common_utils_Voronoi}),__webpack_require__.d(muze_utils_src_namespaceObject,"checkExistence",function(){return checkExistence}),__webpack_require__.d(muze_utils_src_namespaceObject,"sanitizeIP",function(){return sanitizeIP}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMinDiff",function(){return getMinDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"capitalizeFirst",function(){return capitalizeFirst}),__webpack_require__.d(muze_utils_src_namespaceObject,"getWindow",function(){return getWindow}),__webpack_require__.d(muze_utils_src_namespaceObject,"getQualifiedClassName",function(){return getQualifiedClassName}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDependencyOrder",function(){return getDependencyOrder}),__webpack_require__.d(muze_utils_src_namespaceObject,"objectIterator",function(){return objectIterator}),__webpack_require__.d(muze_utils_src_namespaceObject,"intSanitizer",function(){return intSanitizer}),__webpack_require__.d(muze_utils_src_namespaceObject,"enableChainedTransaction",function(){return enableChainedTransaction}),__webpack_require__.d(muze_utils_src_namespaceObject,"isHTMLElem",function(){return isHTMLElem}),__webpack_require__.d(muze_utils_src_namespaceObject,"isEqual",function(){return common_utils_isEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"isSimpleObject",function(){return isSimpleObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"nextFrame",function(){return nextFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"getObjProp",function(){return getObjProp}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDataModelFromIdentifiers",function(){return common_utils_getDataModelFromIdentifiers}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDataModelFromRange",function(){return getDataModelFromRange}),__webpack_require__.d(muze_utils_src_namespaceObject,"transposeArray",function(){return transposeArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"toArray",function(){return toArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"extendsClass",function(){return extendsClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"concatModels",function(){return common_utils_concatModels}),__webpack_require__.d(muze_utils_src_namespaceObject,"assembleModelFromIdentifiers",function(){return assembleModelFromIdentifiers}),__webpack_require__.d(muze_utils_src_namespaceObject,"isValidValue",function(){return isValidValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"nestCollection",function(){return common_utils_nestCollection}),__webpack_require__.d(muze_utils_src_namespaceObject,"stack",function(){return common_utils_stack}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSymbol",function(){return common_utils_getSymbol}),__webpack_require__.d(muze_utils_src_namespaceObject,"Scales",function(){return Scales}),__webpack_require__.d(muze_utils_src_namespaceObject,"Symbols",function(){return Symbols}),__webpack_require__.d(muze_utils_src_namespaceObject,"pathInterpolators",function(){return pathInterpolators}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslInterpolator",function(){return common_utils_hslInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSmallestDiff",function(){return getSmallestDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"require",function(){return require}),__webpack_require__.d(muze_utils_src_namespaceObject,"formatTemporal",function(){return common_utils_formatTemporal}),__webpack_require__.d(muze_utils_src_namespaceObject,"nearestSortingDetails",function(){return common_utils_nearestSortingDetails}),__webpack_require__.d(muze_utils_src_namespaceObject,"createSelection",function(){return common_utils_createSelection}),__webpack_require__.d(muze_utils_src_namespaceObject,"temporalFields",function(){return common_utils_temporalFields}),__webpack_require__.d(muze_utils_src_namespaceObject,"retrieveNearestGroupByReducers",function(){return common_utils_retrieveNearestGroupByReducers}),__webpack_require__.d(muze_utils_src_namespaceObject,"retrieveFieldDisplayName",function(){return retrieveFieldDisplayName}),__webpack_require__.d(muze_utils_src_namespaceObject,"sanitizeDomainWhenEqual",function(){return sanitizeDomainWhenEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"sortCategoricalField",function(){return sortCategoricalField}),__webpack_require__.d(muze_utils_src_namespaceObject,"intersect",function(){return common_utils_intersect}),__webpack_require__.d(muze_utils_src_namespaceObject,"partition",function(){return partition}),__webpack_require__.d(muze_utils_src_namespaceObject,"mix",function(){return mix}),__webpack_require__.d(muze_utils_src_namespaceObject,"componentRegistry",function(){return common_utils_componentRegistry}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArrayDiff",function(){return getArrayDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"difference",function(){return difference}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArrayIndexMap",function(){return getArrayIndexMap}),__webpack_require__.d(muze_utils_src_namespaceObject,"arraysEqual",function(){return arraysEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"getReadableTicks",function(){return common_utils_getReadableTicks}),__webpack_require__.d(muze_utils_src_namespaceObject,"unique",function(){return unique}),__webpack_require__.d(muze_utils_src_namespaceObject,"dmMultipleSelection",function(){return common_utils_dmMultipleSelection}),__webpack_require__.d(muze_utils_src_namespaceObject,"pointWithinCircle",function(){return pointWithinCircle}),__webpack_require__.d(muze_utils_src_namespaceObject,"selectElement",function(){return renderer_utils_selectElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"makeElement",function(){return makeElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"applyStyle",function(){return renderer_utils_applyStyle}),__webpack_require__.d(muze_utils_src_namespaceObject,"addClass",function(){return renderer_utils_addClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"removeClass",function(){return renderer_utils_removeClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"appendElement",function(){return appendElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"setAttrs",function(){return renderer_utils_setAttrs}),__webpack_require__.d(muze_utils_src_namespaceObject,"setStyles",function(){return renderer_utils_setStyles}),__webpack_require__.d(muze_utils_src_namespaceObject,"createElement",function(){return renderer_utils_createElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"createElements",function(){return renderer_utils_createElements}),__webpack_require__.d(muze_utils_src_namespaceObject,"clipElement",function(){return renderer_utils_clipElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"getElementsByClassName",function(){return renderer_utils_getElementsByClassName}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMousePos",function(){return getMousePos}),__webpack_require__.d(muze_utils_src_namespaceObject,"getEvent",function(){return renderer_utils_getEvent}),__webpack_require__.d(muze_utils_src_namespaceObject,"getD3Drag",function(){return renderer_utils_getD3Drag}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSmartComputedStyle",function(){return renderer_utils_getSmartComputedStyle}),__webpack_require__.d(muze_utils_src_namespaceObject,"getClientPoint",function(){return renderer_utils_getClientPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"hasTouch",function(){return hasTouch}),__webpack_require__.d(muze_utils_src_namespaceObject,"Store",function(){return store_Store}),__webpack_require__.d(muze_utils_src_namespaceObject,"transactor",function(){return store_transactor}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMillisecond",function(){return src_millisecond}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeSecond",function(){return src_second}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMinute",function(){return src_minute}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeHour",function(){return src_hour}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeDay",function(){return src_day}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeWeek",function(){return sunday}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMonth",function(){return src_month}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeYear",function(){return src_year}),__webpack_require__.d(muze_utils_src_namespaceObject,"Smartlabel",function(){return SmartlabelManager_default.a}),__webpack_require__.d(muze_utils_src_namespaceObject,"dataSelect",function(){return dataSelect}),__webpack_require__.d(muze_utils_src_namespaceObject,"LifeCycleManager",function(){return lifecycle_manager}),__webpack_require__.d(muze_utils_src_namespaceObject,"DimensionSubtype",function(){return dist_datamodel.DimensionSubtype}),__webpack_require__.d(muze_utils_src_namespaceObject,"FieldType",function(){return dist_datamodel.FieldType}),__webpack_require__.d(muze_utils_src_namespaceObject,"MeasureSubtype",function(){return dist_datamodel.MeasureSubtype}),__webpack_require__.d(muze_utils_src_namespaceObject,"DateTimeFormatter",function(){return dist_datamodel.DateTimeFormatter}),__webpack_require__.d(muze_utils_src_namespaceObject,"DM_DERIVATIVES",function(){return dist_datamodel.DM_DERIVATIVES}),__webpack_require__.d(muze_utils_src_namespaceObject,"GROUP_BY_FUNCTIONS",function(){return dist_datamodel.GROUP_BY_FUNCTIONS}),__webpack_require__.d(muze_utils_src_namespaceObject,"RTree",function(){return RTree});var enums_constants_namespaceObject={};__webpack_require__.r(enums_constants_namespaceObject),__webpack_require__.d(enums_constants_namespaceObject,"CLASSPREFIX",function(){return CLASSPREFIX}),__webpack_require__.d(enums_constants_namespaceObject,"STACK",function(){return STACK}),__webpack_require__.d(enums_constants_namespaceObject,"GROUP",function(){return GROUP}),__webpack_require__.d(enums_constants_namespaceObject,"IDENTITY",function(){return IDENTITY}),__webpack_require__.d(enums_constants_namespaceObject,"ANGLE",function(){return constants_ANGLE}),__webpack_require__.d(enums_constants_namespaceObject,"RADIUS",function(){return constants_RADIUS}),__webpack_require__.d(enums_constants_namespaceObject,"SIZE",function(){return SIZE}),__webpack_require__.d(enums_constants_namespaceObject,"COLOR",function(){return COLOR}),__webpack_require__.d(enums_constants_namespaceObject,"SHAPE",function(){return SHAPE}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT",function(){return TEXT}),__webpack_require__.d(enums_constants_namespaceObject,"OUTER_RADIUS_VALUE",function(){return OUTER_RADIUS_VALUE}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT_ANCHOR_MIDDLE",function(){return TEXT_ANCHOR_MIDDLE}),__webpack_require__.d(enums_constants_namespaceObject,"ENCODING",function(){return ENCODING}),__webpack_require__.d(enums_constants_namespaceObject,"STROKE_DASHARRAY",function(){return STROKE_DASHARRAY}),__webpack_require__.d(enums_constants_namespaceObject,"ASCENDING",function(){return ASCENDING}),__webpack_require__.d(enums_constants_namespaceObject,"AGG_FN_SUM",function(){return AGG_FN_SUM}),__webpack_require__.d(enums_constants_namespaceObject,"AREA_LAYER",function(){return AREA_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"ARC_LAYER",function(){return ARC_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"LINE_LAYER",function(){return LINE_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT_LAYER",function(){return TEXT_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"POINT_LAYER",function(){return POINT_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"BAR_LAYER",function(){return BAR_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"TICK_LAYER",function(){return TICK_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"SIMPLE_LAYER",function(){return SIMPLE_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"BASE_LAYER",function(){return BASE_LAYER});var props_namespaceObject={};__webpack_require__.r(props_namespaceObject),__webpack_require__.d(props_namespaceObject,"DATA",function(){return DATA}),__webpack_require__.d(props_namespaceObject,"CONFIG",function(){return CONFIG}),__webpack_require__.d(props_namespaceObject,"MEASUREMENT",function(){return MEASUREMENT}),__webpack_require__.d(props_namespaceObject,"DOMAIN",function(){return DOMAIN}),__webpack_require__.d(props_namespaceObject,"MOUNT",function(){return MOUNT});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var visual_group_src_enums_constants_namespaceObject={};__webpack_require__.r(visual_group_src_enums_constants_namespaceObject),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"X",function(){return X}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"Y",function(){return Y}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"WIDTH",function(){return WIDTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HEIGHT",function(){return HEIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASUREMENT",function(){return constants_MEASUREMENT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CONFIG",function(){return constants_CONFIG}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MIN_UNIT_WIDTH",function(){return MIN_UNIT_WIDTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MIN_UNIT_HEIGHT",function(){return MIN_UNIT_HEIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DIMENSIONS",function(){return DIMENSIONS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASURES",function(){return MEASURES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DIMENSION",function(){return DIMENSION}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASURE",function(){return MEASURE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"PIVOT",function(){return PIVOT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FORMAT",function(){return FORMAT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MOUNT",function(){return constants_MOUNT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HAS_DATA_UPDATED",function(){return HAS_DATA_UPDATED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ROWS",function(){return ROWS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLUMNS",function(){return COLUMNS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DATA",function(){return constants_DATA}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COL",function(){return COL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ROW",function(){return ROW}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLUMN",function(){return COLUMN}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLOR",function(){return enums_constants_COLOR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SHAPE",function(){return enums_constants_SHAPE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SIZE",function(){return enums_constants_SIZE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DETAIL",function(){return DETAIL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LAYERS",function(){return LAYERS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TRANSFORM",function(){return TRANSFORM}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ORDINAL",function(){return enums_constants_ORDINAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LINEAR",function(){return enums_constants_LINEAR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LEFT",function(){return constants_LEFT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RIGHT",function(){return constants_RIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TOP",function(){return enums_constants_TOP}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BOTTOM",function(){return enums_constants_BOTTOM}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RETINAL",function(){return RETINAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CELL",function(){return CELL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"X_AXES",function(){return X_AXES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"Y_AXES",function(){return Y_AXES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ENTRY_CELLS",function(){return ENTRY_CELLS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"INITIALIZED",function(){return INITIALIZED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"EXIT_CELLS",function(){return EXIT_CELLS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"AXIS",function(){return AXIS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"UNIT",function(){return UNIT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"UPDATED",function(){return UPDATED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BEFORE_UPDATE",function(){return BEFORE_UPDATE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"VALUE_MATRIX",function(){return VALUE_MATRIX}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FACET_HEADERS",function(){return FACET_HEADERS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RADIUS",function(){return enums_constants_RADIUS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ANGLE",function(){return enums_constants_ANGLE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ANGLE0",function(){return ANGLE0}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ARC",function(){return ARC}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CATEGORICAL",function(){return constants_CATEGORICAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TEMPORAL",function(){return constants_TEMPORAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BAR",function(){return BAR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LINE",function(){return LINE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"POINT",function(){return POINT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"PRIMARY",function(){return PRIMARY}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SECONDARY",function(){return SECONDARY}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BOTH",function(){return BOTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"INTERACTION",function(){return INTERACTION}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"GRID_LINES",function(){return GRID_LINES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"GRID_BANDS",function(){return GRID_BANDS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HEADER",function(){return HEADER}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FACET",function(){return FACET}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DEFAULT",function(){return DEFAULT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ASCENDING",function(){return constants_ASCENDING}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DESCENDING",function(){return DESCENDING}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DARK",function(){return DARK}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"NONE",function(){return NONE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"NORMAL",function(){return NORMAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DARKER",function(){return DARKER});var helpers_namespaceObject={};__webpack_require__.r(helpers_namespaceObject),__webpack_require__.d(helpers_namespaceObject,"transformColor",function(){return helpers_transformColor}),__webpack_require__.d(helpers_namespaceObject,"applyInteractionStyle",function(){return helpers_applyInteractionStyle}),__webpack_require__.d(helpers_namespaceObject,"retrieveEncodingInf",function(){return helpers_retrieveEncodingInf}),__webpack_require__.d(helpers_namespaceObject,"encodingFieldInfRetriever",function(){return encodingFieldInfRetriever}),__webpack_require__.d(helpers_namespaceObject,"setNullsInStack",function(){return setNullsInStack}),__webpack_require__.d(helpers_namespaceObject,"setNulls",function(){return helpers_setNulls}),__webpack_require__.d(helpers_namespaceObject,"transformData",function(){return helpers_transformData}),__webpack_require__.d(helpers_namespaceObject,"getIndividualClassName",function(){return getIndividualClassName}),__webpack_require__.d(helpers_namespaceObject,"dataNormalizers",function(){return dataNormalizers}),__webpack_require__.d(helpers_namespaceObject,"getNormalizedData",function(){return helpers_getNormalizedData}),__webpack_require__.d(helpers_namespaceObject,"domainCalculator",function(){return domainCalculator}),__webpack_require__.d(helpers_namespaceObject,"attachDataToVoronoi",function(){return helpers_attachDataToVoronoi}),__webpack_require__.d(helpers_namespaceObject,"updateStyle",function(){return helpers_updateStyle}),__webpack_require__.d(helpers_namespaceObject,"animateGroup",function(){return helpers_animateGroup}),__webpack_require__.d(helpers_namespaceObject,"positionPoints",function(){return positionPoints}),__webpack_require__.d(helpers_namespaceObject,"getGroupSpan",function(){return getGroupSpan}),__webpack_require__.d(helpers_namespaceObject,"getPlotMeasurement",function(){return helpers_getPlotMeasurement}),__webpack_require__.d(helpers_namespaceObject,"renderLayer",function(){return helpers_renderLayer}),__webpack_require__.d(helpers_namespaceObject,"resolveInvalidTransformType",function(){return helpers_resolveInvalidTransformType}),__webpack_require__.d(helpers_namespaceObject,"getValidTransform",function(){return getValidTransform}),__webpack_require__.d(helpers_namespaceObject,"getValidTransformForAggFn",function(){return helpers_getValidTransformForAggFn}),__webpack_require__.d(helpers_namespaceObject,"getMarkId",function(){return helpers_getMarkId}),__webpack_require__.d(helpers_namespaceObject,"resolveEncodingValues",function(){return helpers_resolveEncodingValues}),__webpack_require__.d(helpers_namespaceObject,"getColorMetaInf",function(){return getColorMetaInf}),__webpack_require__.d(helpers_namespaceObject,"toCartesianCoordinates",function(){return toCartesianCoordinates}),__webpack_require__.d(helpers_namespaceObject,"sortData",function(){return sortData}),__webpack_require__.d(helpers_namespaceObject,"getBoundBoxes",function(){return helpers_getBoundBoxes}),__webpack_require__.d(helpers_namespaceObject,"getDataFromEvent",function(){return helpers_getDataFromEvent});var point_helper_namespaceObject={};__webpack_require__.r(point_helper_namespaceObject),__webpack_require__.d(point_helper_namespaceObject,"prepareDrawingInf",function(){return helper_prepareDrawingInf}),__webpack_require__.d(point_helper_namespaceObject,"pointTranslators",function(){return helper_pointTranslators}),__webpack_require__.d(point_helper_namespaceObject,"getStrokeWidthByPosition",function(){return getStrokeWidthByPosition});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var src_enums_namespaceObject={};__webpack_require__.r(src_enums_namespaceObject),__webpack_require__.d(src_enums_namespaceObject,"PROPS",function(){return props_namespaceObject}),__webpack_require__.d(src_enums_namespaceObject,"LAYER_TYPES",function(){return layer_types_namespaceObject}),__webpack_require__.d(src_enums_namespaceObject,"CONSTANTS",function(){return enums_constants_namespaceObject});var visual_unit_src_helper_namespaceObject={};__webpack_require__.r(visual_unit_src_helper_namespaceObject),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getDimensionMeasureMap",function(){return helper_getDimensionMeasureMap}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"transformDataModels",function(){return transformDataModels}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayerFromDef",function(){return helper_getLayerFromDef}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"resolveEncodingTransform",function(){return resolveEncodingTransform}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"sanitizeLayerDef",function(){return helper_sanitizeLayerDef}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"attachDataToLayers",function(){return attachDataToLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"attachAxisToLayers",function(){return helper_attachAxisToLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayerAxisIndex",function(){return helper_getLayerAxisIndex}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"unionDomainFromLayers",function(){return helper_unionDomainFromLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"renderLayers",function(){return helper_renderLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getNearestDimensionalValue",function(){return helper_getNearestDimensionalValue}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayersBy",function(){return getLayersBy}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"removeLayersBy",function(){return removeLayersBy}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createSideEffectGroup",function(){return helper_createSideEffectGroup}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createRenderPromise",function(){return createRenderPromise}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getRadiusRange",function(){return getRadiusRange}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"setAxisRange",function(){return helper_setAxisRange}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"isXandYMeasures",function(){return helper_isXandYMeasures}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getValuesMap",function(){return getValuesMap}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getSelectionRejectionModel",function(){return getSelectionRejectionModel}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createRTree",function(){return helper_createRTree});var reactive_props_namespaceObject={};__webpack_require__.r(reactive_props_namespaceObject),__webpack_require__.d(reactive_props_namespaceObject,"CONFIG",function(){return reactive_props_CONFIG}),__webpack_require__.d(reactive_props_namespaceObject,"DATA",function(){return reactive_props_DATA}),__webpack_require__.d(reactive_props_namespaceObject,"AXES",function(){return AXES}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERDEFS",function(){return LAYERDEFS}),__webpack_require__.d(reactive_props_namespaceObject,"WIDTH",function(){return reactive_props_WIDTH}),__webpack_require__.d(reactive_props_namespaceObject,"HEIGHT",function(){return reactive_props_HEIGHT}),__webpack_require__.d(reactive_props_namespaceObject,"MOUNT",function(){return reactive_props_MOUNT}),__webpack_require__.d(reactive_props_namespaceObject,"TRANSFORM",function(){return reactive_props_TRANSFORM}),__webpack_require__.d(reactive_props_namespaceObject,"TRANSFORMEDDATA",function(){return TRANSFORMEDDATA}),__webpack_require__.d(reactive_props_namespaceObject,"DATADOMAIN",function(){return DATADOMAIN}),__webpack_require__.d(reactive_props_namespaceObject,"FIELDS",function(){return FIELDS}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERAXISINDEX",function(){return LAYERAXISINDEX}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERS",function(){return reactive_props_LAYERS}),__webpack_require__.d(reactive_props_namespaceObject,"DOMAIN",function(){return reactive_props_DOMAIN});var visual_unit_src_enums_constants_namespaceObject={};__webpack_require__.r(visual_unit_src_enums_constants_namespaceObject),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CLASSPREFIX",function(){return enums_constants_CLASSPREFIX}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"IDFIELD",function(){return IDFIELD}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_LINE_PARENT_GROUP_CLASS",function(){return GRID_LINE_PARENT_GROUP_CLASS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_BAND_PARENT_GROUP_CLASS",function(){return GRID_BAND_PARENT_GROUP_CLASS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_PARENT_GROUP",function(){return GRID_PARENT_GROUP}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"BAND",function(){return enums_constants_BAND}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"TICK",function(){return TICK}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_BAND",function(){return GRID_BAND}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_LINE",function(){return GRID_LINE}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CONSOLIDATED",function(){return CONSOLIDATED}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"FRAGMENTED",function(){return FRAGMENTED}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"FACET_BY_FIELDS",function(){return FACET_BY_FIELDS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"RETINAL_FIELDS",function(){return RETINAL_FIELDS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"PARENT_ALIAS",function(){return PARENT_ALIAS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"LAYERS",function(){return constants_LAYERS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CACHED_DATA",function(){return CACHED_DATA}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"STORE",function(){return STORE});var visual_unit_src_enums_namespaceObject={};__webpack_require__.r(visual_unit_src_enums_namespaceObject),__webpack_require__.d(visual_unit_src_enums_namespaceObject,"REACTIVE_PROPS",function(){return reactive_props_namespaceObject}),__webpack_require__.d(visual_unit_src_enums_namespaceObject,"CONSTANTS",function(){return visual_unit_src_enums_constants_namespaceObject});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return behaviours_TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"ANCHORS",function(){return side_effects_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"BRUSH_ANCHORS",function(){return side_effects_BRUSH_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"PERSISTENT_ANCHORS",function(){return side_effects_PERSISTENT_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"FILTER",function(){return side_effects_FILTER}),__webpack_require__.d(side_effects_namespaceObject,"HIGHLIGHTER",function(){return side_effects_HIGHLIGHTER}),__webpack_require__.d(side_effects_namespaceObject,"CROSSLINE",function(){return CROSSLINE}),__webpack_require__.d(side_effects_namespaceObject,"TOOLTIP",function(){return side_effects_TOOLTIP}),__webpack_require__.d(side_effects_namespaceObject,"FRAGMENTED_TOOLTIP",function(){return FRAGMENTED_TOOLTIP}),__webpack_require__.d(side_effects_namespaceObject,"AXIS_LABEL_HIGHLIGHTER",function(){return AXIS_LABEL_HIGHLIGHTER});var src_side_effects_namespaceObject={};__webpack_require__.r(src_side_effects_namespaceObject),__webpack_require__.d(src_side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(src_side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"FragmentedTooltip",function(){return fragmented_tooltip_FragmentedTooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(src_side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(src_side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"AxisLabelHighLighter",function(){return axis_labels_highlighter_AxisLabelHighLighter});var group_utils_namespaceObject={};__webpack_require__.r(group_utils_namespaceObject),__webpack_require__.d(group_utils_namespaceObject,"initStore",function(){return group_utils_initStore}),__webpack_require__.d(group_utils_namespaceObject,"isDistributionEqual",function(){return group_utils_isDistributionEqual}),__webpack_require__.d(group_utils_namespaceObject,"initializeCacheMaps",function(){return initializeCacheMaps}),__webpack_require__.d(group_utils_namespaceObject,"getAxisKey",function(){return getAxisKey}),__webpack_require__.d(group_utils_namespaceObject,"getCellKey",function(){return getCellKey}),__webpack_require__.d(group_utils_namespaceObject,"extractUnitConfig",function(){return group_utils_extractUnitConfig}),__webpack_require__.d(group_utils_namespaceObject,"hasOneField",function(){return hasOneField}),__webpack_require__.d(group_utils_namespaceObject,"getHeaderText",function(){return getHeaderText}),__webpack_require__.d(group_utils_namespaceObject,"headerCreator",function(){return group_utils_headerCreator}),__webpack_require__.d(group_utils_namespaceObject,"findInGroup",function(){return group_utils_findInGroup}),__webpack_require__.d(group_utils_namespaceObject,"getAxisType",function(){return group_utils_getAxisType}),__webpack_require__.d(group_utils_namespaceObject,"retriveDomainFromData",function(){return retriveDomainFromData}),__webpack_require__.d(group_utils_namespaceObject,"mutateAxesFromMap",function(){return mutateAxesFromMap}),__webpack_require__.d(group_utils_namespaceObject,"getEncoder",function(){return group_utils_getEncoder}),__webpack_require__.d(group_utils_namespaceObject,"getHeaderAxisFrom",function(){return group_utils_getHeaderAxisFrom}),__webpack_require__.d(group_utils_namespaceObject,"setFacetsAndProjections",function(){return setFacetsAndProjections}),__webpack_require__.d(group_utils_namespaceObject,"getBorders",function(){return getBorders}),__webpack_require__.d(group_utils_namespaceObject,"getFieldsFromSuppliedLayers",function(){return getFieldsFromSuppliedLayers}),__webpack_require__.d(group_utils_namespaceObject,"extractFields",function(){return group_utils_extractFields}),__webpack_require__.d(group_utils_namespaceObject,"sortFacetFields",function(){return group_utils_sortFacetFields}),__webpack_require__.d(group_utils_namespaceObject,"removeExitCells",function(){return group_utils_removeExitCells});var encoder_helper_namespaceObject={};__webpack_require__.r(encoder_helper_namespaceObject),__webpack_require__.d(encoder_helper_namespaceObject,"getAdjustedDomain",function(){return getAdjustedDomain}),__webpack_require__.d(encoder_helper_namespaceObject,"generateAxisFromMap",function(){return encoder_helper_generateAxisFromMap}),__webpack_require__.d(encoder_helper_namespaceObject,"sanitizeIndividualLayerConfig",function(){return encoder_helper_sanitizeIndividualLayerConfig}),__webpack_require__.d(encoder_helper_namespaceObject,"mutateAxesFromMap",function(){return encoder_helper_mutateAxesFromMap}),__webpack_require__.d(encoder_helper_namespaceObject,"getDefaultMark",function(){return encoder_helper_getDefaultMark}),__webpack_require__.d(encoder_helper_namespaceObject,"createRetinalAxis",function(){return encoder_helper_createRetinalAxis}),__webpack_require__.d(encoder_helper_namespaceObject,"getIndex",function(){return getIndex}),__webpack_require__.d(encoder_helper_namespaceObject,"getLayerConfFromFields",function(){return getLayerConfFromFields}),__webpack_require__.d(encoder_helper_namespaceObject,"resolveAxisConfig",function(){return encoder_helper_resolveAxisConfig}),__webpack_require__.d(encoder_helper_namespaceObject,"getSortingConfig",function(){return getSortingConfig});var encoder_namespaceObject={};__webpack_require__.r(encoder_namespaceObject),__webpack_require__.d(encoder_namespaceObject,"VisualEncoder",function(){return visual_encoder_VisualEncoder}),__webpack_require__.d(encoder_namespaceObject,"CartesianEncoder",function(){return cartesian_encoder_CartesianEncoder}),__webpack_require__.d(encoder_namespaceObject,"PolarEncoder",function(){return polar_encoder_PolarEncoder}),__webpack_require__.d(encoder_namespaceObject,"RetinalEncoder",function(){return retinal_encoder_RetinalEncoder});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendMarker",function(){return legend_marker_LegendMarker});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var src_number=function(a,b){return a=+a,b=+b,function(t){return a*(1-t)+b*t}},define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex=/^#([0-9a-f]{3,8})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_formatHex(){return this.rgb().formatHex()}function color_formatRgb(){return this.rgb().formatRgb()}function color_color(format){var m,l;return format=(format+"").trim().toLowerCase(),(m=reHex.exec(format))?(l=m[1].length,m=parseInt(m[1],16),6===l?rgbn(m):3===l?new Rgb(m>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):8===l?new Rgb(m>>24&255,m>>16&255,m>>8&255,(255&m)/255):4===l?new Rgb(m>>12&15|m>>8&240,m>>8&15|m>>4&240,m>>4&15|240&m,((15&m)<<4|15&m)/255):null):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function rgb_formatHex(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)}function rgb_formatRgb(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===a?")":", "+a+")")}function hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}function hsl(h,s,l,opacity){return 1===arguments.length?hslConvert(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Color,color_color,{copy:function copy(channels){return Object.assign(new this.constructor,this,channels)},displayable:function displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHsl:function color_formatHsl(){return hslConvert(this).formatHsl()},formatRgb:color_formatRgb,toString:color_formatRgb}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rgb_formatHex,formatHex:rgb_formatHex,formatRgb:rgb_formatRgb,toString:rgb_formatRgb})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function formatHsl(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===a?")":", "+a+")")}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;return new FormatSpecifier({fill:match[1],align:match[2],sign:match[3],symbol:match[4],zero:match[5],width:match[6],comma:match[7],precision:match[8]&&match[8].slice(1),trim:match[9],type:match[10]})}function FormatSpecifier(specifier){this.fill=void 0===specifier.fill?" ":specifier.fill+"",this.align=void 0===specifier.align?">":specifier.align+"",this.sign=void 0===specifier.sign?"-":specifier.sign+"",this.symbol=void 0===specifier.symbol?"":specifier.symbol+"",this.zero=!!specifier.zero,this.width=void 0===specifier.width?void 0:+specifier.width,this.comma=!!specifier.comma,this.precision=void 0===specifier.precision?void 0:+specifier.precision,this.trim=!!specifier.trim,this.type=void 0===specifier.type?"":specifier.type+""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},locale_map=Array.prototype.map,prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=void 0===locale.grouping||void 0===locale.thousands?src_identity:function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale_map.call(locale.grouping,Number),locale.thousands+""),currencyPrefix=void 0===locale.currency?"":locale.currency[0]+"",currencySuffix=void 0===locale.currency?"":locale.currency[1]+"",decimal=void 0===locale.decimal?".":locale.decimal+"",numerals=void 0===locale.numerals?src_identity:function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale_map.call(locale.numerals,String)),percent=void 0===locale.percent?"%":locale.percent+"",minus=void 0===locale.minus?"-":locale.minus+"",nan=void 0===locale.nan?"NaN":locale.nan+"";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(void 0===precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currencyPrefix:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currencySuffix:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=isNaN(value)?nan:formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:minus:"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=void 0===precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=0===arguments.length?new Date:new Date(+date)),date}return interval.floor=function(date){return floori(date=new Date(+date)),date},interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var year_year=newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()});year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,month_month=(year_year.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,durationMinute=(month_month.range,6e4),durationWeek=6048e5;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),day_day=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day,hour_hour=(day_day.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,minute_minute=(hour_hour.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,second_second=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()})),src_second=second_second,millisecond_millisecond=(second_second.range,newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start}));millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond;millisecond_millisecond.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcDay=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay,utcYear=(utcDay.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newDate(y,m,d){return{y:y,m:m,d:d,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseQuarter(d,string,i){var n=numberRe.exec(string.slice(i,i+1));return n?(d.q=3*n[0]-3,i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.s=+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d)-1,d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d)-1,d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d)-1,d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d)-1,d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.getHours()>=12)]},q:function formatQuarter(d){return 1+~~(d.getMonth()/3)},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.getUTCHours()>=12)]},q:function formatUTCQuarter(d){return 1+~~(d.getUTCMonth()/3)},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},q:parseQuarter,Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newDate(d.y,0,1))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=localDate(newDate(d.y,0,1))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newDate(d.y,0,1)).getUTCDay():localDate(newDate(d.y,0,1)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):localDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",!1);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier+="",!0);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,src_defaultLocale_locale.utcFormat,src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""},sequential_multi_cubehelix=cubehelixLong(cubehelix_cubehelix(300,.5,0),cubehelix_cubehelix(-240,.5,1)),BuGn=src_ramp(new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(d3_scale_chromatic_src_colors)),BuPu=src_ramp(new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(d3_scale_chromatic_src_colors)),GnBu=src_ramp(new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(d3_scale_chromatic_src_colors)),OrRd=src_ramp(new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(d3_scale_chromatic_src_colors)),PuBuGn=src_ramp(new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(d3_scale_chromatic_src_colors)),PuBu=src_ramp(new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(d3_scale_chromatic_src_colors)),PuRd=src_ramp(new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(d3_scale_chromatic_src_colors)),RdPu=src_ramp(new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(d3_scale_chromatic_src_colors)),YlGnBu=src_ramp(new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(d3_scale_chromatic_src_colors)),YlGn=src_ramp(new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(d3_scale_chromatic_src_colors)),YlOrBr=src_ramp(new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(d3_scale_chromatic_src_colors)),YlOrRd=src_ramp(new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(d3_scale_chromatic_src_colors)),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",swap=function swap(arr,i,j){var tmp=arr[i];arr[i]=arr[j],arr[j]=tmp},defaultCompare=function defaultCompare(a,b){return a>b?-1:a>b?1:0},quick_select=function quickselect(arr,k,left,right,compare){!function quickselectStep(arr,k,left,right,compare){for(;right>left;){if(right-left>600){var n=right-left+1,m=k-left+1,z=Math.log(n),s=.5*Math.exp(2*z/3),sd=.5*Math.sqrt(z*s*(n-s)/n)*(m-n/2<0?-1:1);quickselectStep(arr,k,Math.max(left,Math.floor(k-m*s/n+sd)),Math.min(right,Math.floor(k+(n-m)*s/n+sd)),compare)}var t=arr[k],i=left,j=right;for(swap(arr,left,k),compare(arr[right],t)>0&&swap(arr,left,right);i0;)j--}0===compare(arr[left],t)?swap(arr,left,j):swap(arr,++j,right),j<=k&&(left=j+1),k<=j&&(right=j-1)}}(arr,k,left||0,right||arr.length-1,compare||defaultCompare)};function _defineProperties(target,props){for(var i=0;i=a.minX&&b.maxY>=a.minY},findItem=function findItem(item,items,equalsFn){if(!equalsFn)return items.indexOf(item);for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:9;!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RTree),this._maxEntries=Math.max(4,maxEntries),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}return function _createClass(Constructor,protoProps,staticProps){return protoProps&&_defineProperties(Constructor.prototype,protoProps),staticProps&&_defineProperties(Constructor,staticProps),Constructor}(RTree,[{key:"all",value:function all(){return _all(this.data,[])}},{key:"search",value:function search(bbox){var node=this.data,result=[];if(!intersects(bbox,node))return result;for(var toBBox=this.toBBox,nodesToSearch=[];node;){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=node.children[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var child=_step.value,childBBox=node.leaf?toBBox(child):child;intersects(bbox,childBBox)&&(node.leaf?result.push(child):contains(bbox,childBBox)?_all(child,result):nodesToSearch.push(child))}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}node=nodesToSearch.pop()}return result}},{key:"load",value:function load(data){if(!data||!data.length)return this;if(data.length=0&&insertPath[level].children.length>this._maxEntries;)this.split(insertPath,level),level--;this.adjustParentBoxes(bbox,insertPath,level)}},{key:"split",value:function split(insertPath,level){var node=insertPath[level],M=node.children.length,m=this._minEntries;this.chooseSplitAxis(node,m,M);var splitIndex=this.chooseSplitIndex(node,m,M),newNode=createNode(node.children.splice(splitIndex,node.children.length-splitIndex));newNode.height=node.height,newNode.leaf=node.leaf,calcBBox(node,this.toBBox),calcBBox(newNode,this.toBBox),level?insertPath[level-1].children.push(newNode):this.splitRoot(node,newNode)}},{key:"splitRoot",value:function splitRoot(node,newNode){this.data=createNode([node,newNode]),this.data.height=node.height+1,this.data.leaf=!1,calcBBox(this.data,this.toBBox)}},{key:"chooseSplitIndex",value:function chooseSplitIndex(node,m,M){for(var index,minOverlap=1/0,minArea=1/0,i=m;i<=M-m;i++){var bbox1=distBBox(node,0,i,this.toBBox),bbox2=distBBox(node,i,M,this.toBBox),overlap=intersectionArea(bbox1,bbox2),area=bboxArea(bbox1)+bboxArea(bbox2);overlap=m;_i--){var _child=node.children[_i];r_tree_extend(rightBBox,node.leaf?toBBox(_child):_child),margin+=bboxMargin(rightBBox)}return margin}},{key:"adjustParentBoxes",value:function adjustParentBoxes(bbox,path,level){for(var i=level;i>=0;i--)r_tree_extend(path[i],bbox)}},{key:"condense",value:function condense(path){for(var siblings,i=path.length-1;i>=0;i--)0===path[i].children.length?i>0?(siblings=path[i-1].children).splice(siblings.indexOf(path[i]),1):this.clear():calcBBox(path[i],this.toBBox)}}]),RTree}(),reserved_fields={ROW_ID:"__id__",MEASURE_NAMES:"__measure_names__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES={POLAR:"polar",CARTESIAN:"cartesian"},DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,pi=Math.PI,halfPi=pi/2,tau=2*pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/pi);context.moveTo(r,0),context.arc(0,0,r,0,tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},kr=Math.sin(pi/10)/Math.sin(7*pi/10),kx=Math.sin(tau/10)*kr,ky=-Math.cos(tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},path_pi=Math.PI,path_tau=2*path_pi,tauEpsilon=path_tau-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((path_pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y,ccw=!!ccw;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%path_tau+path_tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=path_pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},none=function(series){for(var n=series.length,o=new Array(n);--n>=0;)o[n]=n;return o},order_ascending=function(series){var sums=series.map(ascending_sum);return none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}function _point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:!function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(ia?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function hsl_hsl(hue){return function(start,end){var h=hue((start=hsl(start)).h,(end=hsl(end)).h),s=nogamma(start.s,end.s),l=nogamma(start.l,end.l),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.h=h(t),start.s=s(t),start.l=l(t),start.opacity=opacity(t),start+""}}}hsl_hsl(color_hue);var hslLong=hsl_hsl(nogamma);function piecewise_piecewise(interpolate,values){for(var i=0,n=values.length-1,v=values[0],I=new Array(n<0?0:n);i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},getExtremePoint=function getExtremePoint(points,compareValue,minOrMax){for(var extremePoint,point,val,len=points.length,minOrMaxVal="max"===minOrMax?-1/0:1/0,i=0;iminOrMaxVal)&&(minOrMaxVal=val,extremePoint=point);return extremePoint},getMinPoint=function getMinPoint(points,compareValue){return getExtremePoint(points,compareValue,"min")},getMaxPoint=function getMaxPoint(points,compareValue){return getExtremePoint(points,compareValue,"max")},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},reqAnimFrame=requestAnimationFrame,cancelAnimFrame=cancelAnimationFrame,capitalizeFirst=function capitalizeFirst(text){return(text=text.toLowerCase()).replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1)})},unique=function unique(arr){var fn=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(d){return d},vals=arr.reduce(function(acc,v){return acc[fn(v)]=v,acc},{});return Object.values(vals)},getMinDiff=function getMinDiff(arr,index){var diff,uniqueVals;if((uniqueVals=unique(void 0!==index?arr.map(function(d){return d[index]}):arr)).length>1){diff=Math.abs(uniqueVals[1]-uniqueVals[0]);for(var i=2,len=uniqueVals.length;i0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0},common_utils_isEqual=function isEqual(type){return function(oldVal,newVal){return"Array"===type?!!oldVal&&arraysEqual(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},enableChainedTransaction=function enableChainedTransaction(transactionModel,transactionEndpoint,transactionItems){return transactionItems.forEach(function(item){return transactionModel.registerImmediateListener(item,function(_ref3){var newVal=_slicedToArray(_ref3,2)[1];return transactionEndpoint[item](newVal)})})},isHTMLElem=function isHTMLElem(elem){return elem instanceof common_utils_HTMLElement},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||dataSelect(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},interpolateArray=function interpolateArray(data,fitCount){var linearInterpolate=function linearInterpolate(before,after,atPoint){return before+(after-before)*atPoint},newData=[],springFactor=(data.length-1)/(fitCount-1);newData[0]=data[0];for(var i=1;i1&&(t-=1),t<1/6?p+6*(q-p)*t:t<.5?q:t<2/3?p+(q-p)*(2/3-t)*6:p}var hslToRgb=function hslToRgb(h,s,l){var r,g,b,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;if(0===s)r=g=b=l;else{var q=l<.5?l*(1+s):l+s-l*s,p=2*l-q;r=hue2rgb(p,q,h+1/3),g=hue2rgb(p,q,h),b=hue2rgb(p,q,h-1/3)}return[255*r,255*g,255*b,a]},rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g3&&void 0!==arguments[3]?arguments[3]:1,i=Math.floor(6*h),f=6*h-i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s);switch(i%6){case 0:r=v,g=t,b=p;break;case 1:r=q,g=v,b=p;break;case 2:r=p,g=v,b=t;break;case 3:r=p,g=q,b=v;break;case 4:r=t,g=p,b=v;break;case 5:r=v,g=p,b=q}return[255*r,255*g,255*b,a]},hexToHsv=function hexToHsv(hex){hex=hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(m,r,g,b){return r+r+g+g+b+b});var result=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return result?rgbToHsv(parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)):""},hslaToRgb=function hslaToRgb(h,s,l,a){var _hslToRgb2=_slicedToArray(hslToRgb(h,s,l,a),4);return function RGBAtoRGB(r,g,b,a){var r2=arguments.length>4&&void 0!==arguments[4]?arguments[4]:255,g2=arguments.length>5&&void 0!==arguments[5]?arguments[5]:255,b2=arguments.length>6&&void 0!==arguments[6]?arguments[6]:255,r3=Math.round((1-a)*r2+a*r),g3=Math.round((1-a)*g2+a*g),b3=Math.round((1-a)*b2+a*b);return"rgb(".concat(r3,",").concat(g3,",").concat(b3,")")}(_hslToRgb2[0],_hslToRgb2[1],_hslToRgb2[2],_hslToRgb2[3])},detectColor=function detectColor(col){return/rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/.test(col)||/rgba?\(((25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,\s*?){2}(25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,?\s*([01]\.?\d*?)?\)/.test(col)?"rgb":/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(col)||/^hsla\(([\d.]+),\s*([\d.]+)%,\s*([\d.]+)%,\s*(\d*(?:\.\d+)?)\)$/.test(col)?"hsl":/^#([0-9a-f]{3}){1,2}$/i.test(col)?"hex":col};var assembleModelFromIdentifiers=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=range[0]&&fieldValue<=range[1]})},{saveChild:!1,mode:mode})},getArrayIndexMap=function getArrayIndexMap(arr){return arr.reduce(function(acc,value,i){return acc[value]=i,acc},{})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode,hasBarLayer){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig||d===reserved_fields.ROW_ID});filteredDataModel=dataModel.select(function(fields,rowId){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=propField===reserved_fields.ROW_ID?rowId:fields[propField].internalValue,index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode,hasBarLayer);return filteredDataModel},common_utils_registerListeners=function registerListeners(context,listenerMap){for(var _len2=arguments.length,params=new Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)params[_key2-2]=arguments[_key2];var propListenerMap=listenerMap.apply(void 0,[context].concat(params));for(var key in propListenerMap)if({}.hasOwnProperty.call(propListenerMap,key)){var namespace=params[1].namespace,ns=null;namespace&&(ns=namespace);var mapObj=propListenerMap[key],propType=mapObj.type,props=mapObj.props,listenerFn=mapObj.listener;context.store()[propType](props,listenerFn,!1,{namespace:ns})}},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},escapeHTML=function escapeHTML(str){var htmlEscapes={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})},transposeArray=function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},extendsClass=function extendsClass(cls,extendsFrom,found){if(!cls)return!1;var prototype=cls.prototype;return found=prototype instanceof extendsFrom||extendsClass(prototype,extendsFrom,found)},common_utils_concatModels=function concatModels(dm1,dm2){for(var dataObj1=dm1.getData(),dataObj2=dm2.getData(),data1=dataObj1.data,data2=dataObj2.data,schema1=dataObj1.schema,schema2=dataObj2.schema,commonTuples={},i=0;i0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):(d[0]=0,d[1]=dy)}),_defineProperty(_stackOffsets,"none",offset_none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},pie:function(){var value=d3_shape_src_identity,sortValues=src_descending,sort=null,startAngle=d3_shape_src_constant(0),endAngle=d3_shape_src_constant(tau),padAngle=d3_shape_src_constant(0);function pie(data){var i,j,k,a1,v,n=data.length,sum=0,index=new Array(n),arcs=new Array(n),a0=+startAngle.apply(this,arguments),da=Math.min(tau,Math.max(-tau,endAngle.apply(this,arguments)-a0)),p=Math.min(Math.abs(da)/n,padAngle.apply(this,arguments)),pa=p*(da<0?-1:1);for(i=0;i0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},common_utils_nearestSortingDetails=function nearestSortingDetails(dataModel){var nearestSortDerivation=[].concat(common_utils_toConsumableArray(dataModel.getAncestorDerivations()),common_utils_toConsumableArray(dataModel.getDerivations())).reverse().find(function(derivation){return derivation.op===dist_datamodel.DM_DERIVATIVES.SORT});return nearestSortDerivation?nearestSortDerivation.criteria:null},common_utils_sortingOrder=function sortingOrder(a,b){return a instanceof InvalidAwareTypes||a instanceof InvalidAwareTypes?1:a.localeCompare(b)},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return common_utils_sortingOrder(firstVal,secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return common_utils_sortingOrder(secondVal,firstVal)}),_sortOrderMap),sortCategoricalField=function sortCategoricalField(sortOrder,firstVal,secondVal){var sortOrderType=common_utils_typeof(sortOrder);return sortOrderType===FUNCTION?sortOrder(firstVal,secondVal):sortOrderType===STRING&&sortOrderMap[sortOrder]?sortOrderMap[sortOrder](firstVal,secondVal):null},common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},difference=function difference(arr1,arr2){var _accessors2=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors2[0],fn2=_accessors2[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return!set.has(fn1(value))})},partition=function partition(array,filterFn){return array.reduce(function(acc,v,i){return filterFn(v,i,array)?acc[0].push(v):acc[1].push(v),acc},[[],[]])},mix=function mix(superclass){return{with:function _with(){for(var _len4=arguments.length,mixins=new Array(_len4),_key4=0;_key4<_len4;_key4++)mixins[_key4]=arguments[_key4];return mixins.reduce(function(cls,mixin){return mixin(cls)},superclass)}}},common_utils_componentRegistry=function componentRegistry(comps){var reg=Object.assign({},comps),regObj={register:function register(def,customKey){var key=customKey||def.formalName();return reg[key]=def,regObj},get:function get(){return reg}};return regObj},common_utils_getReadableTicks=function getReadableTicks(domain,steps){var orderedDomain=[Math.min.apply(Math,common_utils_toConsumableArray(domain)),Math.max.apply(Math,common_utils_toConsumableArray(domain))];if(steps<3)return orderedDomain;var tempScale=quantize().domain(orderedDomain).nice(),legendTicks=null;return legendTicks=Symbols.axisBottom().scale(tempScale).scale().ticks(steps),Math.max.apply(Math,common_utils_toConsumableArray(legendTicks))orderedDomain[0]&&legendTicks.unshift(orderedDomain[0]),legendTicks},common_utils_transformColor=function transformColor(rgbaValues,_ref7,datum,apply){var _ref7$h=_ref7.h,h=void 0===_ref7$h?0:_ref7$h,_ref7$s=_ref7.s,s=void 0===_ref7$s?0:_ref7$s,_ref7$l=_ref7.l,l=void 0===_ref7$l?0:_ref7$l,a=_ref7.a,_RGBAToHSLA$code=_slicedToArray(function RGBAToHSLA(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r/=255,g/=255,b/=255;var cmin=Math.min(r,g,b),cmax=Math.max(r,g,b),delta=cmax-cmin,h=0,s=0,l=0;return h=0===delta?0:cmax===r?(g-b)/delta%6:cmax===g?(b-r)/delta+2:(r-g)/delta+4,(h=Math.round(60*h))<0&&(h+=360),l=(cmax+cmin)/2,s=+(100*(s=0===delta?0:delta/(1-Math.abs(2*l-1)))).toFixed(1),l=+(100*l).toFixed(1),{color:"hsla(".concat(h,",").concat(s,"%,").concat(l,"%,").concat(a,")"),code:[h,s,l,a]}}.apply(void 0,common_utils_toConsumableArray(rgbaValues)).code,4),origH=_RGBAToHSLA$code[0],origS=_RGBAToHSLA$code[1],origL=_RGBAToHSLA$code[2],origA=_RGBAToHSLA$code[3],sanitizedA=parseFloat(a||origA,10),newH=origH+h,newS=origS+s,newL=origL+l,newA=sanitizedA+1;return apply||(newA=sanitizedA-1),{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH,newS,newL,newA]}},pointWithinCircle=function pointWithinCircle(c,point){var cx=c.x,cy=c.y,r=c.r,x=point.x,y=point.y;return Math.sqrt(Math.pow(cx-x,2)+Math.pow(cy-y,2))<=r},common_utils_dmMultipleSelection=function dmMultipleSelection(targetData,dm){var targetFields=targetData[0],payloadMap=targetData.slice(1,targetData.length).reduce(function(acc,v){return acc[v]=v,acc},{}),measures=Object.keys(dm.getFieldspace().getMeasure());return function filterFn(fields,i){return"".concat(targetFields.map(function(field){var val;if(field===reserved_fields.MEASURE_NAMES)val=measures;else if(field===reserved_fields.ROW_ID)val=i;else{var currentField=fields[field];val=currentField instanceof InvalidAwareTypes?currentField.value():(currentField||{}).internalValue}return val}))in payloadMap}};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function constantNull(){return null}function remove_remove(){var parent=this.parentNode;parent&&parent.removeChild(this)}function selection_cloneShallow(){var clone=this.cloneNode(!1),parent=this.parentNode;return parent?parent.insertBefore(clone,this.nextSibling):clone}function selection_cloneDeep(){var clone=this.cloneNode(!0),parent=this.parentNode;return parent?parent.insertBefore(clone,this.nextSibling):clone}var filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}var cssNode,cssRoot,cssView,svgNode,degrees=180/Math.PI,decompose_identity={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},decompose=function(a,b,c,d,e,f){var scaleX,scaleY,skewX;return(scaleX=Math.sqrt(a*a+b*b))&&(a/=scaleX,b/=scaleX),(skewX=a*c+b*d)&&(c-=a*skewX,d-=b*skewX),(scaleY=Math.sqrt(c*c+d*d))&&(c/=scaleY,d/=scaleY,skewX/=scaleY),a*d180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i.call(this,t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i.call(this,t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i.call(this,t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},textTween:function(value){var key="text";if(arguments.length<1)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function textTween(value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function textInterpolate(i){return function(t){this.textContent=i.call(this,t)}}(i)),t0}return tween._value=value,tween}(value))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},renderer_utils_applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},appendElement=function appendElement(element1,element2){element1.appendChild(element2)},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_addClass=function addClass(element,className,selector,filterFn){src_select(element).selectAll(selector).each(function(data){var elem=src_select(this);filterFn?filterFn(data)&&elem.classed(className,!0):elem.classed(className,!0)})},renderer_utils_removeClass=function removeClass(element,className,selector,filterFn){src_select(element).selectAll(selector).each(function(data){var elem=src_select(this);filterFn?filterFn(data)&&elem.classed(className,!1):elem.classed(className,!1)})},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i}));var sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(data);sel.enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_clipElement=function clipElement(container,measurement,id){var clipPathElement=makeElement(src_select(container),"clipPath",[1],"#".concat(id));makeElement(clipPathElement,"rect",[1]).attr("x",measurement.x).attr("y",measurement.x).attr("width",measurement.width).attr("height",measurement.height),clipPathElement.attr("clip-path","url(#".concat(id,")"))},renderer_utils_getElementsByClassName=function getElementsByClassName(node,className){return src_select(node).selectAll(className).nodes()},getMousePos=function getMousePos(element,event){var boundingClientRect=element.getBoundingClientRect();return{x:event.x-boundingClientRect.x,y:event.y-boundingClientRect.y}},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_createElement=function createElement(tag,mount){return src_select(mount).append(tag).node()},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(11),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var _len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];if(params.length){var _ref$takesMultiplePar=(meta||{}).takesMultipleParams,takesMultipleParams=void 0!==_ref$takesMultiplePar&&_ref$takesMultiplePar,val=takesMultipleParams?params:params[0];if(meta){var values,prevVal=context.get(nsProp,subNamespace),sanitization=meta.sanitization,typeCheck=meta.typeCheck,typeExpected=meta.typeExpected;if("function"==typeof sanitization&&(val=sanitization(val,prevVal,holder)),"function"==typeof typeCheck)typeCheck(val)&&(values=val);else"string"==typeof typeCheck&&"constructor"===typeCheck?val&&val.constructor.name===typeExpected&&(values=val):values=val;var preset=meta.preset,oldValues=toArray(context.get(nsProp,subNamespace));preset&&preset(values,holder),takesMultipleParams&&oldValues.forEach(function(value,i){void 0===values[i]&&(values[i]=value)}),values&&context.commit(nsProp,values,subNamespace)}else context.commit(nsProp,val,subNamespace);return holder}return context.get(nsProp,subNamespace)}}(store,conf.meta,nameSpaceProp,Array.isArray(conf.value))}if(subNamespace)for(var key in stateProps)store.commit(key,stateProps[key][subNamespace],subNamespace);else void 0===namespace?store.append(stateProps):store.append(namespace,stateProps);return[holder,store]},SmartlabelManager=__webpack_require__(8),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,CLASSPREFIX="muze",STACK="stack",GROUP="group",IDENTITY="identity",constants_ANGLE="angle",constants_RADIUS="radius",SIZE="size",COLOR="color",SHAPE="shape",TEXT="text",OUTER_RADIUS_VALUE="outerRadiusValue",TEXT_ANCHOR_MIDDLE="middle",ENCODING={X:"x",Y:"y",X0:"x0",Y0:"y0",RADIUS:"radius",RADIUS0:"radius0",ANGLE:"angle",ANGLE0:"angle0",COLOR:"color",SHAPE:"shape",SIZE:"size",TEXT:"text"},STROKE_DASHARRAY="stroke-dasharray",ASCENDING="asc",AGG_FN_SUM="sum",AREA_LAYER="area",ARC_LAYER="arc",LINE_LAYER="line",TEXT_LAYER="text",POINT_LAYER="point",BAR_LAYER="bar",TICK_LAYER="tick",SIMPLE_LAYER="simple",BASE_LAYER="base";function simple_layer_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")")))})}(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=Math.min(minTickSpace.width,tickDimWidth),minTickHeight=Math.min(minTickSpace.height,tickDimHeight);return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain))),Math.max.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain))),Math.max.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+(tickValues?axisNamePadding:0)}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?{allTickDimensions:allTickDimensions,tickSize:0,tickDimensions:{height:0,width:0},axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks}:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var renderConfig=axisInstance.renderConfig(),config=axisInstance.config(),show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName,mount=axisInstance.mount(),orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix;if(show){var availableSpace,labelProps,tickSize,selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});if(selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axisInstance.domain().length>0){var labelManager=axisInstance.dependencies().labelManager,range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter;tickSize=axisInstance.getTickSize(),labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks)),availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions,axis_renderer_setFixedBaseline(axisInstance),labels.rotation||!1!==labels.smartTicks?(selectContainer.call(axis),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize)):selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0)}var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"_getRawTickValue",value:function _getRawTickValue(data){return data}},{key:"getTicksBasedOnData",value:function getTicksBasedOnData(tickData){var _this=this,allTicks=renderer_utils_selectElement(this.mount()).selectAll(".tick"),elementToBeModified=null,elementNotToBeModified=null;return tickData&&(elementToBeModified=allTicks.filter(function(tickValue){return tickData===_this._getRawTickValue(tickValue)}),elementNotToBeModified=allTicks.filter(function(tickValue){return!(tickData===_this._getRawTickValue(tickValue))})),{selectionSet:elementToBeModified,rejectionSet:elementNotToBeModified||allTicks}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops?config.stops:config.range&&config.range.length>2?config.range.length:DEFAULT_CONFIG.stops),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}},sanitiseConfigIntervals=function sanitiseConfigIntervals(intervals){return intervals||5};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(common_utils_hslInterpolator(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=Math.min(defaultValue(color[3],0),1),newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=Math.min(a+transformationArr[3]||0,1);return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:51,range:[51,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().stops);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",WIDTH="width",HEIGHT="height",constants_MEASUREMENT="measurement",constants_CONFIG="config",MIN_UNIT_WIDTH="minUnitWidth",MIN_UNIT_HEIGHT="minUnitHeight",DIMENSIONS="dimensions",MEASURES="measures",DIMENSION="dimension",MEASURE="measure",PIVOT="pivot",FORMAT="format",constants_MOUNT="mount",HAS_DATA_UPDATED="hasDataUpdated",ROWS="rows",COLUMNS="columns",constants_DATA="data",COL="col",ROW="row",COLUMN="column",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",DETAIL="detail",LAYERS="layers",TRANSFORM="transform",enums_constants_ORDINAL="ordinal",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",enums_constants_TOP="top",enums_constants_BOTTOM="bottom",RETINAL="retinal",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",INITIALIZED="initialized",EXIT_CELLS="exitCell",AXIS="axis",UNIT="unit",UPDATED="updated",BEFORE_UPDATE="beforeupdate",VALUE_MATRIX="valueMatrix",FACET_HEADERS="facet-headers",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",ARC="arc",constants_CATEGORICAL="categorical",constants_TEMPORAL="temporal",BAR="bar",LINE="line",POINT="point",PRIMARY="Primary",SECONDARY="Secondary",BOTH="both",INTERACTION="interaction",GRID_LINES="gridLines",GRID_BANDS="gridBands",HEADER="header",FACET="facet",DEFAULT="default",constants_ASCENDING="asc",DESCENDING="desc",DARK="dark",NONE="none",NORMAL="normal",DARKER="darker";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(row[valueFieldIndex]instanceof src_InvalidAwareTypes&&(row[valueFieldIndex]=null),obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));var source=pointObj.source;return pointObj.dataObj=fieldsArr.reduce(function(acc,name){return acc[name]=source[fieldsConfig[name].index],acc},{}),pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),helpers_getNormalizedData=function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr=transformType===IDENTITY?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)},domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return sort===ASCENDING?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||transformType===STACK?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||transformType===STACK?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),defFn=function defFn(d){var _d$update=d.update;return{x:_d$update.x,y:_d$update.y}},helpers_attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref,accessor=arguments.length>2&&void 0!==arguments[2]?arguments[2]:defFn;voronoi.data((_ref=[]).concat.apply(_ref,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var _accessor=accessor(d);return{x:_accessor.x,y:_accessor.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},helpers_animateGroup=function animateGroup(mount,context){var groupTransition,update,transition=context.transition,groupAnimateStyle=context.groupAnimateStyle,duration=transition.duration,effect=transition.effect,disabled=transition.disabled;groupAnimateStyle&&(renderer_utils_setStyles(mount.node(),groupAnimateStyle.enter),update=groupAnimateStyle.update,groupTransition=disabled?mount:mount.transition().ease(easeFns[effect]).duration(duration).on("end",function(){helpers_updateStyle(renderer_utils_selectElement(this),update,!0)}),helpers_updateStyle(groupTransition,update))},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},getGroupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=getGroupSpan(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_renderLayer=function renderLayer(context){var mount=context.mount();mount&&(context.render(mount),context.dependencies().throwback.commit(common_props.ON_LAYER_DRAW,!0,context.metaInf().parentNamespace))},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){return function transformResolverPredicates(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig(),xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return[!xField,!yField,!groupByField,getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE,xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION,dimensionField&&encodingFieldInf[dimensionField]===groupByField]}(context.encodingFieldsInf(),context,context.config().transform.groupBy).some(function(value){return value})?IDENTITY:null},getValidTransform=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType=common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]===AGG_FN_SUM?STACK:GROUP}return transformType},helpers_getMarkId=function getMarkId(source,schema){return source.filter(function(val,i){return schema[i]&&schema[i].type===dist_datamodel.FieldType.DIMENSION}).join()},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(initialStyle){var conf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{originalStyle:Object.assign({},{styles:initialStyle},conf),currentState:new Map}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i0&&(interactionType=function getLastItemInMap(map){return Array.from(map)[map.size-1]}(currentState)[0],stylesForCurrentLevel=currentState.get(interactionType)||{}),stylesForCurrentLevel},strokeProps={"stroke-width":1,stroke:1,"stroke-opacity":1},parseStyle=function parseStyle(value,_ref,apply){var datum=_ref.datum,datumStyle=_ref.datumStyle;if("function"==typeof value){if(isNaN(datumStyle))value=value(datumStyle.replace(/[^\d,.]/g,"").split(",").map(function(s){return Number(s)}),datum,apply);else value=value(parseFloat(datumStyle,10),datum,apply);return value}return value},helper_applyStylesOnInteraction=function applyStylesOnInteraction(context,elem,interactionType,conf,options){var datum,mountPoint=options.mountPoint,apply=options.apply,reset=options.reset,d=elem.data()[0],_datum$meta=(datum=Array.isArray(d)?d[0]:Array.isArray(d.data)?d.data[0]:d).meta,currentState=_datum$meta.currentState,originalStyle=_datum$meta.originalStyle,applicableStyles={},styles=conf.style,strokePosition=conf.strokePosition,applicableStrokePos=strokePosition;reset&¤tState.clear();var applyStyle=!0;if(apply){var sanitizedStyles={styles:{},strokePosition:strokePosition};for(var type in styles){var parsedStyleVal=parseStyle(styles[type],{datum:datum,datumStyle:elem.style(type)},apply);sanitizedStyles.styles[type]=parsedStyleVal}currentState.set(interactionType,sanitizedStyles),applicableStyles=sanitizedStyles.styles}else if(currentState.has(interactionType)||reset){currentState.delete(interactionType);var currentStyle=getPreviousStyle(datum.meta,interactionType);applicableStyles=Object.assign({},originalStyle.styles,currentStyle.styles),applicableStrokePos=currentStyle.strokePosition||originalStyle.strokePosition}else applyStyle=!1;var styleKeys=Object.keys(applicableStyles),_partition2=helper_slicedToArray(partition(styleKeys,function(v){return v in strokeProps}),2),strokeStyles=_partition2[0],otherStyles=_partition2[1];applyStyle&&context.applyStyles({strokeStyles:strokeStyles,otherStyles:otherStyles,styleObj:applicableStyles,elem:elem,datum:datum,applicableStrokePos:applicableStrokePos,mountPoint:mountPoint})};function base_mixin_typeof(obj){return(base_mixin_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _construct(Parent,args,Class){return(_construct=function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&base_mixin_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function base_mixin_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function base_mixin_slicedToArray(arr,i){return function base_mixin_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function base_mixin_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function base_mixin_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function base_mixin_toConsumableArray(arr){return function base_mixin_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref2=[]).concat.apply(_ref2,base_mixin_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,idx=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI=this.encodingFieldsInf(),yField=_this$encodingFieldsI.yField,xField=_this$encodingFieldsI.xField,yFieldType=_this$encodingFieldsI.yFieldType;if(_this$encodingFieldsI.xFieldType===dist_datamodel.FieldType.MEASURE)measureIndex=fieldsConfig[xField].index,enc="x";else if(yFieldType===dist_datamodel.FieldType.MEASURE){var layerName=this.constructor.formalName();measureIndex=fieldsConfig[yField].index,enc="y",layerName===AREA_LAYER&&(enc=idx%2==0?"y":"y0")}var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc]||0,row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i1&&renderer_getElementsForLine({mount:mount,data:d,strokeStyle:strokeStyle,className:".".concat(className,"-").concat(nullDataLineClass),layer:layer,linepath:linepath,transition:transition,updateFns:updateFns}),null}),elementWithNullData},line_default_config_defaultConfig={classPrefix:CLASSPREFIX,defClassName:"layer-line",className:"",interpolate:"linear",transform:{type:"group"},interaction:{fade:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},focus:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},brushStroke:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}}},crossline:!0,nearestPointThreshold:20,encoding:{color:{},x:{},y:{},strokeOpacity:{value:1},fillOpacity:{value:0},strokeWidth:{value:"2px"}},transition:{effect:"cubic",duration:1e3},connectNullData:!1,nullDataLineStyle:{},nullDataLineClass:"null"};__webpack_require__(21);function line_mixin_typeof(obj){return(line_mixin_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function line_mixin_toConsumableArray(arr){return function line_mixin_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return this.getDataFromEvent(config.event)}},{key:"getDataFromEvent",value:function getDataFromEvent(event){var dataPoint=renderer_utils_selectElement(event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf({fill:color}),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_mixin_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),_class}()};function arc_typeof(obj){return(arc_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function arc_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":TEXT_ANCHOR_MIDDLE}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}},{key:"getNearestPoint",value:function getNearestPoint(x,y,_ref){var event=_ref.event;return this.data()?this.getDataFromEvent(event):null}},{key:"getDataFromEvent",value:function getDataFromEvent(event){return helpers_getDataFromEvent(this,event)}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),_class}()};function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update);var pathEl=makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr);renderer_utils_setStyles(pathEl,style)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:CLASSPREFIX,defColorStyle:"stroke",interaction:{highlight:{className:"highlight-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"center"},focusStroke:{className:"focus-stroke-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"outside"},commonDoubleStroke:{style:{stroke:"black","stroke-width":"2px"},strokePosition:"outside"},brushStroke:{className:"brush-stroke-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"outside"},doubleStroke:{style:{stroke:"black","stroke-width":"2px"},strokePosition:"outside"},fade:{style:{fill:function fill(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},focus:{style:{fill:function fill(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}}},innerPadding:.1,nearestPointThreshold:5,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},stroke:{value:"#000"},"stroke-width":{value:0},fill:{},shape:{value:"circle"},x:{},y:{},"stroke-opacity":{value:1},"fill-opacity":{value:.5},strokePosition:{value:"center"},interaction:{anchors:"highlight","persistent-anchors":"focusStroke","brush-anchors":"brushStroke"}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]};__webpack_require__(25);function point_helper_slicedToArray(arr,i){return function point_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function point_helper_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function point_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var helper_prepareDrawingInf=function prepareDrawingInf(_ref){var data=_ref.data,datum=_ref.datum,i=_ref.i,layerInst=_ref.layerInst,xPx=_ref.xPx,yPx=_ref.yPx,axes=layerInst.axes(),shapeAxis=axes.shape,colorAxis=axes.color,sizeAxis=axes.size,shape=shapeAxis.getShape(datum.shape),size=sizeAxis.getSize(datum.size),color=colorAxis.getColor(datum.color),layerEncoding=layerInst.config().encoding,stroke=layerEncoding.stroke.value,strokeWidth=layerEncoding["stroke-width"].value,resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,stroke:stroke,"stroke-width":strokeWidth,size:size,shape:shape,data:datum},data:datum},i,data,layerInst),rowId=datum.rowId,source=datum.source;shape=resolvedEncodings.shape,size=resolvedEncodings.size;var style={fill:color=resolvedEncodings.color,stroke:resolvedEncodings.stroke,"stroke-width":resolvedEncodings["stroke-width"]},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};return{enter:pos,update:pos,shape:shape,source:source,rowId:rowId,style:style,data:datum.dataObj,meta:Object.assign({layerId:layerInst.id()},getColorMetaInf(style,{strokePosition:layerEncoding.strokePosition.value})),size:size}},helper_pointTranslators=function helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},COORD_TYPES.CARTESIAN,function(data,config,layerInst){for(var points=[],encoding=layerInst.config().encoding,axes=layerInst.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,fieldsConfig=layerInst.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],_map2=point_helper_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];if(xPx+=offsetX,yPx+=offsetY,!isNaN(xPx)&&!isNaN(yPx)){var point=helper_prepareDrawingInf({data:data,datum:d,i:i,layerInst:layerInst,xPx:xPx,yPx:yPx});point.className=getIndividualClassName(d,i,data,layerInst),points.push(point),layerInst.cachePoint(d[key],point)}},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{};return helper_pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var seriesClassName,_this2=this,maxSize=0,config=this.config(),keys=this._transformedData.map(function(d){return d.key}),transition=config.transition,className=config.className,defClassName=config.defClassName,classPrefix=config.classPrefix,normalizedData=this._normalizedData,containerSelection=renderer_utils_selectElement(container),qualifiedClassName=getQualifiedClassName(defClassName,this.id(),classPrefix);this._points=[],this._pointMap={},containerSelection.classed(qualifiedClassName.join(" "),!0).classed(className,!0),this._points=this.generateDataPoints(normalizedData,keys),this._graphicElems={};var schema=this.data().getSchema();return makeElement(container,"g",this._points,null,{update:function update(group,points){maxSize=Math.max.apply(Math,[maxSize].concat(point_mixin_toConsumableArray(points.map(function(d){return d.size||0})))),seriesClassName="".concat(qualifiedClassName[0]),_this2.constructor.drawFn()({layer:_this2,container:group.node(),points:points,interpolate:config.interpolate,className:seriesClassName,transition:transition,keyFn:function keyFn(v){return helpers_getMarkId(v.source,schema)}})}},function(data){return data[0].rowId}),this._maxSize=2*Math.sqrt(maxSize/Math.PI),this.attachDataToVoronoi(this._points),this}},{key:"attachDataToVoronoi",value:function attachDataToVoronoi(points){helpers_attachDataToVoronoi(this._voronoi,points)}},{key:"generateDataPoints",value:function generateDataPoints(normalizedData,keys){var _this3=this,_getPlotMeasurement2=point_mixin_slicedToArray(helpers_getPlotMeasurement(this,keys),2),widthMetrics=_getPlotMeasurement2[0],heightMetrics=_getPlotMeasurement2[1],offsetXValues=widthMetrics.offsetValues||[],offsetYValues=heightMetrics.offsetValues||[];return normalizedData.map(function(dataArr,i){var measurementConf=_this3.getMeasurementConfig(offsetXValues[i],offsetYValues[i],widthMetrics.span,heightMetrics.span);return _this3.translatePoints(dataArr,measurementConf)}).filter(function(d){return d.length})}},{key:"getMeasurementConfig",value:function getMeasurementConfig(offsetX,offsetY,widthSpan,heightSpan){return{offset:{x:(offsetX||0)+widthSpan/2,y:(offsetY||0)+heightSpan/2},span:{x:widthSpan,y:heightSpan}}}},{key:"getNearestPoint",value:function getNearestPoint(x,y){var nearestPointThreshold=this.config().nearestPointThreshold,distanceLimit=Math.max(this._maxSize,nearestPointThreshold);if(!this.data())return null;var point=this._voronoi.find(x,y,distanceLimit),dimensions=point&&point.data.data.update,radius=point?Math.sqrt(point.data.data.size/Math.PI):0;if(point&&pointWithinCircle({x:dimensions.x,y:dimensions.y,r:radius+nearestPointThreshold},{x:x,y:y})){var _point$data$data=point.data.data,source=_point$data$data.source,rowId=_point$data$data.rowId;return{id:this.getIdentifiersFromData(source,rowId),dimensions:[{x:dimensions.x,y:dimensions.y,width:radius,height:radius}],layerId:this.id()}}return null}},{key:"addOverlayPath",value:function addOverlayPath(refElement,data,style,strokePosition){var pathElement,container=refElement.parentElement;if(this._overlayPath[data.rowId]?pathElement=this._overlayPath[data.rowId]:((pathElement=makeElement(container,"path",[data.update],null,{},function(d){return"".concat(d.x," ").concat(data.rowId)})).style("fill","none"),pathElement.style("fill-opacity",0),pathElement.attr("id",data.rowId),this._overlayPath[data.rowId]=pathElement),"stroke-width"===style.type){var position=strokePosition,radius=Math.sqrt(data.size/Math.PI);radius=getStrokeWidthByPosition(position,radius);var size=data.size+radius;if("string"==typeof data.shape){var path=common_utils_getSymbol(data.shape).size(size);pathElement.attr("d",path)}}var styleVal=style.value;"function"==typeof styleVal&&(styleVal=styleVal(pathElement.style(style.type)));pathElement.style(style.type,styleVal),appendElement(refElement,pathElement.node())}},{key:"removeOverlayPath",value:function removeOverlayPath(data,style){var currentPath=this._overlayPath[data.rowId];currentPath&&(currentPath.node().removeAttribute("style"),Object.keys(style).forEach(function(s){return currentPath.style(s,style[s])}),currentPath.style("fill-opacity",0))}},{key:"getBoundBoxes",value:function getBoundBoxes(){return helpers_getBoundBoxes(this._points.flat())}},{key:"applyElementStyles",value:function applyElementStyles(elem,styles,styleObj){styles.forEach(function(type){elem.select("path").style(type,styleObj[type])})}}],[{key:"defaultConfig",value:function defaultConfig(){return point_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=point_mixin_get(point_mixin_getPrototypeOf(_class),"defaultPolicy",this).call(this,conf,userConf),encoding=config.encoding,transform=config.transform,colorField=encoding.color&&encoding.color.field;return colorField&&(transform.groupBy=colorField),config}},{key:"drawFn",value:function drawFn(){return point_renderer}}]),_class}()};function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],xAxis=axes.x,yAxis=axes.y,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),layer_registry=function(){var layers=arguments.length>0&&void 0!==arguments[0]?arguments[0]:DEFAULT_LAYERS,reg=Object.assign({},layers),regObj={register:function register(def){var key=def.formalName();return reg[key]=def,regObj},get:function get(){return reg}};return regObj},helpers=Object.assign(helpers_namespaceObject,{pointLayerHelpers:point_helper_namespaceObject}),layerMixins={BarLayerMixin:bar_mixin_BarLayerMixin,BaseLayerMixin:base_mixin_BaseLayerMixin,LineLayerMixin:line_mixin_LineLayerMixin,AreaLayerMixin:area_mixin_AreaLayerMixin,PointLayerMixin:point_mixin_PointLayerMixin,TextLayerMixin:text_mixin_TextLayerMixin,TickLayerMixin:tick_mixin_TickLayerMixin,ArcLayerMixin:arc_mixin_ArcLayerMixin};function src_helper_slicedToArray(arr,i){return function src_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function src_helper_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function src_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function src_helper_toConsumableArray(arr){return function src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})},helper_X=ENCODING.X,helper_Y=ENCODING.Y,helper_RADIUS=ENCODING.RADIUS,helper_ANGLE=ENCODING.ANGLE,helper_ANGLE0=ENCODING.ANGLE0,RADIUS0=ENCODING.RADIUS0,helper_getLayerAxisIndex=function getLayerAxisIndex(layers,fields){var layerAxisIndex={};return layers.forEach(function(layer){var _layer$config=layer.config(),axis=_layer$config.axis,encoding=_layer$config.encoding,id=layer.id();[helper_X,helper_Y,helper_ANGLE,helper_ANGLE0,helper_RADIUS].forEach(function(type){var index,specificField=getObjProp(encoding,type,"field"),encodingField=type===helper_RADIUS?defaultValue(specificField,getObjProp(encoding,RADIUS0,"field")):getObjProp(encoding,type,"field"),field=defaultValue(getObjProp(axis,type),encodingField);index=fields[type]&&fields[type].length?fields[type].findIndex(function(fieldInst){return-1!==fieldInst.getMembers().indexOf(field)}):0,!layerAxisIndex[id]&&(layerAxisIndex[id]={}),layerAxisIndex[id][type]=index})}),layerAxisIndex},helper_unionDomainFromLayers=function unionDomainFromLayers(layers,axisFields,layerAxisIndex,fieldsConfig){var domains={};return(layers=layers.filter(function(layer){return null!==layer.getDataDomain()})).forEach(function(layer){var domainValues={},config=layer.config(),layerDomain=layer.getDataDomain(),layerId=layer.id();null!==layerDomain&&!1!==config.calculateDomain&&(domainValues=Object.entries(layerDomain),domains=domainValues.reduce(function(fieldDomain,domain){var encodingType=domain[0],axisIndex=layerAxisIndex[layerId][encodingType],field=getObjProp(axisFields,encodingType,axisIndex);!fieldDomain[encodingType]&&(fieldDomain[encodingType]={});var encodingDomain=fieldDomain[encodingType];if(field){var fieldStr="".concat(field);encodingDomain[fieldStr]=encodingDomain[fieldStr]||[],encodingDomain[fieldStr]=function getValidDomain(domain,domain1,encodingType,fieldType){return encodingType===helper_ANGLE||encodingType===helper_ANGLE0?domain.concat(domain1.filter(function(d){return-1===domain.indexOf(d)})):unionDomain([domain,domain1],fieldType)}(encodingDomain[fieldStr],domain[1],encodingType,fieldsConfig[field.getMembers()[0]].def.subtype)}return fieldDomain},domains))}),domains},helper_renderLayers=function renderLayers(context,container,layers,measurement){context._lifeCycleManager.notify({client:layers,action:"beforedraw",formalName:"layer"});var classPrefix=context.config().classPrefix,orderedLayers=layers.sort(function(a,b){return a.config().order-b.config().order}),layerParentGroup=makeElement(container,"g",[1],"".concat(classPrefix,"-layer-group")),layerDepOrder=getDependencyOrder(context._layerDepOrder),groups={};makeElement(layerParentGroup,"g",orderedLayers,null,{update:function update(group,layer){groups[layer.alias()]={group:group,layer:layer}}}),layerDepOrder.map(function(name){return groups[name]}).filter(function(d){return void 0!==d}).forEach(function(o){var layer=o.layer,group=o.group;layer.measurement(measurement),layer.dataProps({timeDiffs:context._timeDiffs}),!1!==layer.config().render&&layer.mount(group.node())})},helper_getNearestDimensionalValue=function getNearestDimensionalValue(context,position){var fields=context.fields();if(!fields.x.length||!fields.y.length)return null;var data=context.data(),axes=context.axes(),fieldsConfig=data.getFieldsConfig(),xField=getObjProp(fields,"x",0).getMembers()[0],yField=getObjProp(fields,"y",0).getMembers()[0],xFieldType=fieldsConfig[xField].def.subtype,yFieldType=fieldsConfig[yField].def.subtype,entryVal=[["x",xFieldType,xField],["y",yFieldType,yField]].find(function(entry){return entry[1]===dist_datamodel.DimensionSubtype.CATEGORICAL||entry[1]===dist_datamodel.DimensionSubtype.TEMPORAL});if(!entryVal||xFieldType!==dist_datamodel.MeasureSubtype.CONTINUOUS&&yFieldType!==dist_datamodel.MeasureSubtype.CONTINUOUS)return null;var field=entryVal[2],index=fieldsConfig[field].index,key=axes[entryVal[0]][0].invert(position[entryVal[0]]);if(entryVal[1]===dist_datamodel.DimensionSubtype.TEMPORAL){var filterData=src_helper_toConsumableArray(new Set(data.getData().data.map(function(d){return d[index]})));key=getNearestValue(filterData,key)}return void 0!==key?[[field],[key]]:null},getLayersBy=function getLayersBy(layers,searchBy,value){return layers.filter(function(layer){return("type"===searchBy?layer.constructor.formalName():layer.alias())===value})},removeLayersBy=function removeLayersBy(layers,searchBy,value){layers.filter(function(inst){return("type"===searchBy?inst.config().mark:inst.alias())!==value||(inst.remove(),!1)})},helper_createSideEffectGroup=function createSideEffectGroup(container,className){return makeElement(container,"g",[1],className).node()},createRenderPromise=function createRenderPromise(unit){unit._renderedPromise.then(function(){unit._renderedPromise=new Promise(function(resolve){unit._renderedResolve=resolve}),createRenderPromise(unit)})},getRadiusRange=function getRadiusRange(width,height){var config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]},helper_setAxisRange=function setAxisRange(context){var radiusAxes=context.axes().radius;radiusAxes&&radiusAxes.forEach(function(axis){axis.range(getRadiusRange(context.width(),context.height()))})},helper_isXandYMeasures=function isXandYMeasures(context){var _context$fields=context.fields(),_map2=src_helper_slicedToArray([_context$fields.x,_context$fields.y].map(function(fields){return fields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE})}),2),xMeasures=_map2[0],yMeasures=_map2[1];return xMeasures&&yMeasures},getKey=function getKey(arr,row){for(var key=row[arr[0]],i=1,len=arr.length;i0&&void 0!==arguments[0]?arguments[0]:{},set=this._set,uidMap=this._uidMap,retObj={entrySet:[[],[]],exitSet:[[],[]],mergedEnter:[],mergedExit:[],completeSet:[]},measureNames=this._measureNames,dimVals=this._dimVals,_config$keepDims=config.keepDims,keepDims=void 0!==_config$keepDims&&_config$keepDims,_config$dimensions=config.dimensions,dimensions=void 0===_config$dimensions?this._fields:_config$dimensions,fieldIndices=this._fieldIndices,_loop=function _loop(key){var val=void 0,measureNamesArr=measureNames[key]||[],dims=dimVals[key];keepDims?measureNamesArr.length?(dims=dimensions.map(function(d){return dims[fieldIndices[d]]}),val=dims.length?[].concat(selection_set_toConsumableArray(dims),["".concat(measureNamesArr)]):[uidMap[key],"".concat(measureNamesArr)]):val=dims.length?selection_set_toConsumableArray(dims):[uidMap[key]]:val=measureNamesArr.length?[uidMap[key],measureNames[key],dims]:[uidMap[key]],set[key]>0?([SELECTION_OLD_ENTRY,SELECTION_NEW_ENTRY].forEach(function(v,i){set[key]===v&&retObj.entrySet[i].push(val)}),set[key]!==SELECTION_OLD_ENTRY&&set[key]!==SELECTION_NEW_ENTRY||retObj.mergedEnter.push(val)):set[key]<0&&([SELECTION_OLD_EXIT,SELECTION_NEW_EXIT].forEach(function(v,i){set[key]===v&&retObj.exitSet[i].push(val)}),set[key]!==SELECTION_OLD_EXIT&&set[key]!==SELECTION_NEW_EXIT||retObj.mergedExit.push(val)),retObj.completeSet.push(val)};for(var key in set)_loop(key);return retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){i in set&&(set[i]=SELECTION_NULL)});else for(var key in set)set[key]=SELECTION_NULL;return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}},{key:"getMergedEntrySet",value:function getMergedEntrySet(raw){var set=this._set,mergedEnter=[],uidMap=this._uidMap,measureNames=this._measureNames,dimVals=this._dimVals;for(var key in set){var val=raw?[].concat(selection_set_toConsumableArray(dimVals[key]),["".concat(measureNames[key])]):[uidMap[key],measureNames[key]];set[key]!==SELECTION_NEW_ENTRY&&set[key]!==SELECTION_OLD_ENTRY||mergedEnter.push(val)}return mergedEnter}},{key:"getMergedExitSet",value:function getMergedExitSet(raw){var set=this._set,mergedExit=[],uidMap=this._uidMap,measureNames=this._measureNames,dimVals=this._dimVals;for(var key in set){var val=raw?[].concat(selection_set_toConsumableArray(dimVals[key]),["".concat(measureNames[key])]):[uidMap[key],measureNames[key]];set[key]!==SELECTION_NEW_EXIT&&set[key]!==SELECTION_OLD_EXIT||mergedExit.push(val)}return mergedExit}}]),SelectionSet}();function muze_firebolt_src_helper_toConsumableArray(arr){return function muze_firebolt_src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffect=this.sideEffects()[name],setTransform=options.setTransform;selectionSet=setTransform?setTransform(selectionSet,payload,sideEffect):selectionSet,sideEffect.apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};payload=this.sanitizePayload(payload);var propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],behaviourEffectMap=this._behaviourEffectMap,sideEffects=getSideEffects(behaviour,behaviourEffectMap);if(this._propagationInf=propagationInfo,this._payloads[behaviour]=payload,action){action.dispatch(payload),this._entryExitSet[behaviour]=action.entryExitSet();var shouldApplySideEffects=this.shouldApplySideEffects(propagationInfo);if(propagate&&this.propagate(behaviour,payload,action.propagationIdentifiers(),{sideEffects:sideEffects}),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,this.getEntryExitSet(behaviour),payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._behaviourPolicies[behaviour]||(this._behaviourPolicies[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sideEffectPolicies[sideEffect]||(this._sideEffectPolicies[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sideEffectPolicies[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._behaviourPolicies[behaviour][key],this}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){var handler=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.onDataModelPropagation();return dataModel.unsubscribe("propagation"),dataModel.on("propagation",handler),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),target=SideEffect.target();if(target===context.target()||"all"===target){var sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"target",value:function target(){return"all"}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this.registerPhysicalActionHandlers(),this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{model:propagationInf.data?propagationInf.data:null,uids:criteria?firebolt_getKeysFromCriteria(criteria,this):null}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}},{key:"mergeSelectionSets",value:function mergeSelectionSets(behaviours){return helper_unionSets(this,behaviours)}},{key:"data",value:function data(){return this.context.data()}},{key:"triggerPhysicalAction",value:function triggerPhysicalAction(event,payload){var handlers=this._handlers[event]||[],genericHandlers=this._handlers["*"];return[].concat(firebolt_toConsumableArray(Object.values(handlers)),firebolt_toConsumableArray(Object.values(genericHandlers))).forEach(function(fn){fn(event,payload)}),this}},{key:"onPhysicalAction",value:function onPhysicalAction(event,fn,namespace){return!this._handlers[event]&&(this._handlers[event]={}),this._handlers[event][namespace]=fn,this}},{key:"registerPhysicalActionHandlers",value:function registerPhysicalActionHandlers(){var _this4=this;this.onPhysicalAction("*",function(event,payload){_this4._actionBehaviourMap[event].behaviours.forEach(function(beh){return _this4.dispatchBehaviour(beh,payload)})})}},{key:"id",value:function id(){return this.context.id()}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(){var _this$context;return(_this$context=this.context).getRangeFromIdentifiers.apply(_this$context,arguments)}},{key:"sanitizePayload",value:function sanitizePayload(payload){return payload}},{key:"payloadGenerators",value:function payloadGenerators(){return arguments.length&&Object.assign(this._payloadGenerators,arguments.length<=0?void 0:arguments[0]),this._payloadGenerators}},{key:"getPayloadGeneratorFor",value:function getPayloadGeneratorFor(action){var defaultFn=this._payloadGenerators.__default,fn=this._payloadGenerators[action];return defaultValue(fn,defaultFn)}},{key:"getPayload",value:function getPayload(action){return this._payloads[action]}},{key:"actions",value:function actions(){return this._actions}}]),Firebolt}();function generic_toConsumableArray(arr){return function generic_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.fields.map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria)},this}return this._entryExitSet}},{key:"getSetInfo",value:function getSetInfo(type,set,filteredDataModel,setFields){var model=null,data=this.firebolt.data();if("mergedEnter"===type)model=filteredDataModel||null;else if("mergedExit"===type){if(filteredDataModel){var setKeys=new Set(set.map(function(d){return d[0]}));model=data.select(function(fields,i){return setKeys.has(setFields.map(function(field){return field===reserved_fields.ROW_ID?i:fields[field].value}))},{saveChild:!1})}model=filteredDataModel||null}var aggFns=common_utils_retrieveNearestGroupByReducers(model);return{uids:set,length:set.length,model:model,fields:setFields,aggFns:aggFns}}},{key:"propagationIdentifiers",value:function propagationIdentifiers(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(params.length){var propData=null,selectionSet=params[0],payload=params[1],fieldsConfig=this.firebolt.data().getFieldsConfig(),criteria=payload.criteria,propagationFields=this._propagationFields;if(selectionSet.resetted()||null===criteria)propData=null;else if(isSimpleObject(criteria)){var fields=Object.keys(criteria),otherFields=generic_slicedToArray(partition(fields,function(d){return fieldsConfig[d]?fieldsConfig[d].def.subtype===dist_datamodel.DimensionSubtype.CATEGORICAL:d===reserved_fields.MEASURE_NAMES}),2)[1],allFields=selectionSet._fields.filter(function(d){return d===reserved_fields.ROW_ID||fieldsConfig[d].def.subtype===dist_datamodel.DimensionSubtype.CATEGORICAL}),mergedEnter=selectionSet.getSets({keepDims:!0,dimensions:allFields}).mergedEnter;propData={fields:fields.map(function(d){return fieldsConfig[d]?fieldsConfig[d].def:{name:d}}),range:this.firebolt.getRangeFromIdentifiers({criteria:criteria,entrySet:mergedEnter,fields:otherFields}),identifiers:[[].concat(generic_toConsumableArray(allFields),[reserved_fields.MEASURE_NAMES])].concat(generic_toConsumableArray(mergedEnter))}}else{var _mergedEnter=selectionSet.getSets({keepDims:!0,dimensions:propagationFields}).mergedEnter,_fields=propagationFields?[].concat(generic_toConsumableArray(propagationFields),[reserved_fields.MEASURE_NAMES]):criteria[0];propData={fields:_fields.map(function(d){return fieldsConfig[d]?fieldsConfig[d].def:{name:d}}),identifiers:[_fields].concat(generic_toConsumableArray(_mergedEnter))}}return this._propagationIdentifiers=propData,this}return this._propagationIdentifiers}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}},{key:"propagateWith",value:function propagateWith(){return this._propagationFields=arguments.length<=0?void 0:arguments[0],this}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iendPos.x&&(newStartPos.x=endPos.x,newEndPos.x=startPos.x),startPos.y>endPos.y){var y=startPos.y;newStartPos.y=endPos.y,newEndPos.y=y}var payload=drag_action_config(firebolt,{startPos:newStartPos,endPos:newEndPos});payload.dragging=!0,payload.dragDiff=Math.abs(startPos.x-endPos.x)+Math.abs(startPos.y-endPos.y),firebolt.triggerPhysicalAction(action,payload)}}).on("end",function(){var event=renderer_utils_getEvent();endPos={x:event.x,y:event.y};var duration=(new Date).getTime()-touchStart;if(!(touch&&duration>100&&Math.abs(startPos.x-endPos.x)<=5)){if(endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height)),startPos.x>endPos.x){var x=startPos.x;startPos.x=endPos.x,endPos.x=x}if(startPos.y>endPos.y){var y=startPos.y;startPos.y=endPos.y,endPos.y=y}var payload=drag_action_config(firebolt,{startPos:startPos,endPos:endPos});payload.dragEnd=!0,firebolt.triggerPhysicalAction(action,payload)}}))},physical_hover=function hover(firebolt){return function(targetEl){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:!0,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,getAllPoints:!1,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};firebolt.triggerPhysicalAction(HOVER,payload),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){firebolt.triggerPhysicalAction(HOVER,{criteria:null})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);firebolt.triggerPhysicalAction(CLICK,payload),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl){drag_event_attachDragEvent(targetEl,DRAG,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?firebolt.triggerPhysicalAction(LONGTOUCH,{criteria:null}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);firebolt.triggerPhysicalAction(LONGTOUCH,payload),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),side_effects_ANCHORS="anchors",side_effects_TOOLTIP="tooltip",side_effects_BRUSH_ANCHORS="brush-anchors",side_effects_PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",side_effects_HIGHLIGHTER="highlighter",CROSSLINE="crossline",FRAGMENTED_TOOLTIP="fragmented-tooltip",AXIS_LABEL_HIGHLIGHTER="axis-label-highlighter",generic_props_PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},layers=arguments.length>2?arguments[2]:void 0,interactionType=config.interactionType,apply=config.apply,_config$reset=config.reset,reset=void 0!==_config$reset&&_config$reset;return(layers||this.firebolt.context.layers()).forEach(function(layer){if(!1!==layer.config().interactive){var layerFields=layer.data().getFieldsConfig(),filteredUids=set.uids.filter(function(_ref){var _ref2$=surrogate_slicedToArray(_ref,2)[1];return(void 0===_ref2$?[]:_ref2$).every(function(m){return m in layerFields})}).map(function(d){return d[0]}),options={apply:apply,reset:reset,styles:null};layer.applyInteractionStyle(interactionType,filteredUids,options)}}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(firebolt,{startPos:{x:x,y:y},endPos:{x:x2,y:y2}});onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(firebolt,{startPos:{x:x,y:y},endPos:{x:x2,y:y2}});payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!0)}}],[{key:"defaultConfig",value:function defaultConfig(){return{defClassName:"selection-box-group",className:"",classPrefix:"muze",box:{defClassName:"selection-box",className:""},transition:{duration:200},persistent:!1}}},{key:"formalName",value:function formalName(){return"selectionBox"}}]),SelectionBox}(),src_default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",parentClassName:"tooltip-parent-container",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},spacing:5,content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"4px 0 4px 0",margin:10,separator:":",className:"tooltip-content-container",parentClassName:"tooltip-content-parent-container"},arrow:{size:10,disabled:!1,defClassName:"tooltip-arrow",className:"",color:"rgba(195,195,195,0.85)"}};__webpack_require__(28);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model,classPrefix=config.classPrefix;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function){makeElement(mount,"div",[1],"".concat(classPrefix,"-tooltip-html-container")).html(data())}else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"",{update:function update(elem,elemData){return elem.attr("class",elemData.className)}}),_cells=makeElement(_rows,"span",function(d){return d.data},"".concat(classPrefix,"-tooltip-content"));_cells.attr("class","".concat(classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block"}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=src_default_config_defaultConfig.content;return config.classPrefix=src_default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className="".concat(classPrefix,"-").concat(contentClass,"-").concat(name),specificClass="".concat(classPrefix,"-").concat(contentConfig.className),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className," ").concat(specificClass)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target;if(target){var node=this._tooltipContainer.node(),tooltipPos=this._orientation;if("left"===tooltipPos||"right"===tooltipPos?y+node.offsetHeighttarget.y+target.height:x+node.offsetWidthtarget.x+target.width){var path;this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===tooltipPos?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===tooltipPos?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===tooltipPos&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else this._tooltipConnectorContainer.style("display","none")}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,contentContainer=this._contentContainer.node();this._tooltipContainer.style("top","0px").style("left","0px").style("width","2000px").style("height","2000px");var offsetWidth=contentContainer.offsetWidth+4,offsetHeight=contentContainer.offsetHeight+4,config=this._config,offset=this._offset,spacing=config.spacing,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,bottomSpace=extent.height-(dim.y+dim.height+offset.y),arrowSize=spacing,tooltipHeight=offsetHeight+arrowSize,tooltipWidth=offsetWidth+arrowSize,spaces=[{position:"top",value:topSpace-tooltipHeight},{position:"right",value:rightSpace-tooltipWidth},{position:"left",value:leftSpace-tooltipWidth},{position:"bottom",value:bottomSpace-tooltipHeight}],positionHorizontal=function positionHorizontal(positionVal){var position,x=dim.x+dim.width,y=dim.y;return"right"===positionVal?(position="left",x+=arrowSize):"left"===positionVal&&(x=dim.x-offsetWidth,position="right",x-=arrowSize),dim.height0?positionHorizontal(hMax.position):positionVertical(vMax.position);return this._position={x:obj.x,y:obj.y},this._tooltipContainer.style("height","".concat(offsetHeight,"px")).style("width","".concat(offsetWidth,"px")),this._orientation=obj.position,draw&&this.position(obj.x,obj.y),this}},{key:"hide",value:function hide(){return this._tooltipContainer.style("display","none"),this._tooltipConnectorContainer.style("display","none"),this}},{key:"show",value:function show(){return this._tooltipContainer.style("display","block"),this}},{key:"extent",value:function extent(_extent){return this._extent=_extent,this}},{key:"offset",value:function offset(_offset){return this._offset=_offset,this}},{key:"remove",value:function remove(){return this._tooltipContainer.remove(),this._tooltipConnectorContainer.remove(),this}}],[{key:"defaultConfig",value:function defaultConfig(){return src_default_config_defaultConfig}}]),Tooltip}(),HIGHLIGHT_SUMMARY="highlightSummary";function strategies_construct(Parent,args,Class){return(strategies_construct=function strategies_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&strategies_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function strategies_setPrototypeOf(o,p){return(strategies_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function strategies_toConsumableArray(arr){return function strategies_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1;hasMultipleMeasures&&content.push({data:[icon,formattedRetinalValue]});var isSelected=(target&&target[1][target[0].indexOf(retField)])===retinalFieldValue;measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,formatterFn=_fieldInf$measure.fn,currentMeasureValue=valueArr[measureIndex],value=formatterFn(currentMeasureValue),keyValue=strategies_getKeyValue({field:hasMultipleMeasures?"".concat(dName).concat(separator):formattedRetinalValue,value:value,classPrefix:classPrefix,margin:hasMultipleMeasures?margin:void 0,isSelected:isSelected,stackedSum:stackedSum,stackedValue:currentMeasureValue instanceof strategies_InvalidAwareTypes?currentMeasureValue.value():currentMeasureValue.toFixed(2),isStackedBar:isStackedBar});hasMultipleMeasures||(keyValue.data=[icon].concat(strategies_toConsumableArray(keyValue.data))),content.push(keyValue)})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$retinalField=context.retinalFields,color=_context$retinalField.color,shape=_context$retinalField.shape,size=_context$retinalField.size,detailFields=context.detailFields||[],_ref2$showStackSum=(context.config||{}).showStackSum,showStackSum=void 0===_ref2$showStackSum||_ref2$showStackSum,_context$payload$sele=context.payload.selectedMeasures,selectedMeasures=void 0===_context$payload$sele?[]:_context$payload$sele,dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(strategies_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),isStacked=function isStackedChart(layers){return layers.some(function(d){return"stack"===d.transformType()})}(context.layers),isStackedBar=function isStackedBarChart(layers){return layers.some(function(d){return"stack"===d.transformType()&&d.config().mark===BAR})}(context.layers),filteredMeasures=isSingleValue(dataLen,isStacked)?measures:measures.filter(function(d){return-1===allMeasures.indexOf(d.name)});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataModel=selectionSet&&selectionSet.mergedEnter.model;if(null===payload.criteria||dataModel&&dataModel.isEmpty()||null===selectionSet)return this.hide(options,null),this;var strategy=defaultValue(options.strategy,this._strategy);return this.createTooltip(dataModel,Object.assign({},{payload:payload,selectionSet:selectionSet,strategy:strategy,options:options}),null,0),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips,orientation=this.config().orientation;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var tooltip=tooltips[key],strategy=options.strategy||this._strategy;tooltip.content(strategy,null),Object.keys(tooltip._contents).length?tooltip.positionRelativeTo(tooltip._target,{orientation:orientation}):tooltip.hide()}}},{key:"getPlotPointsFromIdentifiers",value:function getPlotPointsFromIdentifiers(payload){var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;i1&&void 0!==arguments[1]?arguments[1]:{},plotDim=arguments.length>2?arguments[2]:void 0,key=arguments.length>3?arguments[3]:void 0,drawingInf=this.drawingContext(),sourceInf=this.sourceInfo(),config=this.config(),strategy=props.strategy,payload=props.payload,selectionSet=props.selectionSet;plotDim=(plotDim=defaultValue(plotDim,this.getPlotPointsFromIdentifiers(payload)))&&plotDim[0];var pad=config.padding,showInPosition=payload.showInPosition,tooltipPos=payload.position,_config$strategy=config[strategy],projectFields=_config$strategy.fields,dataTransform=_config$strategy.dataTransform,strategyFn=this._strategies[strategy],dt=dataTransform(dataModel,projectFields,this),layoutContainer=drawingInf.parentContainer,parentContainerDimensions=drawingInf.parentContainerDimensions,layoutBoundBox=layoutContainer.getBoundingClientRect(),unitBoundBox=drawingInf.htmlContainer.getBoundingClientRect(),offsetLeft=unitBoundBox.left-layoutBoundBox.left,offsetTop=unitBoundBox.top-layoutBoundBox.top,tooltipInst=this._tooltips[key]=this._tooltips[key]||new tooltip_Tooltip(layoutContainer,drawingInf.svgContainer);Object.assign(sourceInf,{payload:payload,firebolt:this.firebolt,detailFields:[],timeDiffs:sourceInf.timeDiffs,valueParser:this.valueParser(),selectionSet:selectionSet,config:config[strategy]}),tooltipInst.context(sourceInf),tooltipInst.content(strategy,dt,{formatter:strategyFn,order:config[strategy].order,className:config[strategy].className}).config(this.config()).extent({x:0,y:0,width:parentContainerDimensions.width,height:parentContainerDimensions.height}).offset({x:offsetLeft+(config.offset.x||0),y:offsetTop+(config.offset.y||0)}),showInPosition?tooltipInst.position(tooltipPos.x+pad,tooltipPos.y+pad):plotDim?tooltipInst.positionRelativeTo({x:plotDim.x,y:plotDim.y,width:plotDim.width||0,height:plotDim.height||0},{orientation:config.orientation}):tooltipInst.hide()}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{order:1,dataTransform:function dataTransform(dm,fields){return fields?dm.project(fields,{saveChild:!1}):dm}},selectionSummary:{order:0,dataTransform:function dataTransform(dm){return dm}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}},{key:"target",value:function target(){return"all"}}]),Tooltip}();function fragmented_tooltip_typeof(obj){return(fragmented_tooltip_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function fragmented_tooltip_toConsumableArray(arr){return function fragmented_tooltip_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);idrawingInf.height:totalWidth>drawingInf.width)break;position&&boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(strategy,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return boxes.length&&function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})}),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"formalName",value:function formalName(){return FRAGMENTED_TOOLTIP}}]),FragmentedTooltip}();__webpack_require__(30);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]&&arguments[2]?common_utils_intersect:difference)(set.uids,selectedPointsId,[function(d){return d[0]},function(d){return d[0]}]);return function helper_objectSpread(target){for(var i=1;i0&&void 0!==arguments[0]?arguments[0]:[];return excludeSet instanceof Function?excludeSet(this.firebolt.getEntryExitSet):excludeSet.reduce(function(acc,behaviour){var selectedPointsIds=((_this2.firebolt.getEntryExitSet(behaviour)||{}).mergedEnter||{}).uids;return selectedPointsIds&&acc.push.apply(acc,plot_highlighter_toConsumableArray(selectedPointsIds)),acc},[])}},{key:"apply",value:function apply(selectionSet,payload){var options=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},currentStrategy=this._strategies[options.strategy||this._strategy],excludeSetIds=this.getExcludeSetIds(options.excludeSet);return currentStrategy({selectionSet:selectionSet,formattedSet:function plot_highlighter_objectSpread(target){for(var i=1;i3&&void 0!==arguments[3]?arguments[3]:[],propPayload=propConfig.payload,sourceIdentifiers=propConfig.sourceIdentifiers,excludeSelectedMeasures=propConfig.excludeSelectedMeasures,dataObj=selectionDataModel.getData({withUid:!0}),payload=Object.assign({},propPayload),data=dataObj.data,fieldsConfig=Object.assign({},selectionDataModel.getFieldsConfig(),function payload_generator_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},reserved_fields.ROW_ID,{index:Object.keys(selectionDataModel.getFieldsConfig()).length,def:{type:dist_datamodel.FieldType.DIMENSION}})),selectionSetFields=instance._selectionSet[propConfig.action]._fields;return sourceIdentifiers?function(){for(var _facetByFields=payload_generator_slicedToArray(facetByFields,2),_facetByFields$=_facetByFields[0],facetFields=void 0===_facetByFields$?[]:_facetByFields$,_facetByFields$2=_facetByFields[1],facetValues=void 0===_facetByFields$2?[]:_facetByFields$2,facetIndices=facetFields.reduce(function(acc,v,i){return acc[v]=i,acc},{}),identifierIdxMap=sourceIdentifiers.fields.reduce(function(acc,v,i){return acc[v.name]=i,acc},{}),identifiers=sourceIdentifiers.identifiers.slice(1,sourceIdentifiers.identifiers.length),sourceIdentifierFields=sourceIdentifiers.fields.filter(function(d){return d.name in fieldsConfig||d.name in facetIndices||d.name===reserved_fields.ROW_ID}),identifierMap=identifiers.reduce(function(acc,v){var key=sourceIdentifierFields.map(function(d){return v[identifierIdxMap[d.name]]}),measureNamesIdx=identifierIdxMap[reserved_fields.MEASURE_NAMES];return measureNamesIdx&&(!acc[key]&&(acc[key]=[]),acc[key].push([v[measureNamesIdx]])),acc},{}),dataArr=[],_loop=function _loop(i,len){var row=data[i],dims=[];selectionSetFields.forEach(function(field){if(fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION){var idx=fieldsConfig[field].index;dims.push(row[idx])}});var vals="".concat(sourceIdentifierFields.map(function(d){return d.name in fieldsConfig?row[fieldsConfig[d.name].index]:d.name in facetIndices?facetValues[facetIndices[d.name]]:null}).filter(function(d){return null!==d}));if(vals in identifierMap){var measures=identifierMap[vals],allMeasures=instance._metaData.dimensionsMap[dims];if(excludeSelectedMeasures){var fn=function fn(v){return"".concat(v)};difference(allMeasures,measures,[fn,fn]).forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))})}else measures.forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))})}else{var _measures=instance._metaData.dimensionsMap[dims];(_measures=_measures&&_measures.length?_measures:[[]]).forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))})}},i=0,len=data.length;i3&&void 0!==arguments[3]?arguments[3]:[];return payloadGenerator.__default(instance,selectionDataModel,Object.assign({},{excludeSelectedMeasures:!0},propConfig),facetByFields)}};function firebolt_helper_toConsumableArray(arr){return function firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},obj=function getUniqueKeys(data,dimensions,_ref2){var layers=_ref2.layers,uids=_ref2.uids,_ref2$keys=_ref2.keys,keys=void 0===_ref2$keys?{}:_ref2$keys,_ref2$dimensionsMap=_ref2.dimensionsMap,dimensionsMap=void 0===_ref2$dimensionsMap?{}:_ref2$dimensionsMap;return data.forEach(function(row,i){var key=dimensions.length?dimensions.map(function(d){return row[d.index]}):[uids[i]];layers.forEach(function(layer){var measureNames=Object.keys(layer.data().getFieldspace().getMeasure()),mKey="".concat([key].concat(firebolt_helper_toConsumableArray(measureNames)));keys[mKey]=defaultValue(keys[mKey],{}),keys[mKey]={dims:key,measureNames:measureNames,uid:uids[i]},dimensionsMap[key]=defaultValue(dimensionsMap[key],[]),dimensionsMap[key].push(measureNames)})}),{keys:keys,dimensionsMap:dimensionsMap}}(data,dimensions,{layers:layers,uids:uids,keys:maps.keys,dimensionsMap:maps.dimensionsMap});return{keys:obj.keys,dimensionsMap:obj.dimensionsMap}},helper_sanitizePayloadCriteria=function sanitizePayloadCriteria(data,propFields,_ref4){var dm=_ref4.dm,dimensionsMap=_ref4.dimensionsMap,dimsMapGetter=_ref4.dimsMapGetter,fieldsConfig=Object.assign({},dm.getFieldsConfig(),function firebolt_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},reserved_fields.ROW_ID,{index:Object.keys(dm.getFieldsConfig()).length,def:{name:reserved_fields.ROW_ID,type:dist_datamodel.FieldType.DIMENSION}}));if(null===data)return null;if(isSimpleObject(data))return Object.keys(data).reduce(function(acc,v){return(v in fieldsConfig||v===reserved_fields.MEASURE_NAMES)&&(acc[v]=data[v]),acc},{});for(var criteriaFields=data[0],fields=criteriaFields.length?criteriaFields.map(function(d,i){return{name:d,index:i}}):[],fieldIndexMap=fields.reduce(function(acc,v,i){return acc[v.name]=i,acc},{}),dataWithFacets=[propFields=propFields||fields.map(function(d){return d.name})],measureNameField=criteriaFields.find(function(field){return field===reserved_fields.MEASURE_NAMES}),propDims=fields.filter(function(d){return d.name in fieldsConfig}).map(function(d){return d.name}),dimsMap=dimsMapGetter(propDims,fieldsConfig),_loop=function _loop(i,len){var row=data[i],dimKey=propDims.map(function(field){return row[fieldIndexMap[field]]}),origRow=dimsMap[dimKey];origRow&&origRow.forEach(function(rowVal){var newRowVal=[];(propFields.forEach(function(field){if(field in fieldIndexMap){var idx=fieldIndexMap[field];newRowVal.push(row[idx])}else{var _idx=getObjProp(fieldsConfig[field],"index");void 0!==_idx&&newRowVal.push(rowVal[_idx])}}),measureNameField)?dataWithFacets.push(newRowVal):(dimensionsMap[newRowVal].length?dimensionsMap[newRowVal]:[[]]).forEach(function(measures){dataWithFacets.push([].concat(newRowVal,firebolt_helper_toConsumableArray(measures)))})})},i=1,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(transposeArray(Object.values(identifiers)))));for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}},BORDER_WIDTH={default:2,facet:1},cell_border_applier_handleBlankCell=function handleBlankCell(data){data.config().externalClassname.push("".concat(NONE,"-").concat(constants_LEFT)),data.config().externalClassname.push("".concat(NONE,"-").concat(constants_RIGHT))},cell_border_applier_sanitiseHeaderMatrix=function sanitiseHeaderMatrix(matrices,header){if(header)for(var i=0;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},getCellKey=function getCellKey(rowId,columnId){return"cell-".concat(rowId,"-").concat(columnId)},group_utils_extractUnitConfig=function extractUnitConfig(config){var unitConfig={};return[INTERACTION,GRID_LINES,GRID_BANDS].forEach(function(attr){void 0!==config[attr]&&(unitConfig[attr]=config[attr])}),unitConfig},hasOneField=function hasOneField(fields){return Object.keys(fields).some(function(d){return fields[d].length>0})},getHeaderText=function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i0?fields[0].map(function(cell,i){return new TextCell({type:HEADER,className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(getHeaderText(fieldHeaders,i,fields[0].length)).config({show:cell.config().show})}):[];return cell_border_applier_sanitiseHeaderMatrix(headers,!0),headers},group_utils_findInGroup=function findInGroup(variable,allFields){var channel=null;return[enums_constants_COLOR,enums_constants_SIZE,enums_constants_SHAPE].forEach(function(e){group_utils_this.store.get(e)&&variable===group_utils_this.store.get(e)[0]&&(channel=e)}),channel?{channel:channel}:([ROW,COL].forEach(function(facetType){allFields["".concat(facetType,"Facets")].forEach(function(e){e.toString()===variable&&(channel={channel:FACET,type:facetType===COL?COLUMN:ROW})})}),channel||([ROW,COL].forEach(function(projType){allFields["".concat(projType,"Projections")].forEach(function(e){e.forEach(function(m){m.toString()===variable&&(channel=projType===COL?X:Y)})})}),channel?{channel:channel}:null))},group_utils_getAxisType=function getAxisType(fieldsConfig,field){var fieldType=enums_constants_ORDINAL;return field&&fieldsConfig[field].def.type!==DIMENSION&&(fieldType=enums_constants_LINEAR),fieldType},retriveDomainFromData=function retriveDomainFromData(datamodel,fieldName){return datamodel.getFieldspace().fields.find(function(d){return d.name()===fieldName.toString()}).domain()},mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}},group_utils_getEncoder=function getEncoder(layers){var encoder=new cartesian_encoder_CartesianEncoder;return layers.length&&(encoder=layers.some(function(layerConf){return function hasPolarEncodings(layerConf){return layerConf.mark===ARC||[enums_constants_RADIUS,enums_constants_ANGLE].some(function(field){return getObjProp(layerConf.encoding,field)})}(layerConf)})?new polar_encoder_PolarEncoder:encoder),encoder},group_utils_getHeaderAxisFrom=function getHeaderAxisFrom(type,fields,userAxisFromConfig){var axisFrom=userAxisFromConfig[type],headerFrom="",options=type===ROW?[constants_LEFT,constants_RIGHT]:[enums_constants_BOTTOM,enums_constants_TOP],_fields=group_utils_slicedToArray(fields,2),firstField=_fields[0],secondField=_fields[1],firstFieldType=function firstFieldType(i){return firstField.length?firstField[i].type():null},secondFieldType=function secondFieldType(i){return secondField.length?secondField[i].type():null};return firstFieldType(firstField.length-1)===DIMENSION&&secondFieldType(0)===DIMENSION?(headerFrom=axisFrom?options[1-options.indexOf(axisFrom)]:options[1],axisFrom=type===COLUMN&&firstField[firstField.length-1].toString()===secondField[0].toString()?enums_constants_TOP:axisFrom||options[0]):secondFieldType(secondField.length-1)===DIMENSION?(headerFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM,axisFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM):(headerFrom=type===ROW?constants_LEFT:enums_constants_TOP,axisFrom=type===ROW?constants_LEFT:enums_constants_TOP),firstFieldType(firstField.length-1)===MEASURE&&secondFieldType(0)===MEASURE?axisFrom=type===ROW?constants_LEFT:enums_constants_TOP:secondFieldType(0)===MEASURE?axisFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM:firstFieldType(firstField.length-1)===MEASURE&&(axisFrom=type===ROW?constants_LEFT:enums_constants_TOP),[headerFrom,axisFrom]},setFacetsAndProjections=function setFacetsAndProjections(context,fieldInfo,encoder){var fields=fieldInfo.fields,type=fieldInfo.type,_encoder$simpleEncode=encoder.simpleEncoder.getFacetsAndProjections(fields,type),facets=_encoder$simpleEncode.facets,projections=_encoder$simpleEncode.projections;return context.facets(group_utils_defineProperty({},"".concat(type,"Facets"),facets)),context.projections(group_utils_defineProperty({},"".concat(type,"Projections"),projections)),{facets:facets,projections:projections,fields:fields}},getBorders=function getBorders(matrices,encoder){var showRowBorders={top:!1,bottom:!1},showColBorders={left:!1,right:!1},showValueBorders={top:!1,bottom:!1,left:!1,right:!1},rows=matrices.rows,columns=matrices.columns,valueMatrix=matrices.values,_rows=group_utils_slicedToArray(rows,2),leftRows=_rows[0],rightRows=_rows[1],_columns=group_utils_slicedToArray(columns,2),topColumns=_columns[0],bottomColumns=_columns[1],_encoder$fieldInfo=encoder.fieldInfo(),rowDimensions=_encoder$fieldInfo.rowDimensions,columnDimensions=_encoder$fieldInfo.columnDimensions,rowTemporalFields=_encoder$fieldInfo.rowTemporalFields,columnTemporalFields=_encoder$fieldInfo.columnTemporalFields,columnMeasures=_encoder$fieldInfo.columnMeasures,rowMeasures=_encoder$fieldInfo.rowMeasures,allDimensionLength=rowDimensions.length+columnDimensions.length,allMeasuresLength=rowMeasures.length+columnMeasures.length,allTemporalFieldsLength=rowTemporalFields.length+columnTemporalFields.length;if(encoder.constructor.type()===group_utils_POLAR){if(!allDimensionLength)return{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}}else if(!allMeasuresLength&&!allTemporalFieldsLength&&allDimensionLength<=2)return{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders};return showRowBorders=function getRowBorders(left,right){var borders={top:!1,bottom:!1};return(left.length>1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=[enums_constants_TOP,enums_constants_BOTTOM];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},getFieldsFromSuppliedLayers=function getFieldsFromSuppliedLayers(suppliedLayerConfig){var _ref3,encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}}),fields=(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return"object"===group_utils_typeof(d)?d.field:d})})));return group_utils_toConsumableArray(new Set(fields.filter(function(d){return d})))},group_utils_extractFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],facetNames=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet);facetNames.push(name);var facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([facetNames].concat(group_utils_toConsumableArray(keys)),schema).getData({sort:sortInfo}).data},group_utils_removeExitCells=function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)},encoder_props_PROPS={layers:{},data:{},globalConfig:{}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(COLUMN,fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}},{key:"getProjectionFields",value:function getProjectionFields(layers){return getFieldsFromSuppliedLayers(layers)}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){return hasOneField(fields)}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis};function matrix_model_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function matrix_model_objectSpread(target){for(var i=1;i1){var facetsUserConfig=config.facetsUserConfig,border=config.border,isBorderPresent=facetsUserConfig.isBorderPresent,isGridLinePresent=facetsUserConfig.isGridLinePresent,gridLinesShowLength=Object.keys(isGridLinePresent).length,borderWidth=border.width,gridLines={};isBorderPresent||(borderWidth=BORDER_WIDTH[FACET]),gridLinesShowLength<=0&&(gridLines={x:{show:!1}}),conf={border:{width:borderWidth},gridLines:gridLines}}return conf}(facetInfo,projectionInfo,globalConfig);globalConfig=mergeRecursive(globalConfig,defaultConfig);var generalContext={matrix:matrix,geomCellCreator:geomCellCreator,projectionInfo:projectionInfo,splitModelsHashMap:splitModelsHashMap,colKeys:colKeys};if(rowKeys.length)rowKeys.forEach(function(rowKeyObj){var rowIndex=function createRowDataModels(rowContext,fieldInfo,sourceDM){var currentColumnIndex=0,rowIndexForCurrentKey=0,colKeys=rowContext.colKeys,rowKeyObj=rowContext.rowKeyObj,currentRowIndex=rowContext.currentRowIndex,newRowIndex=currentRowIndex,colContext=matrix_model_objectSpread({},rowContext,{rowKeyArr:rowKeyObj.keyArr,rowKey:rowKeyObj.joinedKey,newRowIndex:newRowIndex});if(rowIndexForCurrentKey=currentRowIndex,colKeys.length)colKeys.forEach(function(colKeyObj){colContext.colKeyObj=colKeyObj,colContext.currentColumnIndex=currentColumnIndex;var _createColumnDataMode=matrix_model_createColumnDataModels(colContext,fieldInfo,sourceDM),columnIndex=_createColumnDataMode.columnIndex,rowIndex=_createColumnDataMode.rowIndex;currentColumnIndex=columnIndex,rowIndexForCurrentKey=rowIndex});else{colContext.colKeyObj={keyArr:[],joinedKey:""},colContext.currentColumnIndex=currentColumnIndex;var _createColumnDataMode2=matrix_model_createColumnDataModels(colContext,fieldInfo,sourceDM),columnIndex=_createColumnDataMode2.columnIndex,rowIndex=_createColumnDataMode2.rowIndex;currentColumnIndex=columnIndex,rowIndexForCurrentKey=rowIndex}return{rowIndex:++rowIndexForCurrentKey}}(matrix_model_objectSpread({},generalContext,{rowKeyObj:rowKeyObj,currentRowIndex:currentRowIndex}),fieldInfo,dataModel).rowIndex;currentRowIndex=rowIndex});else if(colKeys.length){var currentColumnIndex=0,newRowIndex=currentRowIndex;colKeys.forEach(function(colKeyObj){var colContext=matrix_model_objectSpread({},generalContext,{rowKeyArr:[],rowKey:"",colKeyObj:colKeyObj,newRowIndex:newRowIndex,currentColumnIndex:currentColumnIndex}),_createColumnDataMode3=matrix_model_createColumnDataModels(colContext,fieldInfo,dataModel),columnIndex=_createColumnDataMode3.columnIndex,rowIndex=_createColumnDataMode3.rowIndex;currentRowIndex=rowIndex,currentColumnIndex=columnIndex})}else{var _currentColumnIndex=0,colContext=matrix_model_objectSpread({},generalContext,{rowKeyArr:[],rowKey:"",colKeyObj:{keyArr:[],joinedKey:""},newRowIndex:currentRowIndex,currentColumnIndex:_currentColumnIndex}),_createColumnDataMode4=matrix_model_createColumnDataModels(colContext,fieldInfo,dataModel),columnIndex=_createColumnDataMode4.columnIndex,rowIndex=_createColumnDataMode4.rowIndex;currentRowIndex=rowIndex,_currentColumnIndex=columnIndex}var formattedColKeys=formatKeys(colKeys.map(function(e){return e.keyArr}),colFacets.map(function(facetField){return facetField.rawFormat()}));return{matrix:matrix,rowKeys:formatKeys(rowKeys.map(function(e){return e.keyArr}),rowFacets.map(function(facetField){return facetField.rawFormat()})),columnKeys:formattedColKeys.length>0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;resolvedData instanceof datamodel_default.a&&resolvedData.dispose();var fields=getFieldsFromSuppliedLayers(suppliedLayers).filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),allFields=group_utils_extractFields(facetsAndProjections,fields);if(groupedModel=dataModel.project(allFields),resolver.data(groupedModel),!groupBy.disabled){var newFieldsConfig=groupedModel.getFieldsConfig(),dimensions=allFields.filter(function(field){return getObjProp(newFieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return fieldConfig[field].def.subtype===constants_TEMPORAL?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel),resolver.transformedData(groupedModel),groupedModel},cell_creator_computeMatrices=function computeMatrices(resolverConfig){var datamodel=resolverConfig.datamodel,encoders=resolverConfig.encoders,resolver=resolverConfig.resolver,globalConfig=resolverConfig.globalConfig,selection=resolverConfig.selection,transform=resolverConfig.transform,componentRegistry=resolverConfig.componentRegistry,groupBy=resolverConfig.groupBy,labelManager=resolverConfig.labelManager,fieldMap=resolverConfig.fieldMap,layerConfig=resolverConfig.layerConfig,registry=resolverConfig.registry,normalizedRows=resolverConfig.normalizedRows,normalizedColumns=resolverConfig.normalizedColumns,otherEncodings=resolverConfig.otherEncodings,facetsAndProjections=resolverConfig.facetsAndProjections,simpleEncoder=resolverConfig.simpleEncoder,config=resolverConfig.config,rowFacets=facetsAndProjections.rowFacets,colFacets=facetsAndProjections.colFacets,colProjections=facetsAndProjections.colProjections,isProjection=facetsAndProjections.rowProjections.length>0||colProjections.length>0,isFacet=rowFacets.length>0||colFacets.length>0;isFacet&&(globalConfig.isFacet=!0);var matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.cells.GeomCell),AxisCell:resolver.getCellDef(registry.cells.AxisCell),BlankCell:resolver.getCellDef(registry.cells.BlankCell),TextCell:resolver.getCellDef(registry.cells.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver);simpleEncoder.data(groupedModel);var cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=matrix_model_getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);group_utils_removeExitCells(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=mutateAxesFromMap(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;if(resolver.rowMatrix(rows),resolver.columnMatrix(columns),isFacet||isProjection){var arr=function sanitiseBorderMatrix(matrices,blankCell){var leftMatrix=matrices.leftMatrix,rightMatrix=matrices.rightMatrix,topMatrix=matrices.topMatrix,bottomMatrix=matrices.bottomMatrix,bottomBorderObj={};return rightMatrix.length&&(bottomBorderObj=cell_border_applier_sanitiseFacetValues(rightMatrix,"".concat(constants_RIGHT),blankCell)),leftMatrix.length&&(bottomBorderObj=cell_border_applier_sanitiseFacetValues(leftMatrix,"".concat(constants_LEFT),blankCell)),topMatrix.length&&cell_border_applier_sanitiseHeaderMatrix(topMatrix),bottomMatrix.length&&cell_border_applier_sanitiseHeaderMatrix(bottomMatrix),bottomBorderObj}({leftMatrix:rows[0],rightMatrix:rows[1],topMatrix:columns[0],bottomMatrix:columns[1]},registry.cells.BlankCell);valueMatrixInfo.matrix=function sanitiseGeomMatrix(matrices){for(var arr=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=0;i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:INITIALIZED,formalName:FACET_HEADERS}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"updateVisualUnit",value:function updateVisualUnit(retinalConfig){var retinalAxes=this.getRetinalAxes(),lifeCycleManager=this.dependencies().lifeCycleManager;lifeCycleManager.notify({client:this.axes(),action:INITIALIZED,formalName:AXIS}),lifeCycleManager.notify({client:this.units(),action:BEFORE_UPDATE,formalName:UNIT});var units=[],matrixLayers=this.matrixLayers(),props=["".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"),"".concat(namespace_namespaceObject.UNIT_GLOBAL_NAMESPACE,".domain")],store=this.store();return store.lockCommits(props),store.lockModel(),this.forEach(VALUE_MATRIX,function(i,j,el){el.axes(Object.assign(el.axes(),retinalAxes)),el.source()&&el.source().retinalFields(retinalConfig),el.layerDef(matrixLayers[i][j]),el.updateModel(),units.push(el.source())}),store.unlockModel().unlockCommits([props[0]]).unlockCommits([props[1]]),lifeCycleManager.notify({client:units,action:UPDATED,formalName:UNIT}),this}},{key:"getMatrices",value:function getMatrices(resolverConfig){return this._placeholderInfo=cell_creator_computeMatrices(resolverConfig),this._placeholderInfo}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}],[{key:"getterSetters",value:function getterSetters(){return RESOLVER_PROPS}}]),MatrixResolver}();function src_data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_data_type_scale_map_dataTypeScaleMap=(src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap={},dist_datamodel.FieldType.DIMENSION,scale_type_namespaceObject.BAND),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.CATEGORICAL,scale_type_namespaceObject.BAND),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.TEMPORAL,scale_type_namespaceObject.TIME),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.FieldType.MEASURE,scale_type_namespaceObject.LINEAR),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.MeasureSubtype.CONTINUOUS,scale_type_namespaceObject.LINEAR),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.BINNED,scale_type_namespaceObject.BAND),data_type_scale_map_dataTypeScaleMap);function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratio1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis},getIndex=function getIndex(arr,val){for(var i=0,arrIndex=-1;-1===arrIndex&&i1?axesCreators.position=BOTH:axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.dataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=getAdjustedDomain(max,min);else if(typeOfAxis===scale_type_namespaceObject.BAND){key=axisType?"".concat(idx,"00"):"0".concat(idx,"0");var currentFieldName=fieldsObj[axisType][key].oneVar(),sortingOrder=getSortingConfig(context,currentFieldName,axes[0].config);sortingOrder&&domains[axisType][key]instanceof Array&&domains[axisType][key].sort(function(a,b){return sortCategoricalField(sortingOrder,a,b)})}axes.forEach(function(axis,index){key=axisType?"".concat(idx,"0").concat(index):"0".concat(idx).concat(index),(domain=adjustedDomain[index]||domains[axisType][key])&&axis.domain(domain);var type=axisType?"y":"x";store.commit("".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.").concat(type),domain,"".concat(idx).concat(index))})})}),store.unlockModel()}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(fields,type){for(var facets=[],projections=[],counter=0,primaryFacets=[],secondaryFacets=[],primaryFields=fields[0],secondaryFields=fields[1],primaryLen=primaryFields.length,secondaryLen=secondaryFields.length,axisFrom=this.axisFrom(),i=0;icounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),colFieldType=colField.subtype(),mark=encoder_helper_getDefaultMark(colFieldType,rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=getLayerConfFromFields(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){var colProjections=fields.colProjections,rowProjections=fields.rowProjections,colFields=cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"hasMandatoryFields",this).call(this,{colProjections:colProjections}),rowFields=cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"hasMandatoryFields",this).call(this,{rowProjections:rowProjections});return colFields&&rowFields}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){var optionalProjections=fields.optionalProjections;return polar_encoder_get(polar_encoder_getPrototypeOf(PolarEncoder.prototype),"hasMandatoryFields",this).call(this,{optionalProjections:optionalProjections})}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}();__webpack_require__(35);function legend_marker_typeof(obj){return(legend_marker_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_marker_defineProperties(target,props){for(var i=0;i0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{onset:function onset(context,value){return context.firebolt().attachPropagationListener(value)}},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}};var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+iconSpaces[i].width+2*effPadding):(labelSpaces[i].width=iconSpaces[i].width,itemSpaces[i].width=iconSpaces[i].width,labelSpaces[i].width=iconSpaces[i].width),totalWidth+=itemSpaces[i].width;else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelWidth+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,maxWidth=_this$measurement2.maxWidth,width=legend_helper_calculateTitleWidth(this.measurement(),this._labelManager.getOriSize(this._title.text).width,this.config()),_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var orientation=config.item.text.orientation,textAlign="left",alignment=measurement.alignment,maxWidth=measurement.maxWidth,width=measurement.width,height=measurement.height,border=measurement.border,padding=measurement.padding;"top"!==orientation&&"bottom"!==orientation&&alignment!==HORIZONTAL||(textAlign="center");var titleWidth=Math.min(maxWidth,width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(height,"px")).style("border-bottom","".concat(border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(maxWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(padding,"px")).text(title.text).style("text-align",textAlign).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor,alignment:POSITION_ALIGNMENT_MAP[this.config().position]},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),border=_this$measurement3.border,marginHorizontal=_this$measurement3.marginHorizontal,maxHeight=_this$measurement3.maxHeight,height=_this$measurement3.height,width=_this$measurement3.width,maxWidth=_this$measurement3.maxWidth,margin=this.measurement().margin,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom"),margin=marginHorizontal;break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top"),margin=marginHorizontal;break;default:marginPosition="margin-".concat("left")}legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left");var widthBox=legend_helper_calculateTitleWidth(this.measurement(),this._labelManager.getOriSize(this._title.text).width,this.config()),titleWidth=Math.min(maxWidth,widthBox);return width1&&void 0!==arguments[1]?arguments[1]:[],data=this.data();return fields.length?(id=Number(id),[data.find(function(d){return id===d.id}).rawVal]):[]}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(_ref2){var fields=_ref2.fields,entrySet=_ref2.entrySet,idRangeMap=this.data().reduce(function(acc,v){return acc[v.id]=v,acc},{});return fields.reduce(function(acc,v){return acc[v]=entrySet.reduce(function(ranges,id){return id in idRangeMap&&ranges.push(idRangeMap[id].range),ranges},[]),acc},{})}},{key:"setParentInfo",value:function setParentInfo(info){this._canvasMount=info.canvasRoot}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},HORIZONTAL,{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var itemSpaces=measurement.itemSpaces,width=measurement.width,buffer=config.buffer;return{row:{width:"".concat(width+itemSpaces.length*buffer.horizontal||1,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width+buffer.horizontal,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.style("width","".concat(gradWidth,"px")),legendBody.style("height","".concat(gradHeight,"px")),legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),icon).attr("transform","translate(".concat(transalate," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color).attr("stroke",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](ele)),gradient_legend_defineProperty(_ref,"value",+value.toFixed(1)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data,context._id),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," ").concat(LEGEND_MARKER_PROPS_size+4,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),renderer_utils_applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(".concat(LEGEND_MARKER_PROPS_size+4," ").concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),renderer_utils_applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),renderer_utils_applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height+LEGEND_MARKER_PROPS_size+4,"px"),width:"".concat(gradientDimensions.width+LEGEND_MARKER_PROPS_size+4,"px")}),renderer_utils_applyStyle(legendRect,{fill:"url(#linear-gradient-".concat(context._id,")")}),legendGradSvg.attr("height",gradientDimensions.height+LEGEND_MARKER_PROPS_size+4),legendGradSvg.attr("width",gradientDimensions.width+LEGEND_MARKER_PROPS_size+4),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.mapSideEffects(gradient_legend_defineProperty({},"highlight",["marker"])),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(_ref2){var fields=_ref2.fields,criteria=_ref2.criteria;return fields.reduce(function(range,v){return range[v]=criteria[v],range},{})}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainLeg.push(domain[1]),domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,range,value=null;if(i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}},sideEffects:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container"),baseFontLimit:16,upperFontLimit:24,baseSizeLimit:100,upperSizeLimit:300,fractionImage:.8,fractionChild:.7};function local_options_typeof(obj){return(local_options_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function local_options_slicedToArray(arr,i){return function local_options_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function local_options_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function local_options_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var canvas_local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref){var _ref2=local_options_slicedToArray(_ref,2),arg1=_ref2[0],arg2=_ref2[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref3){var _ref4=local_options_slicedToArray(_ref3,2),title=_ref4[0],titleConfig=_ref4[1],t=title;"string"!=typeof title&&title||(t=function t(){return title});var defConfig=mergeRecursive({},TITLE_CONFIG);return[t,mergeRecursive(defConfig,titleConfig)]}}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref5){var _ref6=local_options_slicedToArray(_ref5,2),arg1=_ref6[0],arg2=_ref6[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref7){var _ref8=local_options_slicedToArray(_ref7,2),subtitle=_ref8[0],subtitleConfig=_ref8[1],sub=subtitle;"string"!=typeof subtitle&&subtitle||(sub=function sub(){return subtitle});var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return[sub,mergeRecursive(defConfig,subtitleConfig)]}}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,border_helper_specificBorderApplier=function specificBorderApplier(params){var borderTypes=params.borderTypes,showBorders=params.showBorders,cells=params.cells,borderInfo=params.borderInfo,name=params.name,isFacet=params.isFacet,color=borderInfo.color,style=borderInfo.style,width=borderInfo.width;borderTypes.forEach(function(borderType){!function applySpecificBorder(params){var type=params.type,borderWidth=params.borderWidth,borderStyle=params.borderStyle,cells=params.cells,isFacet=params.isFacet,color=params.color;isFacet?(cells.style("border-".concat(type,"-width"),"".concat(borderWidth,"px")),cells.style("border-".concat(type,"-style"),"".concat(borderStyle))):cells.style("border-".concat(type),"".concat(borderWidth,"px ").concat(borderStyle," ").concat(color))}({cells:cells,color:showBorders[borderType]?color:"rgba(0,0,0,0)",type:borderType,borderWidth:width,borderStyle:style,name:name,isFacet:isFacet})})},border_helper_applyBorders=function applyBorders(params){var cells=params.cells,border=params.border,row=params.row,column=params.column,isFacet=params.isFacet,showHeaders=params.showHeaders,name="".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column]),borderApplierFn=function borderApplier(cells,borderInfo,name,isFacet){var _ref2,showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return border_helper_defineProperty(_ref2={},"row",function(){return border_helper_specificBorderApplier({borderTypes:["top","bottom"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"column",function(){return border_helper_specificBorderApplier({borderTypes:["left","right"],showBorders:showColBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"center",function(){return border_helper_specificBorderApplier({borderTypes:["left","right","top","bottom"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"left",function(){return border_helper_specificBorderApplier({borderTypes:["left"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"right",function(){return border_helper_specificBorderApplier({borderTypes:["right"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"".concat("center").concat("left"),function _(){return border_helper_specificBorderApplier({borderTypes:["left","top","bottom"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"".concat("center").concat("right"),function _(){return border_helper_specificBorderApplier({borderTypes:["right","top","bottom"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),_ref2}(cells,border,name,isFacet),borderMapVal=function borderMap(isFacet,showHeaders){var _ref;return border_helper_defineProperty(_ref={},"".concat("top","-").concat("left"),isFacet&&showHeaders?"left":null),border_helper_defineProperty(_ref,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_ref,"".concat("top","-").concat("right"),isFacet&&showHeaders?"right":null),border_helper_defineProperty(_ref,"".concat("center","-").concat("left"),isFacet?"".concat("center").concat("left"):"row"),border_helper_defineProperty(_ref,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_ref,"".concat("center","-").concat("right"),isFacet?"".concat("center").concat("right"):"row"),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("right"),null),_ref}(isFacet,showHeaders)[name];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"formalName",value:function formalName(){return"SimpleCell"}},{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"padding",(enums_defaults_defineProperty(_CONSTANTS$PADDING={},visual_cell_src_enums_constants_LEFT,8),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_RIGHT,8),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_TOP,10),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$PADDING)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"headerPadding",(enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD={},visual_cell_src_enums_constants_LEFT,8),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_RIGHT,5),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_TOP,2),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_BOTTOM,5),_CONSTANTS$HEADER_PAD)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"titlePadding",(enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$TITLE_PADD)),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidthcurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")}).each(function(d){d.legend.mount(this)})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}},{key:"setComponentInfo",value:function setComponentInfo(params){var rootNode=params.rootNode;this.components.forEach(function(legendInfo){legendInfo.legend.setParentInfo({canvasRoot:rootNode})})}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(37),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();__webpack_require__(38);function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)MESSAGE_CONFIG.baseSizeLimit?MESSAGE_CONFIG.fractionChild*height:0,message=config.message;renderer_utils_applyStyle(node,{width:"".concat(width,"px"),height:"".concat(height,"px")});var childNode=makeElement(node,"div",[1],"".concat(className,"-child")),imageNode=makeElement(childNode,"div",[1],"".concat(className,"-child-img")),messageNode=makeElement(childNode,"div",[1],"".concat(className,"-child-message"));renderer_utils_applyStyle(childNode,{width:width,height:"".concat(childHeight,"px")}),renderer_utils_applyStyle(imageNode,{width:width,height:"".concat(childHeight*MESSAGE_CONFIG.fractionImage,"px")}),imageNode.html('\n\x3c!-- Generator: Sketch 60.1 (88133) - https://sketch.com --\x3e\n\nGroup 23\n Created with Sketch.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ');var textElement=makeElement(messageNode,"text",[1]);renderer_utils_applyStyle(messageNode,{"font-size":"".concat(function formatFontSize(width,height){var baseFontLimit=MESSAGE_CONFIG.baseFontLimit,upperFontLimit=MESSAGE_CONFIG.upperFontLimit,baseSizeLimit=MESSAGE_CONFIG.baseSizeLimit,upperSizeLimit=MESSAGE_CONFIG.upperSizeLimit,fontSize=upperFontLimit,dim=widthbaseSizeLimit&&dim0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function canvas_firebolt_helper_toConsumableArray(arr){return function canvas_firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1||rowProj.length>1))},helper_dispatchBehaviours=function dispatchBehaviours(firebolt,_ref){var payload=_ref.payload,unit=_ref.unit,behaviours=_ref.behaviours,_firebolt$context$con2=firebolt.context.config().interaction.behaviours,behaviourConfs=void 0===_firebolt$context$con2?{}:_firebolt$context$con2,unitFirebolt=unit.firebolt();behaviours.forEach(function(action){var mode=behaviourConfs[action],targetFirebolt=unitFirebolt;"common"===mode&&(targetFirebolt=firebolt);var actions=targetFirebolt._actions.behavioural;payload.criteria=helper_addFacetDataAndMeasureNames(payload.criteria,unit.facetFieldsMap(),unit.layers().map(function(layer){return Object.keys(layer.data().getFieldspace().getMeasure())})),targetFirebolt.dispatchBehaviour(action,payload,{propagate:!1,applySideEffect:!1});var identifiers=actions[action].propagationIdentifiers();firebolt.propagate(action,payload,identifiers,{sideEffects:getSideEffects(action,targetFirebolt._behaviourEffectMap),sourceUnitId:unit.id(),sourceId:targetFirebolt.id(),propagationDataSource:targetFirebolt.getPropagationSource()})})};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{};!function propagateValues(instance,action){var config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,identifiers=config.identifiers,sourceUnitId=config.sourceUnitId,sourceCanvasId=config.sourceCanvasId,dataModel=config.propagationDataSource,sideEfffects=instance._sideEffectDefinitions,behaviourEffectMap=instance._behaviourEffectMap,propagationBehaviour=instance._propagationBehaviourMap[action]||action;payload.sourceUnit=sourceUnitId,payload.action=action,payload.sourceCanvas=sourceCanvasId;var groupId=sourceCanvasId,sourceBehaviour=instance._actions.behavioural[action],isMutableAction=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:identifiers,isMutableAction:isMutableAction,groupId:groupId,sourceId:config.sourceId,filterFn:function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||!!effects&&effects.some(function(d){return sideEfffects[d.name||d].mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.sourceCanvas()}};if(dataModel.propagate(identifiers,propConfig,!0),action!==propagationBehaviour){var behaviourInstance=instance._actions.behavioural[propagationBehaviour];isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),dataModel.propagate(identifiers,Object.assign({},propConfig,{isMutableAction:isMutableAction,applyOnSource:!1,action:propagationBehaviour,sourceId:isMutableAction?groupId:sourceUnitId,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.sourceCanvas()}}),!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}})}}(this,behaviour,Object.assign({payload:payload,identifiers:identifiers,propagationFields:this._propagationFields,sourceId:this.id(),sourceCanvasId:this.id(),propagationDataSource:this.data()},auxConfig))}},{key:"getPropagationSource",value:function getPropagationSource(){return this.data()}},{key:"sourceCanvas",value:function sourceCanvas(){return this.context.alias()}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects,payload,propagationInf){var _this5=this;if(payload.sideEffects)return[{effects:payload.sideEffects,behaviours:[payload.action]}];var mode=this.context.config().interaction.tooltip.mode;return propagationInf.propPayload=propagationInf.propPayload||payload,sideEffects.forEach(function(d){var mappedEffects=d.effects;mappedEffects=mappedEffects.filter(function(se){return(se.name!==side_effects_TOOLTIP||"fragmented"!==mode)&&isSideEffectEnabled(_this5,{se:se,propagationInf:propagationInf})}),d.effects=mappedEffects}),sideEffects}}],[{key:"defaultInteractionPolicy",value:function defaultInteractionPolicy(){return function(){}}},{key:"defaultCrossInteractionPolicy",value:function defaultCrossInteractionPolicy(){return _defaultCrossInteractionPolicy}}]),GroupFireBolt}(),APP_INITIAL_STATE={app:{group:{},units:{},layers:{},canvas:{}},local:{canvas:{},group:{},units:{},layers:{}}};function canvas_typeof(obj){return(canvas_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function canvas_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function canvas_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:COMPONENTS,reg=Object.assign({},components);return{register:function register(cls){var key=cls.formalName();return reg[key]=cls,componentRegistry},get:function get(){return reg}}}(COMPONENTS),cells:cell_registry(),layers:layer_registry(),interactions:registry_registry};__webpack_require__(39);function muze_slicedToArray(arr,i){return function muze_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function muze_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function muze_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var muze_transactor=store_transactor,Smartlabel=SmartlabelManager_default.a,muze_enableChainedTransaction=enableChainedTransaction,muze_LifeCycleManager=lifecycle_manager,DataModel=datamodel_default.a,muze_Store=store_Store,globalCache={},defaultRegistry=default_registry_registry.components,overrideRegistryDefinitions=function overrideRegistryDefinitions(overrideRegistry,registry){overrideRegistry.forEach(function(def){registry.register(def)})},muze_muze=function muze(){var _transactor2=muze_slicedToArray(muze_transactor({},src_options),2),env=_transactor2[0],globalStore=_transactor2[1],components=Object.assign({},default_registry_registry.components.get()),componentSubRegistryDef=Object.assign({},SUBREGISTRIES),componentSubRegistry={};for(var prop in componentSubRegistryDef)componentSubRegistry[prop]=componentSubRegistryDef[prop](default_registry_registry[prop].get());return env.canvas=function(){var settings=globalStore.serialize(),canvas=canvas_Canvas.withSettings(settings,{components:components,componentSubRegistry:componentSubRegistry,interactions:default_registry_registry.interactions},env.globalDependencies());return muze_enableChainedTransaction(globalStore,canvas,Object.keys(settings)),canvas},env.globalDependencies=function(){return globalCache.smartlabel||(globalCache.smartlabel=new Smartlabel(1,"body")),{smartlabel:globalCache.smartlabel,lifeCycleManager:new muze_LifeCycleManager}},env.settings=function(){return globalStore.serialize()},env.registry=function(){for(var _len=arguments.length,overrideRegistry=new Array(_len),_key=0;_key<_len;_key++)overrideRegistry[_key]=arguments[_key];return overrideRegistry.length?(overrideRegistry.forEach(function(def){var prop=def.formalName();prop in defaultRegistry&&(components[prop]=def)}),env):components},env.cellRegistry=function(){for(var cellRegistry=componentSubRegistry.cellRegistry,_len2=arguments.length,overrideRegistry=new Array(_len2),_key2=0;_key2<_len2;_key2++)overrideRegistry[_key2]=arguments[_key2];return overrideRegistry.length?(overrideRegistryDefinitions(overrideRegistry,cellRegistry),env):cellRegistry.get()},env.layerRegistry=function(){for(var layerRegistry=componentSubRegistry.layerRegistry,_len3=arguments.length,overrideRegistry=new Array(_len3),_key3=0;_key3<_len3;_key3++)overrideRegistry[_key3]=arguments[_key3];return overrideRegistry.length?(overrideRegistryDefinitions(overrideRegistry,layerRegistry),env):layerRegistry.get()},env};muze_muze.registry=default_registry_registry,muze_muze.Components={VisualLayer:{layers:{BaseLayer:base_layer_BaseLayer,LineLayer:line_LineLayer,TextLayer:TextLayer,TickLayer:TickLayer,PointLayer:point_PointLayer,SimpleLayer:simple_layer_SimpleLayer,AreaLayer:area_AreaLayer,ArcLayer:ArcLayer},helpers:helpers,enums:src_enums_namespaceObject,layerMixins:layerMixins},VisualUnit:{constructor:visual_unit_VisualUnit,helpers:visual_unit_src_helper_namespaceObject,enums:visual_unit_src_enums_namespaceObject,UnitFireBolt:firebolt_UnitFireBolt},VisualGroup:{constructor:visual_group,Encoders:encoder_namespaceObject,encoderHelpers:encoder_helper_namespaceObject,groupUtils:group_utils_namespaceObject,enums:visual_group_src_enums_constants_namespaceObject},Canvas:{constructor:canvas_Canvas},Firebolt:{constructor:firebolt_Firebolt}};var SideEffects={sideEffects:src_side_effects_namespaceObject,standards:{SurrogateSideEffect:SurrogateSideEffect,SpawnableSideEffect:spawnable_SpawnableSideEffect,GenericSideEffect:generic}},Behaviours={behaviouralActions:behavioural_namespaceObject,standards:{GenericBehaviour:generic_GenericBehaviour,PersistentBehaviour:persistent_PersistentBehaviour,VolatileBehaviour:volatile_VolatileBehaviour}};muze_muze.DataModel=DataModel,muze_muze.version=muze_package.version,muze_muze.SideEffects=SideEffects,muze_muze.ActionModel=actionModel,muze_muze.layerFactory=src_layer_factory,muze_muze.Operators=operators_namespaceObject,muze_muze.Behaviours=Behaviours,muze_muze.utils=muze_utils_src_namespaceObject,muze_muze.Model=(new muze_Store).model.constructor;__webpack_exports__.default=muze_muze}])}); +!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=18)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){"@babel/helpers - typeof";return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e){e.exports=JSON.parse('{"name":"datamodel","description":"Relational algebra compliant in-memory tabular data store","homepage":"https://github.com/chartshq/datamodel","version":"2.3.1","license":"MIT","main":"dist/datamodel.js","keywords":["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],"author":"Muzejs.org (https://muzejs.org/)","repository":{"type":"git","url":"https://github.com/chartshq/datamodel.git"},"contributors":[{"name":"Akash Goswami","email":"akashgoswami90s@gmail.com"},{"name":"Subhash Haldar"},{"name":"Rousan Ali","email":"rousanali786@gmail.com","url":"https://rousan.io"},{"name":"Ujjal Kumar Dutta","email":"duttaujjalkumar@live.com"},{"name":"Ranajit Banerjee","email":"ranajit.113124@gmail.com"},{"name":"Adarsh Lilha","email":"adarshlilha@gmail.com"},{"name":"Swati Mukherjee","email":"swati020494@gmail.com"}],"dependencies":{"d3-dsv":"^1.0.8"},"devDependencies":{"babel-cli":"6.26.0","babel-core":"^6.26.3","babel-eslint":"6.1.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-flow":"^6.23.0","chai":"3.5.0","cross-env":"^5.0.5","eslint":"3.19.0","eslint-config-airbnb":"15.1.0","eslint-plugin-import":"2.7.0","eslint-plugin-jsx-a11y":"5.1.1","eslint-plugin-react":"7.3.0","istanbul-instrumenter-loader":"^3.0.0","jsdoc":"3.5.5","json2yaml":"^1.1.0","karma":"1.7.1","karma-chai":"0.1.0","karma-chrome-launcher":"2.1.1","karma-coverage-istanbul-reporter":"^1.3.0","karma-mocha":"1.3.0","karma-spec-reporter":"0.0.31","karma-webpack":"2.0.3","marked":"^0.5.0","mocha":"3.4.2","mocha-webpack":"0.7.0","transform-runtime":"0.0.0","webpack":"^4.12.0","webpack-cli":"^3.0.7","webpack-dev-server":"^3.1.4"},"scripts":{"test":"npm run lint && npm run ut","ut":"karma start karma.conf.js","utd":"karma start --single-run false --browsers Chrome karma.conf.js ","build":"npm run build:prod","build:dev":"webpack --mode development","build:prod":"webpack --mode production","start":"webpack-dev-server --config webpack.config.dev.js --mode development --open","lint":"eslint ./src","lint-errors":"eslint --quiet ./src","docs":"rm -rf yaml && mkdir yaml && jsdoc -c jsdoc.conf.json"}}')},function(e,t,n){var r=n(2);e.exports=r.default?r.default:r},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"DataFormat",function(){return o}),n.d(r,"DimensionSubtype",function(){return u}),n.d(r,"MeasureSubtype",function(){return c}),n.d(r,"FieldType",function(){return f}),n.d(r,"FilteringMode",function(){return l}),n.d(r,"GROUP_BY_FUNCTIONS",function(){return s});var i={};n.r(i),n.d(i,"Dimension",function(){return Me}),n.d(i,"Measure",function(){return Le}),n.d(i,"FieldParser",function(){return Be}),n.d(i,"fieldRegistry",function(){return Nt}),n.d(i,"columnMajor",function(){return v});var a={};n.r(a),n.d(a,"sum",function(){return Zn}),n.d(a,"avg",function(){return $n}),n.d(a,"min",function(){return Qn}),n.d(a,"max",function(){return er}),n.d(a,"first",function(){return tr}),n.d(a,"last",function(){return nr}),n.d(a,"count",function(){return rr}),n.d(a,"sd",function(){return ir});var o={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},u={CATEGORICAL:"categorical",TEMPORAL:"temporal",BINNED:"binned",ID:"__id"},c={CONTINUOUS:"continuous"},f={MEASURE:"measure",DIMENSION:"dimension"},l={NORMAL:"normal",INVERSE:"inverse",ALL:"all"},s={SUM:"sum",AVG:"avg",MIN:"min",MAX:"max",FIRST:"first",LAST:"last",COUNT:"count",STD:"std"};function p(e){return e instanceof Date?e:new Date(e)}function d(e){return e<10?"0"+e:e}function h(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},h.TOKEN_PREFIX="%",h.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},h.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},h.defaultRangeParser=function(e,t){return function(n){var r,i=void 0;if(!n)return t;var a=n.toLowerCase();for(i=0,r=e.length;ii.getFullYear()&&(t=""+(a-1)+r),p(t).getFullYear()},formatter:function formatter(e){var t=p(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return p(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[a+1],-1!==r.indexOf(o)&&i.push({index:a,token:o});return i},h.formatAs=function(e,t){var n,r=p(e),i=h.findTokens(t),a=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=i.length;l=0;p--)(f=a[p].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(p=0;p0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],i=+(n[1]||n[0]);if(i>=r)for(var a=r;a<=i;a+=1)t(a)})}var F=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:R,a=[],o=[],u=n||Y,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,p=c.name+"."+f.name,d=B(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=g({},e.schema());-1===d.indexOf(t.name)||r||(t.name=c.name+"."+t.name),a.push(t)}),f.fields.forEach(function(e){var t=g({},e.schema());-1!==d.indexOf(t.name)?r||(t.name=f.name+"."+t.name,a.push(t)):a.push(t)}),S(e._rowDiffset,function(n){var p=!1,h=void 0;S(t._rowDiffset,function(v){var y=[],m={};m[l]={},m[s]={},c.fields.forEach(function(e){y.push(e.partialField.data[n]),m[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}}),f.fields.forEach(function(e){-1!==d.indexOf(e.schema().name)&&r||y.push(e.partialField.data[v]),m[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}});var b=fn(m[l]),g=fn(m[s]);if(u(b,g,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var _={};y.forEach(function(e,t){_[a[t].name]=e}),p&&R!==i?o[h]=_:(o.push(_),p=!0,h=n)}else if((i===x||i===U)&&!p){var w={},O=c.fields.length-1;y.forEach(function(e,t){w[a[t].name]=t<=O?e:null}),p=!0,h=n,o.push(w)}})}),new qn(o,a,{name:p})}function J(e,t){var n=""+e,r=""+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function G(e,t,n,r){if(n===t)return e;var i=t+Math.floor((n-t)/2);return G(e,t,i,r),G(e,i+1,n,r),function(e,t,n,r,i){for(var a=e,o=[],u=t;u<=r;u+=1)o[u]=a[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(a[l]=o[f],f+=1):f>r?(a[l]=o[c],c+=1):i(o[c],o[f])<=0?(a[l]=o[c],c+=1):(a[l]=o[f],f+=1)}(e,t,i,n,r),e}(e,0,e.length-1,t),e}var Q,K=function K(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=""+e)==(t=""+t)?0:e>t?-1:1}}return n}(e.type,n)}function q(e,t){var n=new Map,r=[];return e.forEach(function(e){var i=e[t];n.has(i)?r[n.get(i)][1].push(e):(r.push([i,[e]]),n.set(i,r.length-1))}),r}function Z(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,i){return t[r]=e[1].map(function(e){return e[n[i].index]}),t},r),r}function $(e,t,n){for(var r=void 0,i=void 0,a=void 0,o=n.length-1;o>=0;o--)r=n[o][0],i=n[o][1],(a=Pn(t,r))&&("function"==typeof i?z(e,function(e,t){return i(e[a.index],t[a.index])}):_(i)?function(){var n=q(e,a.index),r=i[i.length-1],o=i.slice(0,i.length-1),u=o.map(function(e){return Pn(t,e)});n.forEach(function(e){e.push(Z(e,o,u))}),z(n,function(e,t){var n=e[2],i=t[2];return r(n,i)}),e.length=0,n.forEach(function(t){e.push.apply(e,W(t[1]))})}():function(){var t=X(a,i);z(e,function(e,n){return t(e[a.index],n[a.index])})}())}function te(e,t,n,r,i){var a=e.fields,o=e.idField.data(),c={schema:[],data:[],uids:[]},l=(i=Object.assign({},{addUid:!1,columnWise:!1},i)).addUid,s=r&&r.length>0,p=[];if(n.split(",").forEach(function(e){for(var t=0;tr&&(r=i))}),[n,r]},tt=function(){function e(e,t){for(var n=0;n=a?c=!0:10===(r=e.charCodeAt(o++))?f=!0:13===r&&(f=!0,10===e.charCodeAt(o)&&++o),e.slice(i+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+Lt(t,6):Lt(t,4))+"-"+Lt(e.getUTCMonth()+1,2)+"-"+Lt(e.getUTCDate(),2)+(a?"T"+Lt(n,2)+":"+Lt(r,2)+":"+Lt(i,2)+"."+Lt(a,3)+"Z":i?"T"+Lt(n,2)+":"+Lt(r,2)+":"+Lt(i,2)+"Z":r||n?"T"+Lt(n,2)+":"+Lt(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,i,a=r(e,function(e,r){if(n)return n(e,r-1);i=e,n=t?function(e,t){var n=xt(e);return function(r,i){return t(n(r),i,e)}}(e,t):xt(e)});return a.columns=i||[],a},parseRows:r,format:function format(t,n){return null==n&&(n=Ut(t)),[n.map(o).join(e)].concat(i(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=Ut(e)),i(e,t).join("\n")},formatRows:function formatRows(e){return e.map(a).join("\n")},formatRow:a,formatValue:o}},Yt=function Yt(e,t,n){if(!Array.isArray(t))throw new Error("Schema missing or is in an unsupported format");var r=t.map(function(e){return e.name});n=Object.assign({},{firstRowHeader:!0},n);var i=[],a=v(i),o=r;n.firstRowHeader&&(o=e.splice(0,1)[0]);var u=o.reduce(function(e,t,n){return Object.assign(e,(a=n,(i=t)in(r={})?Object.defineProperty(r,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[i]=a,r));var r,i,a},{});return e.forEach(function(e){var t=[];return r.forEach(function(n){var r=u[n];t.push(e[r])}),a.apply(void 0,t)}),[r,i]},Ht=function Ht(e,t,n){n=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},n);var r=Bt(n.fieldSeparator);return Yt(r.parseRows(e),t,n)},Jt=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[]).forEach(function(t){return e.store.set(t.type,t)}),this.store}},{key:"register",value:function value(e){return e instanceof Ct?(this.store.set(e.type,e),this):null}},{key:"unregister",value:function value(e){return this.store.delete(e.type),this}},{key:"get",value:function value(e){return this.store.has(e)?this.store.get(e):null}}]),e}(),an=function(){var e=null;return e||new rn}(),on=function on(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function un(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function cn(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3];t===M.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,cn(i))):e._derivation.push({op:t,meta:r,criteria:i})})(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function pn(e,t){var n;(n=t._ancestorDerivation).push.apply(n,cn(e._ancestorDerivation).concat(cn(e._derivation)))}(e,t)},hn=(un(tn={},l.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),un(tn,l.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),un(tn,l.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),tn),vn=function vn(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split("-")[0]+"-"+t}else e.push(""+t)},yn=function yn(e,t,n){var r=[],i=[],a=on(hn[n].calcDiff,2),o=a[0],u=a[1];return S(e,function(e){var n=t(e);n&&o&&vn(r,e,-1),!n&&u&&vn(i,e,-1)}),{rowDiffset:r.join(","),rejectRowDiffset:i.join(",")}},bn=function bn(e,t,n,r,i){var a={},o=function o(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e._partialFieldspace._cachedValueObjects;return i(c,function(e){return t(f[e],e,o,a)},u)},wn=function wn(e,t,n,r){var i=e[n];return i===C?r:t[i].internalValue},On=function On(e,t){return(t[0]instanceof Array?t:[t]).some(function(t){return e>=t[0]&&e<=t[1]})},En=(un(nn={},c.CONTINUOUS,On),un(nn,u.TEMPORAL,On),nn),An=function An(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=[],i=n.operation||"and",a=n.filterByDim,o=void 0===a||a,u=n.filterByMeasure,c=void 0!==u&&u,l=n.clone,p=void 0===l||l?function gn(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t}(e):e,d=p.getFieldsConfig(),h=e.getPartialFieldspace().idField.data();return r=t.length?t.map(function(e){return function(e){var t=e.criteria,n=void 0===t?{}:t,r=n.identifiers,i=void 0===r?[[],[]]:r,a=n.range,u=on(i,2),l=u[0],s=void 0===l?[]:l,p=u[1],v=void 0===p?[]:p,y=s.reduce(function(e,t,n){return e[t]=n,e},{}),m=(s=s.filter(function(e){return e in d&&d[e].def.type===f.DIMENSION||e===C})).length,b={};if(m)for(var g=function g(e,t){var n=i[e],r=void 0;if(C in y){var a=n[y.__id__];a&&a.values().forEach(function(e){r=""+s.map(function(t){var r=y[t];return t===C?e:n[r]}),b[r]=1})}else r=""+s.map(function(e){var t=y[e];return n[t]}),b[r]=1},_=1,w=i.length;_1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}i=(s=[]).concat.apply(s,[].concat(cn(d.map(c)),[{criteria:e,groupedModel:null!==e&&e.fields.some(function(e){return e.type===f.MEASURE})?Cn(n.propagationSource):null}])).filter(function(e){return null!==e}),l.push({criteria:i,excludeModels:[].concat(h,cn(r.excludeModels||[]))})}var y=t.model,m=Object.assign({sourceIdentifiers:e,propagationSourceId:u},r);l.forEach(function(e){var t=e.criteria,n=An(y,t,{filterByMeasure:!!t.find(function(e){return e.groupedModel===y})}),r=e.path;if(r){var i=function(e,t){for(var n=0,r=t.length;n2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.excludeModels||[],o=i.criteria;(!a.length||-1===a.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var a=o.filter(function(e){return e.groupedModel===t}),u=In(n,t);a.length&&(u=An(u,a,{filterByDim:!1,filterByMeasure:!0,clone:!1})),e(t,u,r,i)})}(y,n,m,{excludeModels:e.excludeModels,criteria:t})})},Vn=function Vn(e,t,n){var r=e.reduce(function(e,r){return"RegExp"===r.constructor.name?e.push.apply(e,cn(t.filter(function(e){return-1!==e.search(r)}))):r in n&&e.push(r),e},[]);return Array.from(new Set(r)).map(function(e){return e.trim()})},Bn=function Bn(e,t){return e.numberFormat?e.numberFormat()(t):t},Yn=function(){function e(e,t){for(var n=0;n1?(i=e.clone(r.saveChild),kn(i,u[c[1]],e,n,t),[o,i]):o}(this,e,t,{saveChild:t.saveChild})}},{key:"isEmpty",value:function value(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:"clone",value:function value(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),i=Object.keys(r),a=t.mode,o=Vn(e,i,r);return a===l.ALL?[Dn(this,o,{mode:l.NORMAL,saveChild:t.saveChild},i),Dn(this,o,{mode:l.INVERSE,saveChild:t.saveChild},i)]:Dn(this,o,t,i)}},{key:"getFieldsConfig",value:function value(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function value(){return this._fieldConfig=this._fieldspace.fields.reduce(function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e},{}),this}},{key:"dispose",value:function value(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(e){e._parent=null}),this._children=[]}},{key:"removeChild",value:function value(e){var t=this._children.findIndex(function(t){return t===e});-1===t||this._children.splice(t,1)}},{key:"setParent",value:function value(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}},{key:"getAncestorDerivations",value:function value(){return this._ancestorDerivation}}]),e}(),zn=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},r=""+e.join(),a=function Ee(e,t,n){var r=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=Oe(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},i=e.getFieldspace().getMeasure(),a=we.defaultReducer();return Object.keys(i).forEach(function(e){"string"!=typeof t[e]&&(t[e]=i[e].defAggFn());var r=we.resolve(t[e]);r?n[e]=r:(n[e]=a,t[e]=me)}),n}(e,n),a=e.getFieldspace(),o=e.getPartialFieldspace().idField.data(),c=a.fieldsObj(),l=a.name,s=[],p=[],d=[],h={},v=[];Object.entries(c).forEach(function(e){var t=Oe(e,2),n=t[0],a=t[1];if(-1!==r.indexOf(n)||i[n])switch(d.push(g({},a.schema())),a.schema().type){case f.MEASURE:p.push(n);break;default:case f.DIMENSION:s.push(n)}});var y=0,m=[];S(e._rowDiffset,function(e){var t="";s.forEach(function(n){t=t+"-"+c[n].partialField.data[e]}),void 0===h[t]?(h[t]=y,v.push({}),m.push([]),s.forEach(function(t){v[y][t]=c[t].partialField.data[e]}),p.forEach(function(t){v[y][t]=[c[t].partialField.data[e]]}),m[y]=[""+o[e]],y+=1):(p.forEach(function(n){v[h[t]][n].push(c[n].partialField.data[e])}),m[h[t]].push(""+o[e]))});var b={},_=function _(){return e.detachedRoot()};return v.forEach(function(e,t){var n=e;p.forEach(function(t){n[t]=i[t](e[t],_,b)}),n.__id__=m[t]}),d.push({name:C,type:f.DIMENSION,subtype:u.ID}),new ur(v,d,{name:l})}.apply(void 0,[this,e,t]);return dn(this,a,M.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:we.defaultReducer()},t),n.saveChild?a.setParent(this):a.setParent(null),a}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e,withUid:!0}),i=[n.schema.map(function(e){return e.name})].concat(n.data),a=new this.constructor(i,n.schema,{dataFormat:"DSVArr"});return dn(this,a,M.SORT,t,e),t.saveChild?a.setParent(this):a.setParent(null),a}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),i=r[0].length,a=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(a=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach(function(t,n){t[e.name()]=new D(i[n],a[n],e)});return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=Fn(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var i=this.getFieldsConfig(),a=t.slice(0,t.length-1),o=t[t.length-1];if(i[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=a.map(function(e){var t=i[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},p=function p(){return r.detachedRoot()},d=[];S(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});d[e]=o.apply(void 0,Kn(t).concat([e,p,s]))});var v=function Gn(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(Tt([d],[e],[e.name]),1)[0];return c.addField(v),dn(this,c,M.CAL_VAR,{config:e,fields:a},o),c}},{key:"propagate",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=t.isMutableAction,a=t.sourceId,o=t.payload,u=function Mn(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,l={groupByModel:Cn(this),model:u};return n&&function Ln(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,i=t.isMutableAction,a=t.criteria,o=t.action+"-"+t.sourceId;r=i?e.mutableActions:e.immutableActions,null===a?delete r[o]:r[o]={model:n,config:t}}(c,t,this),xn(e,l,{propagationNameSpace:c,sourceId:a,propagationSource:this},Object.assign({payload:o},t)),i&&function Un(e,t,n){var r=e.immutableActions;for(var i in r){var a=r[i],o=a.config,u=n.config.sourceId,c=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(o,n.config);if(o.sourceId!==u&&c){var f=o.criteria;xn(f,{model:t,groupByModel:Cn(a.model)},{propagationNameSpace:e,propagateToSource:!1,sourceId:u,propagationSource:a.model},o)}}}(c,u,{config:t,propConfig:r}),this}},{key:"on",value:function value(e,t){switch(e){case"propagation":this._onPropagation.push(t)}return this}},{key:"unsubscribe",value:function value(e){switch(e){case"propagation":this._onPropagation=[]}return this}},{key:"handlePropagation",value:function value(e,t){var n=this;this._onPropagation.forEach(function(r){return r.call(n,e,t)})}},{key:"bin",value:function value(e,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var i=function I(e,t,n){var r=n.buckets,i=n.binsCount,a=n.binSize,o=n.start,u=n.end,c=e.domain(),f=P(c,2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var p=[],d=0;d=(a=e[i=n+Math.floor((r-n)/2)]).start&&t=a.end?n=i+1:t2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],i=r.saveChild,a=e.getFieldspace().fieldsObj(),o=bn(e.clone(i),n,r,e,function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},i=this.getFieldsConfig(),a=Object.keys(i),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach(function(e,n){o[n]=Vn([].concat(Kn(e),Kn(t)),a,i)}),function Sn(e,t,n,r){return t.map(function(t){return Dn(e,t,n,r)})}(this,o,n,a)}}],[{key:"configureInvalidAwareTypes",value:function value(e){return T.invalidAwareVals(e)}},{key:"Reducers",get:function get(){return we}},{key:"Converters",get:function get(){return an}},{key:"FieldTypes",get:function get(){return Nt}}]),t}(),Zn=ye.sum,$n=ye.avg,Qn=ye.min,er=ye.max,tr=ye.first,nr=ye.last,rr=ye.count,ir=ye.std,ar={compose:function compose(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,i=void 0,a=[];return t.forEach(function(e){r=e(r),a.push.apply(a,function V(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),ltgtRegex:/<|>/g,brReplaceRegex://gi,testStrAvg:"WgI",parentContainerStyle:{position:"absolute",top:"-9999em",whiteSpace:"nowrap",padding:"0px",width:"1px",height:"1px",overflow:"hidden"},supportedStyle:{font:"font",fontFamily:"font-family","font-family":"font-family",fontWeight:"font-weight","font-weight":"font-weight",fontSize:"font-size","font-size":"font-size",lineHeight:"line-height","line-height":"line-height",fontStyle:"font-style","font-style":"font-style"},getDocumentSupport:function getDocumentSupport(){var childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){"@babel/helpers - typeof";return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(i=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]):(i=null,n=arguments.length<=0?void 0:arguments[0],o=arguments.length<=1?void 0:arguments[1]),t=o(y),(e=r=new _(t.fn)).addDependencies.apply(e,P(t.dependencies)),this._addPropInModel(i,function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},n,r)),this}},{key:"_addPropInModel",value:function value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"lock",value:function value(){return this._lockFlag=!0,this._reqQ.length=0,this}},{key:"unlock",value:function value(){return this._lockFlag=!1,this.setProp.apply(this,P(this._reqQ)),this._reqQ.length=0,this}},{key:"prop",value:function value(){var e,t=void 0,r=void 0;switch(e=arguments.length){case 1:t=arguments.length<=0?void 0:arguments[0];break;case 2:t=arguments.length<=0?void 0:arguments[0],r=arguments.length<=1?void 0:arguments[1];break;default:return this}return 2===e?(this._lockFlag?this._reqQ.push([t,r]):this.setProp([t,r]),this):this._graph.getNodeValue(t)}},{key:"setProp",value:function value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var muze_utils_src_namespaceObject={};__webpack_require__.r(muze_utils_src_namespaceObject),__webpack_require__.d(muze_utils_src_namespaceObject,"InvalidAwareTypes",function(){return src_InvalidAwareTypes}),__webpack_require__.d(muze_utils_src_namespaceObject,"DataModel",function(){return datamodel_default.a}),__webpack_require__.d(muze_utils_src_namespaceObject,"ReservedFields",function(){return reserved_fields}),__webpack_require__.d(muze_utils_src_namespaceObject,"CommonProps",function(){return common_props}),__webpack_require__.d(muze_utils_src_namespaceObject,"COORD_TYPES",function(){return COORD_TYPES}),__webpack_require__.d(muze_utils_src_namespaceObject,"STATE_NAMESPACES",function(){return namespace_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"scales",function(){return scales_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"colorSchemes",function(){return color_schemes_namespaceObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"getNearestValue",function(){return getNearestValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"getValueParser",function(){return getValueParser}),__webpack_require__.d(muze_utils_src_namespaceObject,"transformColor",function(){return common_utils_transformColor}),__webpack_require__.d(muze_utils_src_namespaceObject,"transformColors",function(){return common_utils_transformColors}),__webpack_require__.d(muze_utils_src_namespaceObject,"detectColor",function(){return detectColor}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslToRgb",function(){return hslToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"rgbToHsv",function(){return rgbToHsv}),__webpack_require__.d(muze_utils_src_namespaceObject,"hexToHsv",function(){return hexToHsv}),__webpack_require__.d(muze_utils_src_namespaceObject,"hsvToRgb",function(){return hsvToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslaToRgb",function(){return hslaToRgb}),__webpack_require__.d(muze_utils_src_namespaceObject,"escapeHTML",function(){return escapeHTML}),__webpack_require__.d(muze_utils_src_namespaceObject,"angleToRadian",function(){return angleToRadian}),__webpack_require__.d(muze_utils_src_namespaceObject,"generateGetterSetters",function(){return generateGetterSetters}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArraySum",function(){return getArraySum}),__webpack_require__.d(muze_utils_src_namespaceObject,"ERROR_MSG",function(){return ERROR_MSG}),__webpack_require__.d(muze_utils_src_namespaceObject,"interpolator",function(){return common_utils_interpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"colorInterpolator",function(){return common_utils_colorInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"numberInterpolator",function(){return common_utils_numberInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"piecewiseInterpolator",function(){return common_utils_piecewiseInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"reqAnimFrame",function(){return reqAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"cancelAnimFrame",function(){return cancelAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"nextAnimFrame",function(){return nextAnimFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMax",function(){return getMax}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMin",function(){return getMin}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDomainFromData",function(){return getDomainFromData}),__webpack_require__.d(muze_utils_src_namespaceObject,"getUniqueId",function(){return getUniqueId}),__webpack_require__.d(muze_utils_src_namespaceObject,"mergeRecursive",function(){return mergeRecursive}),__webpack_require__.d(muze_utils_src_namespaceObject,"unionDomain",function(){return unionDomain}),__webpack_require__.d(muze_utils_src_namespaceObject,"replaceCSSPrefix",function(){return replaceCSSPrefix}),__webpack_require__.d(muze_utils_src_namespaceObject,"symbolFns",function(){return symbolFns}),__webpack_require__.d(muze_utils_src_namespaceObject,"defaultValue",function(){return defaultValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"easeFns",function(){return easeFns}),__webpack_require__.d(muze_utils_src_namespaceObject,"clone",function(){return clone}),__webpack_require__.d(muze_utils_src_namespaceObject,"interpolateArray",function(){return interpolateArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMinPoint",function(){return getMinPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMaxPoint",function(){return getMaxPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"getClosestIndexOf",function(){return common_utils_getClosestIndexOf}),__webpack_require__.d(muze_utils_src_namespaceObject,"registerListeners",function(){return common_utils_registerListeners}),__webpack_require__.d(muze_utils_src_namespaceObject,"Voronoi",function(){return common_utils_Voronoi}),__webpack_require__.d(muze_utils_src_namespaceObject,"checkExistence",function(){return checkExistence}),__webpack_require__.d(muze_utils_src_namespaceObject,"sanitizeIP",function(){return sanitizeIP}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMinDiff",function(){return getMinDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"capitalizeFirst",function(){return capitalizeFirst}),__webpack_require__.d(muze_utils_src_namespaceObject,"getWindow",function(){return getWindow}),__webpack_require__.d(muze_utils_src_namespaceObject,"getQualifiedClassName",function(){return getQualifiedClassName}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDependencyOrder",function(){return getDependencyOrder}),__webpack_require__.d(muze_utils_src_namespaceObject,"objectIterator",function(){return objectIterator}),__webpack_require__.d(muze_utils_src_namespaceObject,"intSanitizer",function(){return intSanitizer}),__webpack_require__.d(muze_utils_src_namespaceObject,"enableChainedTransaction",function(){return enableChainedTransaction}),__webpack_require__.d(muze_utils_src_namespaceObject,"isHTMLElem",function(){return isHTMLElem}),__webpack_require__.d(muze_utils_src_namespaceObject,"isEqual",function(){return common_utils_isEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"isSimpleObject",function(){return isSimpleObject}),__webpack_require__.d(muze_utils_src_namespaceObject,"nextFrame",function(){return nextFrame}),__webpack_require__.d(muze_utils_src_namespaceObject,"getObjProp",function(){return getObjProp}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDataModelFromIdentifiers",function(){return common_utils_getDataModelFromIdentifiers}),__webpack_require__.d(muze_utils_src_namespaceObject,"getDataModelFromRange",function(){return getDataModelFromRange}),__webpack_require__.d(muze_utils_src_namespaceObject,"transposeArray",function(){return transposeArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"toArray",function(){return toArray}),__webpack_require__.d(muze_utils_src_namespaceObject,"extendsClass",function(){return extendsClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"concatModels",function(){return common_utils_concatModels}),__webpack_require__.d(muze_utils_src_namespaceObject,"assembleModelFromIdentifiers",function(){return assembleModelFromIdentifiers}),__webpack_require__.d(muze_utils_src_namespaceObject,"isValidValue",function(){return isValidValue}),__webpack_require__.d(muze_utils_src_namespaceObject,"nestCollection",function(){return common_utils_nestCollection}),__webpack_require__.d(muze_utils_src_namespaceObject,"stack",function(){return common_utils_stack}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSymbol",function(){return common_utils_getSymbol}),__webpack_require__.d(muze_utils_src_namespaceObject,"Scales",function(){return Scales}),__webpack_require__.d(muze_utils_src_namespaceObject,"Symbols",function(){return Symbols}),__webpack_require__.d(muze_utils_src_namespaceObject,"pathInterpolators",function(){return pathInterpolators}),__webpack_require__.d(muze_utils_src_namespaceObject,"hslInterpolator",function(){return common_utils_hslInterpolator}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSmallestDiff",function(){return getSmallestDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"require",function(){return require}),__webpack_require__.d(muze_utils_src_namespaceObject,"formatTemporal",function(){return common_utils_formatTemporal}),__webpack_require__.d(muze_utils_src_namespaceObject,"nearestSortingDetails",function(){return common_utils_nearestSortingDetails}),__webpack_require__.d(muze_utils_src_namespaceObject,"createSelection",function(){return common_utils_createSelection}),__webpack_require__.d(muze_utils_src_namespaceObject,"temporalFields",function(){return common_utils_temporalFields}),__webpack_require__.d(muze_utils_src_namespaceObject,"retrieveNearestGroupByReducers",function(){return common_utils_retrieveNearestGroupByReducers}),__webpack_require__.d(muze_utils_src_namespaceObject,"retrieveFieldDisplayName",function(){return retrieveFieldDisplayName}),__webpack_require__.d(muze_utils_src_namespaceObject,"sanitizeDomainWhenEqual",function(){return sanitizeDomainWhenEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"sortCategoricalField",function(){return sortCategoricalField}),__webpack_require__.d(muze_utils_src_namespaceObject,"intersect",function(){return common_utils_intersect}),__webpack_require__.d(muze_utils_src_namespaceObject,"partition",function(){return partition}),__webpack_require__.d(muze_utils_src_namespaceObject,"mix",function(){return mix}),__webpack_require__.d(muze_utils_src_namespaceObject,"componentRegistry",function(){return common_utils_componentRegistry}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArrayDiff",function(){return getArrayDiff}),__webpack_require__.d(muze_utils_src_namespaceObject,"difference",function(){return difference}),__webpack_require__.d(muze_utils_src_namespaceObject,"getArrayIndexMap",function(){return getArrayIndexMap}),__webpack_require__.d(muze_utils_src_namespaceObject,"arraysEqual",function(){return arraysEqual}),__webpack_require__.d(muze_utils_src_namespaceObject,"getReadableTicks",function(){return common_utils_getReadableTicks}),__webpack_require__.d(muze_utils_src_namespaceObject,"unique",function(){return unique}),__webpack_require__.d(muze_utils_src_namespaceObject,"dmMultipleSelection",function(){return common_utils_dmMultipleSelection}),__webpack_require__.d(muze_utils_src_namespaceObject,"pointWithinCircle",function(){return pointWithinCircle}),__webpack_require__.d(muze_utils_src_namespaceObject,"getIndexMap",function(){return getIndexMap}),__webpack_require__.d(muze_utils_src_namespaceObject,"selectElement",function(){return renderer_utils_selectElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"makeElement",function(){return makeElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"applyStyle",function(){return renderer_utils_applyStyle}),__webpack_require__.d(muze_utils_src_namespaceObject,"addClass",function(){return renderer_utils_addClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"removeClass",function(){return renderer_utils_removeClass}),__webpack_require__.d(muze_utils_src_namespaceObject,"appendElement",function(){return appendElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"setAttrs",function(){return renderer_utils_setAttrs}),__webpack_require__.d(muze_utils_src_namespaceObject,"setStyles",function(){return renderer_utils_setStyles}),__webpack_require__.d(muze_utils_src_namespaceObject,"createElement",function(){return renderer_utils_createElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"createElements",function(){return renderer_utils_createElements}),__webpack_require__.d(muze_utils_src_namespaceObject,"clipElement",function(){return renderer_utils_clipElement}),__webpack_require__.d(muze_utils_src_namespaceObject,"getElementsByClassName",function(){return renderer_utils_getElementsByClassName}),__webpack_require__.d(muze_utils_src_namespaceObject,"getMousePos",function(){return getMousePos}),__webpack_require__.d(muze_utils_src_namespaceObject,"getEvent",function(){return renderer_utils_getEvent}),__webpack_require__.d(muze_utils_src_namespaceObject,"getD3Drag",function(){return renderer_utils_getD3Drag}),__webpack_require__.d(muze_utils_src_namespaceObject,"getSmartComputedStyle",function(){return renderer_utils_getSmartComputedStyle}),__webpack_require__.d(muze_utils_src_namespaceObject,"getClientPoint",function(){return renderer_utils_getClientPoint}),__webpack_require__.d(muze_utils_src_namespaceObject,"hasTouch",function(){return hasTouch}),__webpack_require__.d(muze_utils_src_namespaceObject,"Store",function(){return store_Store}),__webpack_require__.d(muze_utils_src_namespaceObject,"transactor",function(){return store_transactor}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMillisecond",function(){return src_millisecond}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeSecond",function(){return src_second}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMinute",function(){return src_minute}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeHour",function(){return src_hour}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeDay",function(){return src_day}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeWeek",function(){return sunday}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeMonth",function(){return src_month}),__webpack_require__.d(muze_utils_src_namespaceObject,"timeYear",function(){return src_year}),__webpack_require__.d(muze_utils_src_namespaceObject,"Smartlabel",function(){return SmartlabelManager_default.a}),__webpack_require__.d(muze_utils_src_namespaceObject,"dataSelect",function(){return dataSelect}),__webpack_require__.d(muze_utils_src_namespaceObject,"LifeCycleManager",function(){return lifecycle_manager}),__webpack_require__.d(muze_utils_src_namespaceObject,"DimensionSubtype",function(){return dist_datamodel.DimensionSubtype}),__webpack_require__.d(muze_utils_src_namespaceObject,"FieldType",function(){return dist_datamodel.FieldType}),__webpack_require__.d(muze_utils_src_namespaceObject,"MeasureSubtype",function(){return dist_datamodel.MeasureSubtype}),__webpack_require__.d(muze_utils_src_namespaceObject,"DateTimeFormatter",function(){return dist_datamodel.DateTimeFormatter}),__webpack_require__.d(muze_utils_src_namespaceObject,"DM_DERIVATIVES",function(){return dist_datamodel.DM_DERIVATIVES}),__webpack_require__.d(muze_utils_src_namespaceObject,"GROUP_BY_FUNCTIONS",function(){return dist_datamodel.GROUP_BY_FUNCTIONS}),__webpack_require__.d(muze_utils_src_namespaceObject,"RTree",function(){return RTree});var enums_constants_namespaceObject={};__webpack_require__.r(enums_constants_namespaceObject),__webpack_require__.d(enums_constants_namespaceObject,"CLASSPREFIX",function(){return CLASSPREFIX}),__webpack_require__.d(enums_constants_namespaceObject,"STACK",function(){return STACK}),__webpack_require__.d(enums_constants_namespaceObject,"GROUP",function(){return GROUP}),__webpack_require__.d(enums_constants_namespaceObject,"IDENTITY",function(){return IDENTITY}),__webpack_require__.d(enums_constants_namespaceObject,"ANGLE",function(){return constants_ANGLE}),__webpack_require__.d(enums_constants_namespaceObject,"RADIUS",function(){return constants_RADIUS}),__webpack_require__.d(enums_constants_namespaceObject,"SIZE",function(){return SIZE}),__webpack_require__.d(enums_constants_namespaceObject,"COLOR",function(){return COLOR}),__webpack_require__.d(enums_constants_namespaceObject,"SHAPE",function(){return SHAPE}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT",function(){return TEXT}),__webpack_require__.d(enums_constants_namespaceObject,"OUTER_RADIUS_VALUE",function(){return OUTER_RADIUS_VALUE}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT_ANCHOR_MIDDLE",function(){return TEXT_ANCHOR_MIDDLE}),__webpack_require__.d(enums_constants_namespaceObject,"ENCODING",function(){return ENCODING}),__webpack_require__.d(enums_constants_namespaceObject,"STROKE_DASHARRAY",function(){return STROKE_DASHARRAY}),__webpack_require__.d(enums_constants_namespaceObject,"ASCENDING",function(){return ASCENDING}),__webpack_require__.d(enums_constants_namespaceObject,"AGG_FN_SUM",function(){return AGG_FN_SUM}),__webpack_require__.d(enums_constants_namespaceObject,"AREA_LAYER",function(){return AREA_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"ARC_LAYER",function(){return ARC_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"LINE_LAYER",function(){return LINE_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"TEXT_LAYER",function(){return TEXT_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"POINT_LAYER",function(){return POINT_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"BAR_LAYER",function(){return BAR_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"TICK_LAYER",function(){return TICK_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"SIMPLE_LAYER",function(){return SIMPLE_LAYER}),__webpack_require__.d(enums_constants_namespaceObject,"BASE_LAYER",function(){return BASE_LAYER});var props_namespaceObject={};__webpack_require__.r(props_namespaceObject),__webpack_require__.d(props_namespaceObject,"DATA",function(){return DATA}),__webpack_require__.d(props_namespaceObject,"CONFIG",function(){return CONFIG}),__webpack_require__.d(props_namespaceObject,"MEASUREMENT",function(){return MEASUREMENT}),__webpack_require__.d(props_namespaceObject,"DOMAIN",function(){return DOMAIN}),__webpack_require__.d(props_namespaceObject,"MOUNT",function(){return MOUNT});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var visual_group_src_enums_constants_namespaceObject={};__webpack_require__.r(visual_group_src_enums_constants_namespaceObject),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"X",function(){return X}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"Y",function(){return Y}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"WIDTH",function(){return WIDTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HEIGHT",function(){return HEIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASUREMENT",function(){return constants_MEASUREMENT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CONFIG",function(){return constants_CONFIG}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MIN_UNIT_WIDTH",function(){return MIN_UNIT_WIDTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MIN_UNIT_HEIGHT",function(){return MIN_UNIT_HEIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DIMENSIONS",function(){return DIMENSIONS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASURES",function(){return MEASURES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DIMENSION",function(){return DIMENSION}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MEASURE",function(){return MEASURE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"PIVOT",function(){return PIVOT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FORMAT",function(){return FORMAT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"MOUNT",function(){return constants_MOUNT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HAS_DATA_UPDATED",function(){return HAS_DATA_UPDATED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ROWS",function(){return ROWS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLUMNS",function(){return COLUMNS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DATA",function(){return constants_DATA}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COL",function(){return COL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ROW",function(){return ROW}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLUMN",function(){return COLUMN}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"COLOR",function(){return enums_constants_COLOR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SHAPE",function(){return enums_constants_SHAPE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SIZE",function(){return enums_constants_SIZE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DETAIL",function(){return DETAIL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LAYERS",function(){return LAYERS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TRANSFORM",function(){return TRANSFORM}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ORDINAL",function(){return enums_constants_ORDINAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LINEAR",function(){return enums_constants_LINEAR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LEFT",function(){return constants_LEFT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RIGHT",function(){return constants_RIGHT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TOP",function(){return enums_constants_TOP}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BOTTOM",function(){return enums_constants_BOTTOM}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RETINAL",function(){return RETINAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CELL",function(){return CELL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"X_AXES",function(){return X_AXES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"Y_AXES",function(){return Y_AXES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ENTRY_CELLS",function(){return ENTRY_CELLS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"INITIALIZED",function(){return INITIALIZED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"EXIT_CELLS",function(){return EXIT_CELLS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"AXIS",function(){return AXIS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"UNIT",function(){return UNIT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"UPDATED",function(){return UPDATED}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BEFORE_UPDATE",function(){return BEFORE_UPDATE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"VALUE_MATRIX",function(){return VALUE_MATRIX}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FACET_HEADERS",function(){return FACET_HEADERS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"RADIUS",function(){return enums_constants_RADIUS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ANGLE",function(){return enums_constants_ANGLE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ANGLE0",function(){return ANGLE0}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ARC",function(){return ARC}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"CATEGORICAL",function(){return constants_CATEGORICAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"TEMPORAL",function(){return constants_TEMPORAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BAR",function(){return BAR}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"LINE",function(){return LINE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"POINT",function(){return POINT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"PRIMARY",function(){return PRIMARY}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"SECONDARY",function(){return SECONDARY}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"BOTH",function(){return BOTH}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"INTERACTION",function(){return INTERACTION}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"GRID_LINES",function(){return GRID_LINES}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"GRID_BANDS",function(){return GRID_BANDS}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"HEADER",function(){return HEADER}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"FACET",function(){return FACET}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DEFAULT",function(){return DEFAULT}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"ASCENDING",function(){return constants_ASCENDING}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DESCENDING",function(){return DESCENDING}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DARK",function(){return DARK}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"NONE",function(){return NONE}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"NORMAL",function(){return NORMAL}),__webpack_require__.d(visual_group_src_enums_constants_namespaceObject,"DARKER",function(){return DARKER});var helpers_namespaceObject={};__webpack_require__.r(helpers_namespaceObject),__webpack_require__.d(helpers_namespaceObject,"transformColor",function(){return helpers_transformColor}),__webpack_require__.d(helpers_namespaceObject,"applyInteractionStyle",function(){return helpers_applyInteractionStyle}),__webpack_require__.d(helpers_namespaceObject,"retrieveEncodingInf",function(){return helpers_retrieveEncodingInf}),__webpack_require__.d(helpers_namespaceObject,"encodingFieldInfRetriever",function(){return encodingFieldInfRetriever}),__webpack_require__.d(helpers_namespaceObject,"setNullsInStack",function(){return helpers_setNullsInStack}),__webpack_require__.d(helpers_namespaceObject,"transformData",function(){return helpers_transformData}),__webpack_require__.d(helpers_namespaceObject,"getIndividualClassName",function(){return getIndividualClassName}),__webpack_require__.d(helpers_namespaceObject,"dataNormalizers",function(){return dataNormalizers}),__webpack_require__.d(helpers_namespaceObject,"getNormalizedData",function(){return helpers_getNormalizedData}),__webpack_require__.d(helpers_namespaceObject,"domainCalculator",function(){return domainCalculator}),__webpack_require__.d(helpers_namespaceObject,"attachDataToVoronoi",function(){return helpers_attachDataToVoronoi}),__webpack_require__.d(helpers_namespaceObject,"updateStyle",function(){return helpers_updateStyle}),__webpack_require__.d(helpers_namespaceObject,"animateGroup",function(){return helpers_animateGroup}),__webpack_require__.d(helpers_namespaceObject,"positionPoints",function(){return positionPoints}),__webpack_require__.d(helpers_namespaceObject,"getGroupSpan",function(){return getGroupSpan}),__webpack_require__.d(helpers_namespaceObject,"getPlotMeasurement",function(){return helpers_getPlotMeasurement}),__webpack_require__.d(helpers_namespaceObject,"renderLayer",function(){return helpers_renderLayer}),__webpack_require__.d(helpers_namespaceObject,"resolveInvalidTransformType",function(){return helpers_resolveInvalidTransformType}),__webpack_require__.d(helpers_namespaceObject,"getValidTransform",function(){return getValidTransform}),__webpack_require__.d(helpers_namespaceObject,"getValidTransformForAggFn",function(){return helpers_getValidTransformForAggFn}),__webpack_require__.d(helpers_namespaceObject,"getMarkId",function(){return helpers_getMarkId}),__webpack_require__.d(helpers_namespaceObject,"resolveEncodingValues",function(){return helpers_resolveEncodingValues}),__webpack_require__.d(helpers_namespaceObject,"getColorMetaInf",function(){return getColorMetaInf}),__webpack_require__.d(helpers_namespaceObject,"toCartesianCoordinates",function(){return toCartesianCoordinates}),__webpack_require__.d(helpers_namespaceObject,"sortData",function(){return sortData}),__webpack_require__.d(helpers_namespaceObject,"getBoundBoxes",function(){return helpers_getBoundBoxes}),__webpack_require__.d(helpers_namespaceObject,"getDataFromEvent",function(){return helpers_getDataFromEvent});var point_helper_namespaceObject={};__webpack_require__.r(point_helper_namespaceObject),__webpack_require__.d(point_helper_namespaceObject,"prepareDrawingInf",function(){return helper_prepareDrawingInf}),__webpack_require__.d(point_helper_namespaceObject,"pointTranslators",function(){return helper_pointTranslators}),__webpack_require__.d(point_helper_namespaceObject,"getStrokeWidthByPosition",function(){return getStrokeWidthByPosition});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var src_enums_namespaceObject={};__webpack_require__.r(src_enums_namespaceObject),__webpack_require__.d(src_enums_namespaceObject,"PROPS",function(){return props_namespaceObject}),__webpack_require__.d(src_enums_namespaceObject,"LAYER_TYPES",function(){return layer_types_namespaceObject}),__webpack_require__.d(src_enums_namespaceObject,"CONSTANTS",function(){return enums_constants_namespaceObject});var visual_unit_src_helper_namespaceObject={};__webpack_require__.r(visual_unit_src_helper_namespaceObject),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getDimensionMeasureMap",function(){return helper_getDimensionMeasureMap}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"transformDataModels",function(){return transformDataModels}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayerFromDef",function(){return helper_getLayerFromDef}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"resolveEncodingTransform",function(){return resolveEncodingTransform}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"sanitizeLayerDef",function(){return helper_sanitizeLayerDef}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"attachDataToLayers",function(){return attachDataToLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"attachAxisToLayers",function(){return helper_attachAxisToLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayerAxisIndex",function(){return helper_getLayerAxisIndex}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"unionDomainFromLayers",function(){return helper_unionDomainFromLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"renderLayers",function(){return helper_renderLayers}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getNearestDimensionalValue",function(){return helper_getNearestDimensionalValue}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getLayersBy",function(){return getLayersBy}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"removeLayersBy",function(){return removeLayersBy}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createSideEffectGroup",function(){return helper_createSideEffectGroup}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createRenderPromise",function(){return createRenderPromise}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"getRadiusRange",function(){return getRadiusRange}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"setAxisRange",function(){return helper_setAxisRange}),__webpack_require__.d(visual_unit_src_helper_namespaceObject,"createRTree",function(){return helper_createRTree});var reactive_props_namespaceObject={};__webpack_require__.r(reactive_props_namespaceObject),__webpack_require__.d(reactive_props_namespaceObject,"CONFIG",function(){return reactive_props_CONFIG}),__webpack_require__.d(reactive_props_namespaceObject,"DATA",function(){return reactive_props_DATA}),__webpack_require__.d(reactive_props_namespaceObject,"AXES",function(){return AXES}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERDEFS",function(){return LAYERDEFS}),__webpack_require__.d(reactive_props_namespaceObject,"WIDTH",function(){return reactive_props_WIDTH}),__webpack_require__.d(reactive_props_namespaceObject,"HEIGHT",function(){return reactive_props_HEIGHT}),__webpack_require__.d(reactive_props_namespaceObject,"MOUNT",function(){return reactive_props_MOUNT}),__webpack_require__.d(reactive_props_namespaceObject,"TRANSFORM",function(){return reactive_props_TRANSFORM}),__webpack_require__.d(reactive_props_namespaceObject,"TRANSFORMEDDATA",function(){return TRANSFORMEDDATA}),__webpack_require__.d(reactive_props_namespaceObject,"DATADOMAIN",function(){return DATADOMAIN}),__webpack_require__.d(reactive_props_namespaceObject,"FIELDS",function(){return FIELDS}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERAXISINDEX",function(){return LAYERAXISINDEX}),__webpack_require__.d(reactive_props_namespaceObject,"LAYERS",function(){return reactive_props_LAYERS}),__webpack_require__.d(reactive_props_namespaceObject,"DOMAIN",function(){return reactive_props_DOMAIN});var visual_unit_src_enums_constants_namespaceObject={};__webpack_require__.r(visual_unit_src_enums_constants_namespaceObject),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CLASSPREFIX",function(){return enums_constants_CLASSPREFIX}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"IDFIELD",function(){return IDFIELD}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_LINE_PARENT_GROUP_CLASS",function(){return GRID_LINE_PARENT_GROUP_CLASS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_BAND_PARENT_GROUP_CLASS",function(){return GRID_BAND_PARENT_GROUP_CLASS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_PARENT_GROUP",function(){return GRID_PARENT_GROUP}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"BAND",function(){return enums_constants_BAND}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"TICK",function(){return TICK}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_BAND",function(){return GRID_BAND}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"GRID_LINE",function(){return GRID_LINE}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CONSOLIDATED",function(){return CONSOLIDATED}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"FRAGMENTED",function(){return FRAGMENTED}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"FACET_BY_FIELDS",function(){return FACET_BY_FIELDS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"RETINAL_FIELDS",function(){return RETINAL_FIELDS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"PARENT_ALIAS",function(){return PARENT_ALIAS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"LAYERS",function(){return constants_LAYERS}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"CACHED_DATA",function(){return CACHED_DATA}),__webpack_require__.d(visual_unit_src_enums_constants_namespaceObject,"STORE",function(){return STORE});var visual_unit_src_enums_namespaceObject={};__webpack_require__.r(visual_unit_src_enums_namespaceObject),__webpack_require__.d(visual_unit_src_enums_namespaceObject,"REACTIVE_PROPS",function(){return reactive_props_namespaceObject}),__webpack_require__.d(visual_unit_src_enums_namespaceObject,"CONSTANTS",function(){return visual_unit_src_enums_constants_namespaceObject});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return behaviours_TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"ANCHORS",function(){return side_effects_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"BRUSH_ANCHORS",function(){return side_effects_BRUSH_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"PERSISTENT_ANCHORS",function(){return side_effects_PERSISTENT_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"FILTER",function(){return side_effects_FILTER}),__webpack_require__.d(side_effects_namespaceObject,"HIGHLIGHTER",function(){return side_effects_HIGHLIGHTER}),__webpack_require__.d(side_effects_namespaceObject,"CROSSLINE",function(){return CROSSLINE}),__webpack_require__.d(side_effects_namespaceObject,"TOOLTIP",function(){return side_effects_TOOLTIP}),__webpack_require__.d(side_effects_namespaceObject,"FRAGMENTED_TOOLTIP",function(){return FRAGMENTED_TOOLTIP}),__webpack_require__.d(side_effects_namespaceObject,"AXIS_LABEL_HIGHLIGHTER",function(){return AXIS_LABEL_HIGHLIGHTER});var src_side_effects_namespaceObject={};__webpack_require__.r(src_side_effects_namespaceObject),__webpack_require__.d(src_side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(src_side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"FragmentedTooltip",function(){return fragmented_tooltip_FragmentedTooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(src_side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(src_side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"AxisLabelHighLighter",function(){return axis_labels_highlighter_AxisLabelHighLighter});var group_utils_namespaceObject={};__webpack_require__.r(group_utils_namespaceObject),__webpack_require__.d(group_utils_namespaceObject,"initStore",function(){return group_utils_initStore}),__webpack_require__.d(group_utils_namespaceObject,"isDistributionEqual",function(){return group_utils_isDistributionEqual}),__webpack_require__.d(group_utils_namespaceObject,"initializeCacheMaps",function(){return initializeCacheMaps}),__webpack_require__.d(group_utils_namespaceObject,"getAxisKey",function(){return getAxisKey}),__webpack_require__.d(group_utils_namespaceObject,"getCellKey",function(){return getCellKey}),__webpack_require__.d(group_utils_namespaceObject,"extractUnitConfig",function(){return group_utils_extractUnitConfig}),__webpack_require__.d(group_utils_namespaceObject,"hasOneField",function(){return hasOneField}),__webpack_require__.d(group_utils_namespaceObject,"getHeaderText",function(){return getHeaderText}),__webpack_require__.d(group_utils_namespaceObject,"headerCreator",function(){return group_utils_headerCreator}),__webpack_require__.d(group_utils_namespaceObject,"sanitizeCheck",function(){return group_utils_sanitizeCheck}),__webpack_require__.d(group_utils_namespaceObject,"findInGroup",function(){return group_utils_findInGroup}),__webpack_require__.d(group_utils_namespaceObject,"getAxisType",function(){return group_utils_getAxisType}),__webpack_require__.d(group_utils_namespaceObject,"retriveDomainFromData",function(){return retriveDomainFromData}),__webpack_require__.d(group_utils_namespaceObject,"mutateAxesFromMap",function(){return mutateAxesFromMap}),__webpack_require__.d(group_utils_namespaceObject,"getEncoder",function(){return group_utils_getEncoder}),__webpack_require__.d(group_utils_namespaceObject,"getHeaderAxisFrom",function(){return group_utils_getHeaderAxisFrom}),__webpack_require__.d(group_utils_namespaceObject,"setFacetsAndProjections",function(){return setFacetsAndProjections}),__webpack_require__.d(group_utils_namespaceObject,"getBorders",function(){return getBorders}),__webpack_require__.d(group_utils_namespaceObject,"getFieldsFromSuppliedLayers",function(){return getFieldsFromSuppliedLayers}),__webpack_require__.d(group_utils_namespaceObject,"extractFields",function(){return group_utils_extractFields}),__webpack_require__.d(group_utils_namespaceObject,"sortFacetFields",function(){return group_utils_sortFacetFields}),__webpack_require__.d(group_utils_namespaceObject,"removeExitCells",function(){return group_utils_removeExitCells});var encoder_helper_namespaceObject={};__webpack_require__.r(encoder_helper_namespaceObject),__webpack_require__.d(encoder_helper_namespaceObject,"getAdjustedDomain",function(){return getAdjustedDomain}),__webpack_require__.d(encoder_helper_namespaceObject,"generateAxisFromMap",function(){return encoder_helper_generateAxisFromMap}),__webpack_require__.d(encoder_helper_namespaceObject,"sanitizeIndividualLayerConfig",function(){return encoder_helper_sanitizeIndividualLayerConfig}),__webpack_require__.d(encoder_helper_namespaceObject,"mutateAxesFromMap",function(){return encoder_helper_mutateAxesFromMap}),__webpack_require__.d(encoder_helper_namespaceObject,"getDefaultMark",function(){return encoder_helper_getDefaultMark}),__webpack_require__.d(encoder_helper_namespaceObject,"createRetinalAxis",function(){return encoder_helper_createRetinalAxis}),__webpack_require__.d(encoder_helper_namespaceObject,"getIndex",function(){return getIndex}),__webpack_require__.d(encoder_helper_namespaceObject,"getLayerConfFromFields",function(){return getLayerConfFromFields}),__webpack_require__.d(encoder_helper_namespaceObject,"resolveAxisConfig",function(){return encoder_helper_resolveAxisConfig}),__webpack_require__.d(encoder_helper_namespaceObject,"getSortingConfig",function(){return getSortingConfig});var encoder_namespaceObject={};__webpack_require__.r(encoder_namespaceObject),__webpack_require__.d(encoder_namespaceObject,"VisualEncoder",function(){return visual_encoder_VisualEncoder}),__webpack_require__.d(encoder_namespaceObject,"CartesianEncoder",function(){return cartesian_encoder_CartesianEncoder}),__webpack_require__.d(encoder_namespaceObject,"PolarEncoder",function(){return polar_encoder_PolarEncoder}),__webpack_require__.d(encoder_namespaceObject,"RetinalEncoder",function(){return retinal_encoder_RetinalEncoder});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendMarker",function(){return legend_marker_LegendMarker});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var src_number=function(a,b){return a=+a,b=+b,function(t){return a*(1-t)+b*t}},define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex=/^#([0-9a-f]{3,8})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function color_formatHex(){return this.rgb().formatHex()}function color_formatRgb(){return this.rgb().formatRgb()}function color_color(format){var m,l;return format=(format+"").trim().toLowerCase(),(m=reHex.exec(format))?(l=m[1].length,m=parseInt(m[1],16),6===l?rgbn(m):3===l?new Rgb(m>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):8===l?new Rgb(m>>24&255,m>>16&255,m>>8&255,(255&m)/255):4===l?new Rgb(m>>12&15|m>>8&240,m>>8&15|m>>4&240,m>>4&15|240&m,((15&m)<<4|15&m)/255):null):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function rgb_formatHex(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)}function rgb_formatRgb(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===a?")":", "+a+")")}function hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}function hsl(h,s,l,opacity){return 1===arguments.length?hslConvert(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Color,color_color,{copy:function copy(channels){return Object.assign(new this.constructor,this,channels)},displayable:function displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHsl:function color_formatHsl(){return hslConvert(this).formatHsl()},formatRgb:color_formatRgb,toString:color_formatRgb}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rgb_formatHex,formatHex:rgb_formatHex,formatRgb:rgb_formatRgb,toString:rgb_formatRgb})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),this.opacity)},displayable:function displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function formatHsl(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===a?")":", "+a+")")}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;return new FormatSpecifier({fill:match[1],align:match[2],sign:match[3],symbol:match[4],zero:match[5],width:match[6],comma:match[7],precision:match[8]&&match[8].slice(1),trim:match[9],type:match[10]})}function FormatSpecifier(specifier){this.fill=void 0===specifier.fill?" ":specifier.fill+"",this.align=void 0===specifier.align?">":specifier.align+"",this.sign=void 0===specifier.sign?"-":specifier.sign+"",this.symbol=void 0===specifier.symbol?"":specifier.symbol+"",this.zero=!!specifier.zero,this.width=void 0===specifier.width?void 0:+specifier.width,this.comma=!!specifier.comma,this.precision=void 0===specifier.precision?void 0:+specifier.precision,this.trim=!!specifier.trim,this.type=void 0===specifier.type?"":specifier.type+""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0&&(i0=0)}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},locale_map=Array.prototype.map,prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=void 0===locale.grouping||void 0===locale.thousands?src_identity:function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale_map.call(locale.grouping,Number),locale.thousands+""),currencyPrefix=void 0===locale.currency?"":locale.currency[0]+"",currencySuffix=void 0===locale.currency?"":locale.currency[1]+"",decimal=void 0===locale.decimal?".":locale.decimal+"",numerals=void 0===locale.numerals?src_identity:function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale_map.call(locale.numerals,String)),percent=void 0===locale.percent?"%":locale.percent+"",minus=void 0===locale.minus?"-":locale.minus+"",nan=void 0===locale.nan?"NaN":locale.nan+"";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(void 0===precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currencyPrefix:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currencySuffix:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=isNaN(value)?nan:formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:minus:"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=void 0===precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=0===arguments.length?new Date:new Date(+date)),date}return interval.floor=function(date){return floori(date=new Date(+date)),date},interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var year_year=newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()});year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,month_month=(year_year.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,durationMinute=(month_month.range,6e4),durationWeek=6048e5;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),day_day=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day,hour_hour=(day_day.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,minute_minute=(hour_hour.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,second_second=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()})),src_second=second_second,millisecond_millisecond=(second_second.range,newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start}));millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond;millisecond_millisecond.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcDay=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay,utcYear=(utcDay.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newDate(y,m,d){return{y:y,m:m,d:d,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseQuarter(d,string,i){var n=numberRe.exec(string.slice(i,i+1));return n?(d.q=3*n[0]-3,i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.s=+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d)-1,d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d)-1,d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d)-1,d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d)-1,d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.getHours()>=12)]},q:function formatQuarter(d){return 1+~~(d.getMonth()/3)},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatSeconds,u:formatWeekdayNumberMonday,U:formatWeekNumberSunday,V:formatWeekNumberISO,w:formatWeekdayNumberSunday,W:formatWeekNumberMonday,x:null,X:null,y:locale_formatYear,Y:formatFullYear,Z:formatZone,"%":formatLiteralPercent},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.getUTCHours()>=12)]},q:function formatUTCQuarter(d){return 1+~~(d.getUTCMonth()/3)},Q:formatUnixTimestamp,s:formatUnixTimestampSeconds,S:formatUTCSeconds,u:formatUTCWeekdayNumberMonday,U:formatUTCWeekNumberSunday,V:formatUTCWeekNumberISO,w:formatUTCWeekdayNumberSunday,W:formatUTCWeekNumberMonday,x:null,X:null,y:formatUTCYear,Y:formatUTCFullYear,Z:formatUTCZone,"%":formatLiteralPercent},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},q:parseQuarter,Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newDate(d.y,0,1))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=localDate(newDate(d.y,0,1))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newDate(d.y,0,1)).getUTCDay():localDate(newDate(d.y,0,1)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):localDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",!1);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier+="",!0);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,src_defaultLocale_locale.utcFormat,src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""},sequential_multi_cubehelix=cubehelixLong(cubehelix_cubehelix(300,.5,0),cubehelix_cubehelix(-240,.5,1)),BuGn=src_ramp(new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(d3_scale_chromatic_src_colors)),BuPu=src_ramp(new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(d3_scale_chromatic_src_colors)),GnBu=src_ramp(new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(d3_scale_chromatic_src_colors)),OrRd=src_ramp(new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(d3_scale_chromatic_src_colors)),PuBuGn=src_ramp(new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(d3_scale_chromatic_src_colors)),PuBu=src_ramp(new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(d3_scale_chromatic_src_colors)),PuRd=src_ramp(new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(d3_scale_chromatic_src_colors)),RdPu=src_ramp(new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(d3_scale_chromatic_src_colors)),YlGnBu=src_ramp(new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(d3_scale_chromatic_src_colors)),YlGn=src_ramp(new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(d3_scale_chromatic_src_colors)),YlOrBr=src_ramp(new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(d3_scale_chromatic_src_colors)),YlOrRd=src_ramp(new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(d3_scale_chromatic_src_colors)),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",swap=function swap(arr,i,j){var tmp=arr[i];arr[i]=arr[j],arr[j]=tmp},defaultCompare=function defaultCompare(a,b){return a>b?-1:a>b?1:0},quick_select=function quickselect(arr,k,left,right,compare){!function quickselectStep(arr,k,left,right,compare){for(;right>left;){if(right-left>600){var n=right-left+1,m=k-left+1,z=Math.log(n),s=.5*Math.exp(2*z/3),sd=.5*Math.sqrt(z*s*(n-s)/n)*(m-n/2<0?-1:1);quickselectStep(arr,k,Math.max(left,Math.floor(k-m*s/n+sd)),Math.min(right,Math.floor(k+(n-m)*s/n+sd)),compare)}var t=arr[k],i=left,j=right;for(swap(arr,left,k),compare(arr[right],t)>0&&swap(arr,left,right);i0;)j--}0===compare(arr[left],t)?swap(arr,left,j):swap(arr,++j,right),j<=k&&(left=j+1),k<=j&&(right=j-1)}}(arr,k,left||0,right||arr.length-1,compare||defaultCompare)};function _defineProperties(target,props){for(var i=0;i=a.minX&&b.maxY>=a.minY},findItem=function findItem(item,items,equalsFn){if(!equalsFn)return items.indexOf(item);for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:9;!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RTree),this._maxEntries=Math.max(4,maxEntries),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}return function _createClass(Constructor,protoProps,staticProps){return protoProps&&_defineProperties(Constructor.prototype,protoProps),staticProps&&_defineProperties(Constructor,staticProps),Constructor}(RTree,[{key:"all",value:function all(){return _all(this.data,[])}},{key:"search",value:function search(bbox){var node=this.data,result=[];if(!intersects(bbox,node))return result;for(var toBBox=this.toBBox,nodesToSearch=[];node;){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=node.children[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var child=_step.value,childBBox=node.leaf?toBBox(child):child;intersects(bbox,childBBox)&&(node.leaf?result.push(child):contains(bbox,childBBox)?_all(child,result):nodesToSearch.push(child))}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}node=nodesToSearch.pop()}return result}},{key:"load",value:function load(data){if(!data||!data.length)return this;if(data.length=0&&insertPath[level].children.length>this._maxEntries;)this.split(insertPath,level),level--;this.adjustParentBoxes(bbox,insertPath,level)}},{key:"split",value:function split(insertPath,level){var node=insertPath[level],M=node.children.length,m=this._minEntries;this.chooseSplitAxis(node,m,M);var splitIndex=this.chooseSplitIndex(node,m,M),newNode=createNode(node.children.splice(splitIndex,node.children.length-splitIndex));newNode.height=node.height,newNode.leaf=node.leaf,calcBBox(node,this.toBBox),calcBBox(newNode,this.toBBox),level?insertPath[level-1].children.push(newNode):this.splitRoot(node,newNode)}},{key:"splitRoot",value:function splitRoot(node,newNode){this.data=createNode([node,newNode]),this.data.height=node.height+1,this.data.leaf=!1,calcBBox(this.data,this.toBBox)}},{key:"chooseSplitIndex",value:function chooseSplitIndex(node,m,M){for(var index,minOverlap=1/0,minArea=1/0,i=m;i<=M-m;i++){var bbox1=distBBox(node,0,i,this.toBBox),bbox2=distBBox(node,i,M,this.toBBox),overlap=intersectionArea(bbox1,bbox2),area=bboxArea(bbox1)+bboxArea(bbox2);overlap=m;_i--){var _child=node.children[_i];r_tree_extend(rightBBox,node.leaf?toBBox(_child):_child),margin+=bboxMargin(rightBBox)}return margin}},{key:"adjustParentBoxes",value:function adjustParentBoxes(bbox,path,level){for(var i=level;i>=0;i--)r_tree_extend(path[i],bbox)}},{key:"condense",value:function condense(path){for(var siblings,i=path.length-1;i>=0;i--)0===path[i].children.length?i>0?(siblings=path[i-1].children).splice(siblings.indexOf(path[i]),1):this.clear():calcBBox(path[i],this.toBBox)}}]),RTree}(),reserved_fields={ROW_ID:"__id__",MEASURE_NAMES:"__measure_names__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES={POLAR:"polar",CARTESIAN:"cartesian"},DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,pi=Math.PI,halfPi=pi/2,tau=2*pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/pi);context.moveTo(r,0),context.arc(0,0,r,0,tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},kr=Math.sin(pi/10)/Math.sin(7*pi/10),kx=Math.sin(tau/10)*kr,ky=-Math.cos(tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},path_pi=Math.PI,path_tau=2*path_pi,tauEpsilon=path_tau-1e-6;function Path(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function path_path(){return new Path}Path.prototype=path_path.prototype={constructor:Path,moveTo:function moveTo(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((path_pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y,ccw=!!ccw;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%path_tau+path_tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=path_pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},none=function(series){for(var n=series.length,o=new Array(n);--n>=0;)o[n]=n;return o},order_ascending=function(series){var sums=series.map(ascending_sum);return none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}function _point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/6}Cardinal.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:_point(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}CatmullRom.prototype={areaStart:function areaStart(){this._line=0},areaEnd:function areaEnd(){this._line=NaN},lineStart:function lineStart(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function lineEnd(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function point(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:!function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}(this,x,y)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(ia?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function hsl_hsl(hue){return function(start,end){var h=hue((start=hsl(start)).h,(end=hsl(end)).h),s=nogamma(start.s,end.s),l=nogamma(start.l,end.l),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.h=h(t),start.s=s(t),start.l=l(t),start.opacity=opacity(t),start+""}}}hsl_hsl(color_hue);var hslLong=hsl_hsl(nogamma);function piecewise_piecewise(interpolate,values){for(var i=0,n=values.length-1,v=values[0],I=new Array(n<0?0:n);i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},getExtremePoint=function getExtremePoint(points,compareValue,minOrMax){for(var extremePoint,point,val,len=points.length,minOrMaxVal="max"===minOrMax?-1/0:1/0,i=0;iminOrMaxVal)&&(minOrMaxVal=val,extremePoint=point);return extremePoint},getMinPoint=function getMinPoint(points,compareValue){return getExtremePoint(points,compareValue,"min")},getMaxPoint=function getMaxPoint(points,compareValue){return getExtremePoint(points,compareValue,"max")},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},reqAnimFrame=requestAnimationFrame,cancelAnimFrame=cancelAnimationFrame,capitalizeFirst=function capitalizeFirst(text){return(text=text.toLowerCase()).replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1)})},unique=function unique(arr){var fn=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(d){return d},vals=arr.reduce(function(acc,v){return acc[fn(v)]=v,acc},{});return Object.values(vals)},getMinDiff=function getMinDiff(arr,index){var diff,uniqueVals;if((uniqueVals=unique(void 0!==index?arr.map(function(d){return d[index]}):arr)).length>1){diff=Math.abs(uniqueVals[1]-uniqueVals[0]);for(var i=2,len=uniqueVals.length;i0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0},common_utils_isEqual=function isEqual(type){return function(oldVal,newVal){return"Array"===type?!!oldVal&&arraysEqual(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},enableChainedTransaction=function enableChainedTransaction(transactionModel,transactionEndpoint,transactionItems){return transactionItems.forEach(function(item){return transactionModel.registerImmediateListener(item,function(_ref3){var newVal=_slicedToArray(_ref3,2)[1];return transactionEndpoint[item](newVal)})})},isHTMLElem=function isHTMLElem(elem){return elem instanceof common_utils_HTMLElement},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||dataSelect(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},interpolateArray=function interpolateArray(data,fitCount){var linearInterpolate=function linearInterpolate(before,after,atPoint){return before+(after-before)*atPoint},newData=[],springFactor=(data.length-1)/(fitCount-1);newData[0]=data[0];for(var i=1;i1&&(t-=1),t<1/6?p+6*(q-p)*t:t<.5?q:t<2/3?p+(q-p)*(2/3-t)*6:p}var hslToRgb=function hslToRgb(h,s,l){var r,g,b,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;if(0===s)r=g=b=l;else{var q=l<.5?l*(1+s):l+s-l*s,p=2*l-q;r=hue2rgb(p,q,h+1/3),g=hue2rgb(p,q,h),b=hue2rgb(p,q,h-1/3)}return[255*r,255*g,255*b,a]},rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g3&&void 0!==arguments[3]?arguments[3]:1,i=Math.floor(6*h),f=6*h-i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s);switch(i%6){case 0:r=v,g=t,b=p;break;case 1:r=q,g=v,b=p;break;case 2:r=p,g=v,b=t;break;case 3:r=p,g=q,b=v;break;case 4:r=t,g=p,b=v;break;case 5:r=v,g=p,b=q}return[255*r,255*g,255*b,a]},hexToHsv=function hexToHsv(hex){hex=hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(m,r,g,b){return r+r+g+g+b+b});var result=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return result?rgbToHsv(parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)):""},hslaToRgb=function hslaToRgb(h,s,l,a){var _hslToRgb2=_slicedToArray(hslToRgb(h,s,l,a),4);return function RGBAtoRGB(r,g,b,a){var r2=arguments.length>4&&void 0!==arguments[4]?arguments[4]:255,g2=arguments.length>5&&void 0!==arguments[5]?arguments[5]:255,b2=arguments.length>6&&void 0!==arguments[6]?arguments[6]:255,r3=Math.round((1-a)*r2+a*r),g3=Math.round((1-a)*g2+a*g),b3=Math.round((1-a)*b2+a*b);return"rgb(".concat(r3,",").concat(g3,",").concat(b3,")")}(_hslToRgb2[0],_hslToRgb2[1],_hslToRgb2[2],_hslToRgb2[3])},detectColor=function detectColor(col){return/rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/.test(col)||/rgba?\(((25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,\s*?){2}(25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,?\s*([01]\.?\d*?)?\)/.test(col)?"rgb":/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.test(col)||/^hsla\(([\d.]+),\s*([\d.]+)%,\s*([\d.]+)%,\s*(\d*(?:\.\d+)?)\)$/.test(col)?"hsl":/^#([0-9a-f]{3}){1,2}$/i.test(col)?"hex":col};var assembleModelFromIdentifiers=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=range[0]&&fieldValue<=range[1]})},{saveChild:!1,mode:mode})},getArrayIndexMap=function getArrayIndexMap(arr){return arr.reduce(function(acc,value,i){return acc[value]=i,acc},{})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode,hasBarLayer){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig||d===reserved_fields.ROW_ID});filteredDataModel=dataModel.select(function(fields,rowId){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=propField===reserved_fields.ROW_ID?rowId:fields[propField].internalValue,index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode,hasBarLayer);return filteredDataModel},common_utils_registerListeners=function registerListeners(context,listenerMap){for(var _len2=arguments.length,params=new Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)params[_key2-2]=arguments[_key2];var propListenerMap=listenerMap.apply(void 0,[context].concat(params));for(var key in propListenerMap)if({}.hasOwnProperty.call(propListenerMap,key)){var namespace=params[1].namespace,ns=null;namespace&&(ns=namespace);var mapObj=propListenerMap[key],propType=mapObj.type,props=mapObj.props,listenerFn=mapObj.listener;context.store()[propType](props,listenerFn,!1,{namespace:ns})}},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},escapeHTML=function escapeHTML(str){var htmlEscapes={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})},transposeArray=function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},extendsClass=function extendsClass(cls,extendsFrom,found){if(!cls)return!1;var prototype=cls.prototype;return found=prototype instanceof extendsFrom||extendsClass(prototype,extendsFrom,found)},common_utils_concatModels=function concatModels(dm1,dm2){for(var dataObj1=dm1.getData(),dataObj2=dm2.getData(),data1=dataObj1.data,data2=dataObj2.data,schema1=dataObj1.schema,schema2=dataObj2.schema,commonTuples={},i=0;i0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):(d[0]=0,d[1]=dy)}),_defineProperty(_stackOffsets,"none",offset_none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},pie:function(){var value=d3_shape_src_identity,sortValues=src_descending,sort=null,startAngle=d3_shape_src_constant(0),endAngle=d3_shape_src_constant(tau),padAngle=d3_shape_src_constant(0);function pie(data){var i,j,k,a1,v,n=data.length,sum=0,index=new Array(n),arcs=new Array(n),a0=+startAngle.apply(this,arguments),da=Math.min(tau,Math.max(-tau,endAngle.apply(this,arguments)-a0)),p=Math.min(Math.abs(da)/n,padAngle.apply(this,arguments)),pa=p*(da<0?-1:1);for(i=0;i0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},common_utils_nearestSortingDetails=function nearestSortingDetails(dataModel){var nearestSortDerivation=[].concat(common_utils_toConsumableArray(dataModel.getAncestorDerivations()),common_utils_toConsumableArray(dataModel.getDerivations())).reverse().find(function(derivation){return derivation.op===dist_datamodel.DM_DERIVATIVES.SORT});return nearestSortDerivation?nearestSortDerivation.criteria:null},common_utils_sortingOrder=function sortingOrder(a,b){return a instanceof InvalidAwareTypes||b instanceof InvalidAwareTypes?1:a.localeCompare(b)},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return common_utils_sortingOrder(firstVal,secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return common_utils_sortingOrder(secondVal,firstVal)}),_sortOrderMap),sortCategoricalField=function sortCategoricalField(sortOrder,firstVal,secondVal){var sortOrderType=common_utils_typeof(sortOrder);return sortOrderType===FUNCTION?sortOrder(firstVal,secondVal):sortOrderType===STRING&&sortOrderMap[sortOrder]?sortOrderMap[sortOrder](firstVal,secondVal):null},common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},difference=function difference(arr1,arr2){var _accessors2=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors2[0],fn2=_accessors2[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return!set.has(fn1(value))})},partition=function partition(array,filterFn){return array.reduce(function(acc,v,i){return filterFn(v,i,array)?acc[0].push(v):acc[1].push(v),acc},[[],[]])},mix=function mix(superclass){return{with:function _with(){for(var _len4=arguments.length,mixins=new Array(_len4),_key4=0;_key4<_len4;_key4++)mixins[_key4]=arguments[_key4];return mixins.reduce(function(cls,mixin){return mixin(cls)},superclass)}}},common_utils_componentRegistry=function componentRegistry(comps){var reg=Object.assign({},comps),regObj={register:function register(def,customKey){var key=customKey||def.formalName();return reg[key]=def,regObj},get:function get(){return reg}};return regObj},common_utils_getReadableTicks=function getReadableTicks(domain,steps){var orderedDomain=[Math.min.apply(Math,common_utils_toConsumableArray(domain)),Math.max.apply(Math,common_utils_toConsumableArray(domain))];if(steps<3)return orderedDomain;var tempScale=quantize().domain(orderedDomain).nice(),legendTicks=null;return legendTicks=Symbols.axisBottom().scale(tempScale).scale().ticks(steps),Math.max.apply(Math,common_utils_toConsumableArray(legendTicks))orderedDomain[0]&&legendTicks.unshift(orderedDomain[0]),legendTicks},common_utils_transformColor=function transformColor(rgbaValues,_ref7,datum,apply){var _ref7$h=_ref7.h,h=void 0===_ref7$h?0:_ref7$h,_ref7$s=_ref7.s,s=void 0===_ref7$s?0:_ref7$s,_ref7$l=_ref7.l,l=void 0===_ref7$l?0:_ref7$l,a=_ref7.a,_RGBAToHSLA$code=_slicedToArray(function RGBAToHSLA(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r/=255,g/=255,b/=255;var cmin=Math.min(r,g,b),cmax=Math.max(r,g,b),delta=cmax-cmin,h=0,s=0,l=0;return h=0===delta?0:cmax===r?(g-b)/delta%6:cmax===g?(b-r)/delta+2:(r-g)/delta+4,(h=Math.round(60*h))<0&&(h+=360),l=(cmax+cmin)/2,s=+(100*(s=0===delta?0:delta/(1-Math.abs(2*l-1)))).toFixed(1),l=+(100*l).toFixed(1),{color:"hsla(".concat(h,",").concat(s,"%,").concat(l,"%,").concat(a,")"),code:[h,s,l,a]}}.apply(void 0,common_utils_toConsumableArray(rgbaValues)).code,4),origH=_RGBAToHSLA$code[0],origS=_RGBAToHSLA$code[1],origL=_RGBAToHSLA$code[2],origA=_RGBAToHSLA$code[3],sanitizedA=parseFloat(a||origA,10),newH=origH+h,newS=origS+s,newL=origL+l,newA=sanitizedA+1;return apply||(newA=sanitizedA-1),{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH,newS,newL,newA]}},pointWithinCircle=function pointWithinCircle(c,point){var cx=c.x,cy=c.y,r=c.r,x=point.x,y=point.y;return Math.sqrt(Math.pow(cx-x,2)+Math.pow(cy-y,2))<=r},common_utils_dmMultipleSelection=function dmMultipleSelection(targetData,dm){var targetFields=targetData[0],payloadMap=targetData.slice(1,targetData.length).reduce(function(acc,v){return acc[v]=v,acc},{}),measures=Object.keys(dm.getFieldspace().getMeasure());return function filterFn(fields,i){return"".concat(targetFields.map(function(field){var val;if(field===reserved_fields.MEASURE_NAMES)val=measures;else if(field===reserved_fields.ROW_ID)val=i;else{var currentField=fields[field];val=currentField instanceof InvalidAwareTypes?currentField.value():(currentField||{}).internalValue}return val}))in payloadMap}},getIndexMap=function getIndexMap(arr,prop){return arr.reduce(function(acc,v,i){return acc[prop?v[prop]:v]=i,acc},{})};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=0}};function textRemove(){this.textContent=""}function htmlRemove(){this.innerHTML=""}function raise_raise(){this.nextSibling&&this.parentNode.appendChild(this)}function lower(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function constantNull(){return null}function remove_remove(){var parent=this.parentNode;parent&&parent.removeChild(this)}function selection_cloneShallow(){var clone=this.cloneNode(!1),parent=this.parentNode;return parent?parent.insertBefore(clone,this.nextSibling):clone}function selection_cloneDeep(){var clone=this.cloneNode(!0),parent=this.parentNode;return parent?parent.insertBefore(clone,this.nextSibling):clone}var filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}var cssNode,cssRoot,cssView,svgNode,degrees=180/Math.PI,decompose_identity={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},decompose=function(a,b,c,d,e,f){var scaleX,scaleY,skewX;return(scaleX=Math.sqrt(a*a+b*b))&&(a/=scaleX,b/=scaleX),(skewX=a*c+b*d)&&(c-=a*skewX,d-=b*skewX),(scaleY=Math.sqrt(c*c+d*d))&&(c/=scaleY,d/=scaleY,skewX/=scaleY),a*d180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i.call(this,t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i.call(this,t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i.call(this,t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},textTween:function(value){var key="text";if(arguments.length<1)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function textTween(value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function textInterpolate(i){return function(t){this.textContent=i.call(this,t)}}(i)),t0}return tween._value=value,tween}(value))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},renderer_utils_applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},appendElement=function appendElement(element1,element2){element1.appendChild(element2)},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_addClass=function addClass(element,className,selector,filterFn){src_select(element).selectAll(selector).each(function(data){var elem=src_select(this);filterFn?filterFn(data)&&elem.classed(className,!0):elem.classed(className,!0)})},renderer_utils_removeClass=function removeClass(element,className,selector,filterFn){src_select(element).selectAll(selector).each(function(data){var elem=src_select(this);filterFn?filterFn(data)&&elem.classed(className,!1):elem.classed(className,!1)})},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i}));var sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(data);sel.enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_clipElement=function clipElement(container,measurement,id){var clipPathElement=makeElement(src_select(container),"clipPath",[1],"#".concat(id));makeElement(clipPathElement,"rect",[1]).attr("x",measurement.x).attr("y",measurement.x).attr("width",measurement.width).attr("height",measurement.height),clipPathElement.attr("clip-path","url(#".concat(id,")"))},renderer_utils_getElementsByClassName=function getElementsByClassName(node,className){return src_select(node).selectAll(className).nodes()},getMousePos=function getMousePos(element,event){var boundingClientRect=element.getBoundingClientRect();return{x:event.x-boundingClientRect.x,y:event.y-boundingClientRect.y}},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_createElement=function createElement(tag,mount){return src_select(mount).append(tag).node()},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(11),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var _len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];if(params.length){var _ref$takesMultiplePar=(meta||{}).takesMultipleParams,takesMultipleParams=void 0!==_ref$takesMultiplePar&&_ref$takesMultiplePar,val=takesMultipleParams?params:params[0];if(meta){var values,prevVal=context.get(nsProp,subNamespace),sanitization=meta.sanitization,typeCheck=meta.typeCheck,typeExpected=meta.typeExpected;if("function"==typeof sanitization&&(val=sanitization(val,prevVal,holder)),"function"==typeof typeCheck)typeCheck(val)&&(values=val);else"string"==typeof typeCheck&&"constructor"===typeCheck?val&&val.constructor.name===typeExpected&&(values=val):values=val;var preset=meta.preset,oldValues=toArray(context.get(nsProp,subNamespace));preset&&preset(values,holder),takesMultipleParams&&oldValues.forEach(function(value,i){void 0===values[i]&&(values[i]=value)}),values&&context.commit(nsProp,values,subNamespace)}else context.commit(nsProp,val,subNamespace);return holder}return context.get(nsProp,subNamespace)}}(store,conf.meta,nameSpaceProp,Array.isArray(conf.value))}if(subNamespace)for(var key in stateProps)store.commit(key,stateProps[key][subNamespace],subNamespace);else void 0===namespace?store.append(stateProps):store.append(namespace,stateProps);return[holder,store]},SmartlabelManager=__webpack_require__(8),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,CLASSPREFIX="muze",STACK="stack",GROUP="group",IDENTITY="identity",constants_ANGLE="angle",constants_RADIUS="radius",SIZE="size",COLOR="color",SHAPE="shape",TEXT="text",OUTER_RADIUS_VALUE="outerRadiusValue",TEXT_ANCHOR_MIDDLE="middle",ENCODING={X:"x",Y:"y",X0:"x0",Y0:"y0",RADIUS:"radius",RADIUS0:"radius0",ANGLE:"angle",ANGLE0:"angle0",COLOR:"color",SHAPE:"shape",SIZE:"size",TEXT:"text"},STROKE_DASHARRAY="stroke-dasharray",ASCENDING="asc",AGG_FN_SUM="sum",AREA_LAYER="area",ARC_LAYER="arc",LINE_LAYER="line",TEXT_LAYER="text",POINT_LAYER="point",BAR_LAYER="bar",TICK_LAYER="tick",SIMPLE_LAYER="simple",BASE_LAYER="base";function simple_layer_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")")))})}(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=Math.min(minTickSpace.width,tickDimWidth),minTickHeight=Math.min(minTickSpace.height,tickDimHeight);return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain))),Math.max.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain))),Math.max.apply(Math,helper_toConsumableArray(tickValues).concat(helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+(tickValues?axisNamePadding:0)}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?{allTickDimensions:allTickDimensions,tickSize:0,tickDimensions:{height:0,width:0},axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks}:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{key:"getUnitWidth",value:function getUnitWidth(){return 0}},{key:"serialize",value:function serialize(){return{name:this.name,type:this.type,range:this.range(),config:this.config()}}},{key:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var renderConfig=axisInstance.renderConfig(),config=axisInstance.config(),show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName,mount=axisInstance.mount(),orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix;if(show){var availableSpace,labelProps,tickSize,selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});if(selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axisInstance.domain().length>0){var labelManager=axisInstance.dependencies().labelManager,range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter;tickSize=axisInstance.getTickSize(),labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks)),availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions,axis_renderer_setFixedBaseline(axisInstance),labels.rotation||!1!==labels.smartTicks?(selectContainer.call(axis),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize)):selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0)}var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"_getRawTickValue",value:function _getRawTickValue(data){return data}},{key:"getTicksBasedOnData",value:function getTicksBasedOnData(tickData){var _this=this,allTicks=renderer_utils_selectElement(this.mount()).selectAll(".tick"),elementToBeModified=null,elementNotToBeModified=null;return tickData&&(elementToBeModified=allTicks.filter(function(tickValue){return tickData===_this._getRawTickValue(tickValue)}),elementNotToBeModified=allTicks.filter(function(tickValue){return!(tickData===_this._getRawTickValue(tickValue))})),{selectionSet:elementToBeModified,rejectionSet:elementNotToBeModified||allTicks}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){"@babel/helpers - typeof";return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){"@babel/helpers - typeof";return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops?config.stops:config.range&&config.range.length>2?config.range.length:DEFAULT_CONFIG.stops),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}},sanitiseConfigIntervals=function sanitiseConfigIntervals(intervals){return intervals||5};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(common_utils_hslInterpolator(),range.map(function(e){return props_getHslString(e)})),i=0;ioriginalRangeLen){var newRange=[],newDomain=originalDomain.map(function(d,i){return i/originalDomainLen});this._linearScale=scaleMap.linear().range(this._config.range).domain(newDomain);for(var i=0,len=originalDomainLen;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,domainRangeFn=this._colorStrategy.domainRange(),scaleType=this._colorStrategy.scale,scaleInfo=domainRangeFn(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.scaleDomain||this.domain()),this.setRangeWithInterpolatedColors(scaleType,scaleInfo)}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),config:this.config()}}},{key:"transformColor",value:function transformColor(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=Math.min(defaultValue(color[3],0),1),newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=Math.min(a+transformationArr[3]||0,1);return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:51,range:[51,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]&&1!==domain.length?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().stops);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.scaleDomain||this.domain())}return this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.range(),config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,this.config().generator))),this}},{key:"serialize",value:function serialize(){return{type:this.constructor.type(),scale:this.scale(),domain:this.domain(),range:this.config().range,config:this.config()}}},{key:"id",value:function id(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",WIDTH="width",HEIGHT="height",constants_MEASUREMENT="measurement",constants_CONFIG="config",MIN_UNIT_WIDTH="minUnitWidth",MIN_UNIT_HEIGHT="minUnitHeight",DIMENSIONS="dimensions",MEASURES="measures",DIMENSION="dimension",MEASURE="measure",PIVOT="pivot",FORMAT="format",constants_MOUNT="mount",HAS_DATA_UPDATED="hasDataUpdated",ROWS="rows",COLUMNS="columns",constants_DATA="data",COL="col",ROW="row",COLUMN="column",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",DETAIL="detail",LAYERS="layers",TRANSFORM="transform",enums_constants_ORDINAL="ordinal",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",enums_constants_TOP="top",enums_constants_BOTTOM="bottom",RETINAL="retinal",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",INITIALIZED="initialized",EXIT_CELLS="exitCell",AXIS="axis",UNIT="unit",UPDATED="updated",BEFORE_UPDATE="beforeupdate",VALUE_MATRIX="valueMatrix",FACET_HEADERS="facet-headers",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",ARC="arc",constants_CATEGORICAL="categorical",constants_TEMPORAL="temporal",BAR="bar",LINE="line",POINT="point",PRIMARY="Primary",SECONDARY="Secondary",BOTH="both",INTERACTION="interaction",GRID_LINES="gridLines",GRID_BANDS="gridBands",HEADER="header",FACET="facet",DEFAULT="default",constants_ASCENDING="asc",DESCENDING="desc",DARK="dark",NONE="none",NORMAL="normal",DARKER="darker";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(row[valueFieldIndex]instanceof src_InvalidAwareTypes&&(row[valueFieldIndex]=null),obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));var source=pointObj.source;return pointObj.dataObj=fieldsArr.reduce(function(acc,name){return acc[name]=source[fieldsConfig[name].index],acc},{}),pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),helpers_getNormalizedData=function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr=transformType===IDENTITY?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)},domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return sort===ASCENDING?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||transformType===STACK?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||transformType===STACK?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),defFn=function defFn(d){var _d$update=d.update;return{x:_d$update.x,y:_d$update.y}},helpers_attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref,accessor=arguments.length>2&&void 0!==arguments[2]?arguments[2]:defFn;voronoi.data((_ref=[]).concat.apply(_ref,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var _accessor=accessor(d);return{x:_accessor.x,y:_accessor.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},helpers_animateGroup=function animateGroup(mount,context){var groupTransition,update,transition=context.transition,groupAnimateStyle=context.groupAnimateStyle,duration=transition.duration,effect=transition.effect,disabled=transition.disabled;groupAnimateStyle&&(renderer_utils_setStyles(mount.node(),groupAnimateStyle.enter),update=groupAnimateStyle.update,groupTransition=disabled?mount:mount.transition().ease(easeFns[effect]).duration(duration).on("end",function(){helpers_updateStyle(renderer_utils_selectElement(this),update,!0)}),helpers_updateStyle(groupTransition,update))},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},getGroupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=getGroupSpan(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_renderLayer=function renderLayer(context){var mount=context.mount();mount&&(context.render(mount),context.dependencies().throwback.commit(common_props.ON_LAYER_DRAW,!0,context.metaInf().parentNamespace))},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){return function transformResolverPredicates(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig(),xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return[!xField,!yField,!groupByField,getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE,xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION,dimensionField&&encodingFieldInf[dimensionField]===groupByField]}(context.encodingFieldsInf(),context,context.config().transform.groupBy).some(function(value){return value})?IDENTITY:null},getValidTransform=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType=common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]===AGG_FN_SUM?STACK:GROUP}return transformType},helpers_getMarkId=function getMarkId(source,schema){return source.filter(function(val,i){return schema[i]&&schema[i].type===dist_datamodel.FieldType.DIMENSION}).join()},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(initialStyle){var conf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{originalStyle:Object.assign({},{styles:initialStyle},conf),currentState:new Map}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i0&&(interactionType=function getLastItemInMap(map){return Array.from(map)[map.size-1]}(currentState)[0],stylesForCurrentLevel=currentState.get(interactionType)||{}),stylesForCurrentLevel},strokeProps={"stroke-width":1,stroke:1,"stroke-opacity":1},parseStyle=function parseStyle(value,_ref,apply){var datum=_ref.datum,datumStyle=_ref.datumStyle;if("function"==typeof value){if(isNaN(datumStyle))value=value(datumStyle.replace(/[^\d,.]/g,"").split(",").map(function(s){return Number(s)}),datum,apply);else value=value(parseFloat(datumStyle,10),datum,apply);return value}return value},helper_applyStylesOnInteraction=function applyStylesOnInteraction(context,elem,interactionType,conf,options){var datum,mountPoint=options.mountPoint,apply=options.apply,reset=options.reset,d=elem.data()[0],_datum$meta=(datum=Array.isArray(d)?d[0]:Array.isArray(d.data)?d.data[0]:d).meta,currentState=_datum$meta.currentState,originalStyle=_datum$meta.originalStyle,applicableStyles={},styles=conf.style,strokePosition=conf.strokePosition,applicableStrokePos=strokePosition;reset&¤tState.clear();var applyStyle=!0;if(apply){var sanitizedStyles={styles:{},strokePosition:strokePosition};for(var type in styles){var parsedStyleVal=parseStyle(styles[type],{datum:datum,datumStyle:elem.style(type)},apply);sanitizedStyles.styles[type]=parsedStyleVal}currentState.set(interactionType,sanitizedStyles),applicableStyles=sanitizedStyles.styles}else if(currentState.has(interactionType)||reset){currentState.delete(interactionType);var currentStyle=getPreviousStyle(datum.meta,interactionType);applicableStyles=Object.assign({},originalStyle.styles,currentStyle.styles),applicableStrokePos=currentStyle.strokePosition||originalStyle.strokePosition}else applyStyle=!1;var styleKeys=Object.keys(applicableStyles),_partition2=helper_slicedToArray(partition(styleKeys,function(v){return v in strokeProps}),2),strokeStyles=_partition2[0],otherStyles=_partition2[1];applyStyle&&context.applyStyles({strokeStyles:strokeStyles,otherStyles:otherStyles,styleObj:applicableStyles,elem:elem,datum:datum,applicableStrokePos:applicableStrokePos,mountPoint:mountPoint})};function base_mixin_typeof(obj){"@babel/helpers - typeof";return(base_mixin_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _construct(Parent,args,Class){return(_construct=function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&base_mixin_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function base_mixin_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function base_mixin_slicedToArray(arr,i){return function base_mixin_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function base_mixin_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function base_mixin_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function base_mixin_toConsumableArray(arr){return function base_mixin_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref2=[]).concat.apply(_ref2,base_mixin_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,idx=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI=this.encodingFieldsInf(),yField=_this$encodingFieldsI.yField,xField=_this$encodingFieldsI.xField,yFieldType=_this$encodingFieldsI.yFieldType;if(_this$encodingFieldsI.xFieldType===dist_datamodel.FieldType.MEASURE)measureIndex=fieldsConfig[xField].index,enc="x";else if(yFieldType===dist_datamodel.FieldType.MEASURE){var layerName=this.constructor.formalName();measureIndex=fieldsConfig[yField].index,enc="y",layerName===AREA_LAYER&&(enc=idx%2==0?"y":"y0")}var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc]||0,row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i1&&renderer_getElementsForLine({mount:mount,data:d,strokeStyle:strokeStyle,className:".".concat(className,"-").concat(nullDataLineClass),layer:layer,linepath:linepath,transition:transition,updateFns:updateFns}),null}),elementWithNullData},line_default_config_defaultConfig={classPrefix:CLASSPREFIX,defClassName:"layer-line",className:"",interpolate:"linear",transform:{type:"group"},interaction:{fade:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},focus:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},brushStroke:{style:{stroke:function stroke(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}}},crossline:!0,nearestPointThreshold:20,encoding:{color:{},x:{},y:{},strokeOpacity:{value:1},fillOpacity:{value:0},strokeWidth:{value:"2px"}},transition:{effect:"cubic",duration:1e3},connectNullData:!1,nullDataLineStyle:{},nullDataLineClass:"null"};__webpack_require__(21);function line_mixin_typeof(obj){"@babel/helpers - typeof";return(line_mixin_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function line_mixin_toConsumableArray(arr){return function line_mixin_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return this.getDataFromEvent(config.event)}},{key:"getDataFromEvent",value:function getDataFromEvent(event){var dataPoint=renderer_utils_selectElement(event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf({fill:color}),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_mixin_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),_class}()};function arc_typeof(obj){"@babel/helpers - typeof";return(arc_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function arc_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":TEXT_ANCHOR_MIDDLE}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}},{key:"getNearestPoint",value:function getNearestPoint(x,y,_ref){var event=_ref.event;return this.data()?this.getDataFromEvent(event):null}},{key:"getDataFromEvent",value:function getDataFromEvent(event){return helpers_getDataFromEvent(this,event)}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),_class}()};function text_typeof(obj){"@babel/helpers - typeof";return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update);var pathEl=makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr);renderer_utils_setStyles(pathEl,style)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:CLASSPREFIX,defColorStyle:"stroke",interaction:{highlight:{className:"highlight-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"center"},focusStroke:{className:"focus-stroke-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"outside"},commonDoubleStroke:{style:{stroke:"black","stroke-width":"2px"},strokePosition:"outside"},brushStroke:{className:"brush-stroke-class",style:{stroke:"black","stroke-width":"1px"},strokePosition:"outside"},doubleStroke:{style:{stroke:"black","stroke-width":"2px"},strokePosition:"outside"},fade:{style:{fill:function fill(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}},focus:{style:{fill:function fill(rgbaValues,data,apply){return common_utils_transformColor(rgbaValues,{a:-.5},data,apply).color}}}},innerPadding:.1,nearestPointThreshold:5,transform:{type:"identity"},transition:{effect:"cubic",duration:1e3},encoding:{size:{value:30},color:{},stroke:{value:"#000"},"stroke-width":{value:0},fill:{},shape:{value:"circle"},x:{},y:{},"stroke-opacity":{value:1},"fill-opacity":{value:.5},strokePosition:{value:"center"},interaction:{anchors:"highlight","persistent-anchors":"focusStroke","brush-anchors":"brushStroke"}},shapes:["circle","cross","diamond","square","star","wye","triangle"],sizes:[20,30,40,50,60,70]};__webpack_require__(25);function point_helper_slicedToArray(arr,i){return function point_helper_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function point_helper_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function point_helper_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var helper_prepareDrawingInf=function prepareDrawingInf(_ref){var data=_ref.data,datum=_ref.datum,i=_ref.i,layerInst=_ref.layerInst,xPx=_ref.xPx,yPx=_ref.yPx,axes=layerInst.axes(),shapeAxis=axes.shape,colorAxis=axes.color,sizeAxis=axes.size,shape=shapeAxis.getShape(datum.shape),size=sizeAxis.getSize(datum.size),color=colorAxis.getColor(datum.color),layerEncoding=layerInst.config().encoding,stroke=layerEncoding.stroke.value,strokeWidth=layerEncoding["stroke-width"].value,resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,stroke:stroke,"stroke-width":strokeWidth,size:size,shape:shape,data:datum},data:datum},i,data,layerInst),rowId=datum.rowId,source=datum.source;shape=resolvedEncodings.shape,size=resolvedEncodings.size;var style={fill:color=resolvedEncodings.color,stroke:resolvedEncodings.stroke,"stroke-width":resolvedEncodings["stroke-width"]},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};return{enter:pos,update:pos,shape:shape,source:source,rowId:rowId,style:style,data:datum.dataObj,meta:Object.assign({layerId:layerInst.id()},getColorMetaInf(style,{strokePosition:layerEncoding.strokePosition.value})),size:size}},helper_pointTranslators=function helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},COORD_TYPES.CARTESIAN,function(data,config,layerInst){for(var points=[],encoding=layerInst.config().encoding,axes=layerInst.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,fieldsConfig=layerInst.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],_map2=point_helper_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];if(xPx+=offsetX,yPx+=offsetY,!isNaN(xPx)&&!isNaN(yPx)){var point=helper_prepareDrawingInf({data:data,datum:d,i:i,layerInst:layerInst,xPx:xPx,yPx:yPx});point.className=getIndividualClassName(d,i,data,layerInst),points.push(point),layerInst.cachePoint(d[key],point)}},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{};return helper_pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var seriesClassName,_this2=this,maxSize=0,config=this.config(),keys=this._transformedData.map(function(d){return d.key}),transition=config.transition,className=config.className,defClassName=config.defClassName,classPrefix=config.classPrefix,normalizedData=this._normalizedData,containerSelection=renderer_utils_selectElement(container),qualifiedClassName=getQualifiedClassName(defClassName,this.id(),classPrefix);this._points=[],this._pointMap={},containerSelection.classed(qualifiedClassName.join(" "),!0).classed(className,!0),this._points=this.generateDataPoints(normalizedData,keys),this._graphicElems={};var schema=this.data().getSchema();return makeElement(container,"g",this._points,null,{update:function update(group,points){maxSize=Math.max.apply(Math,[maxSize].concat(point_mixin_toConsumableArray(points.map(function(d){return d.size||0})))),seriesClassName="".concat(qualifiedClassName[0]),_this2.constructor.drawFn()({layer:_this2,container:group.node(),points:points,interpolate:config.interpolate,className:seriesClassName,transition:transition,keyFn:function keyFn(v){return helpers_getMarkId(v.source,schema)}})}},function(data){return data[0].rowId}),this._maxSize=2*Math.sqrt(maxSize/Math.PI),this.attachDataToVoronoi(this._points),this}},{key:"attachDataToVoronoi",value:function attachDataToVoronoi(points){helpers_attachDataToVoronoi(this._voronoi,points)}},{key:"generateDataPoints",value:function generateDataPoints(normalizedData,keys){var _this3=this,_getPlotMeasurement2=point_mixin_slicedToArray(helpers_getPlotMeasurement(this,keys),2),widthMetrics=_getPlotMeasurement2[0],heightMetrics=_getPlotMeasurement2[1],offsetXValues=widthMetrics.offsetValues||[],offsetYValues=heightMetrics.offsetValues||[];return normalizedData.map(function(dataArr,i){var measurementConf=_this3.getMeasurementConfig(offsetXValues[i],offsetYValues[i],widthMetrics.span,heightMetrics.span);return _this3.translatePoints(dataArr,measurementConf)}).filter(function(d){return d.length})}},{key:"getMeasurementConfig",value:function getMeasurementConfig(offsetX,offsetY,widthSpan,heightSpan){return{offset:{x:(offsetX||0)+widthSpan/2,y:(offsetY||0)+heightSpan/2},span:{x:widthSpan,y:heightSpan}}}},{key:"getNearestPoint",value:function getNearestPoint(x,y){var nearestPointThreshold=this.config().nearestPointThreshold,distanceLimit=Math.max(this._maxSize,nearestPointThreshold);if(!this.data())return null;var point=this._voronoi.find(x,y,distanceLimit),dimensions=point&&point.data.data.update,radius=point?Math.sqrt(point.data.data.size/Math.PI):0;if(point&&pointWithinCircle({x:dimensions.x,y:dimensions.y,r:radius+nearestPointThreshold},{x:x,y:y})){var _point$data$data=point.data.data,source=_point$data$data.source,rowId=_point$data$data.rowId;return{id:this.getIdentifiersFromData(source,rowId),dimensions:[{x:dimensions.x,y:dimensions.y,width:radius,height:radius}],layerId:this.id()}}return null}},{key:"addOverlayPath",value:function addOverlayPath(refElement,data,style,strokePosition){var pathElement,container=refElement.parentElement;if(this._overlayPath[data.rowId]?pathElement=this._overlayPath[data.rowId]:((pathElement=makeElement(container,"path",[data.update],null,{},function(d){return"".concat(d.x," ").concat(data.rowId)})).style("fill","none"),pathElement.style("fill-opacity",0),pathElement.attr("id",data.rowId),this._overlayPath[data.rowId]=pathElement),"stroke-width"===style.type){var position=strokePosition,radius=Math.sqrt(data.size/Math.PI);radius=getStrokeWidthByPosition(position,radius);var size=data.size+radius;if("string"==typeof data.shape){var path=common_utils_getSymbol(data.shape).size(size);pathElement.attr("d",path)}}var styleVal=style.value;"function"==typeof styleVal&&(styleVal=styleVal(pathElement.style(style.type)));pathElement.style(style.type,styleVal),appendElement(refElement,pathElement.node())}},{key:"removeOverlayPath",value:function removeOverlayPath(data,style){var currentPath=this._overlayPath[data.rowId];currentPath&&(currentPath.node().removeAttribute("style"),Object.keys(style).forEach(function(s){return currentPath.style(s,style[s])}),currentPath.style("fill-opacity",0))}},{key:"getBoundBoxes",value:function getBoundBoxes(){return helpers_getBoundBoxes(this._points.flat())}},{key:"applyElementStyles",value:function applyElementStyles(elem,styles,styleObj){styles.forEach(function(type){elem.select("path").style(type,styleObj[type])})}}],[{key:"defaultConfig",value:function defaultConfig(){return point_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=point_mixin_get(point_mixin_getPrototypeOf(_class),"defaultPolicy",this).call(this,conf,userConf),encoding=config.encoding,transform=config.transform,colorField=encoding.color&&encoding.color.field;return colorField&&(transform.groupBy=colorField),config}},{key:"drawFn",value:function drawFn(){return point_renderer}}]),_class}()};function point_typeof(obj){"@babel/helpers - typeof";return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],xAxis=axes.x,yAxis=axes.y,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),layer_registry=function(){var layers=arguments.length>0&&void 0!==arguments[0]?arguments[0]:DEFAULT_LAYERS,reg=Object.assign({},layers),regObj={register:function register(def){var key=def.formalName();return reg[key]=def,regObj},get:function get(){return reg}};return regObj},helpers=Object.assign(helpers_namespaceObject,{pointLayerHelpers:point_helper_namespaceObject}),layerMixins={BarLayerMixin:bar_mixin_BarLayerMixin,BaseLayerMixin:base_mixin_BaseLayerMixin,LineLayerMixin:line_mixin_LineLayerMixin,AreaLayerMixin:area_mixin_AreaLayerMixin,PointLayerMixin:point_mixin_PointLayerMixin,TextLayerMixin:text_mixin_TextLayerMixin,TickLayerMixin:tick_mixin_TickLayerMixin,ArcLayerMixin:arc_mixin_ArcLayerMixin};function src_helper_toConsumableArray(arr){return function src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})},helper_X=ENCODING.X,helper_Y=ENCODING.Y,helper_RADIUS=ENCODING.RADIUS,helper_ANGLE=ENCODING.ANGLE,helper_ANGLE0=ENCODING.ANGLE0,RADIUS0=ENCODING.RADIUS0,helper_getLayerAxisIndex=function getLayerAxisIndex(layers,fields){var layerAxisIndex={};return layers.forEach(function(layer){var _layer$config=layer.config(),axis=_layer$config.axis,encoding=_layer$config.encoding,id=layer.id();[helper_X,helper_Y,helper_ANGLE,helper_ANGLE0,helper_RADIUS].forEach(function(type){var index,specificField=getObjProp(encoding,type,"field"),encodingField=type===helper_RADIUS?defaultValue(specificField,getObjProp(encoding,RADIUS0,"field")):getObjProp(encoding,type,"field"),field=defaultValue(getObjProp(axis,type),encodingField);index=fields[type]&&fields[type].length?fields[type].findIndex(function(fieldInst){return-1!==fieldInst.getMembers().indexOf(field)}):0,!layerAxisIndex[id]&&(layerAxisIndex[id]={}),layerAxisIndex[id][type]=index})}),layerAxisIndex},helper_unionDomainFromLayers=function unionDomainFromLayers(layers,axisFields,layerAxisIndex,fieldsConfig){var domains={};return(layers=layers.filter(function(layer){return null!==layer.getDataDomain()})).forEach(function(layer){var domainValues={},config=layer.config(),layerDomain=layer.getDataDomain(),layerId=layer.id();null!==layerDomain&&!1!==config.calculateDomain&&(domainValues=Object.entries(layerDomain),domains=domainValues.reduce(function(fieldDomain,domain){var encodingType=domain[0],axisIndex=layerAxisIndex[layerId][encodingType],field=getObjProp(axisFields,encodingType,axisIndex);!fieldDomain[encodingType]&&(fieldDomain[encodingType]={});var encodingDomain=fieldDomain[encodingType];if(field){var fieldStr="".concat(field);encodingDomain[fieldStr]=encodingDomain[fieldStr]||[],encodingDomain[fieldStr]=function getValidDomain(domain,domain1,encodingType,fieldType){return encodingType===helper_ANGLE||encodingType===helper_ANGLE0?domain.concat(domain1.filter(function(d){return-1===domain.indexOf(d)})):unionDomain([domain,domain1],fieldType)}(encodingDomain[fieldStr],domain[1],encodingType,fieldsConfig[field.getMembers()[0]].def.subtype)}return fieldDomain},domains))}),domains},helper_renderLayers=function renderLayers(context,container,layers,measurement){context._lifeCycleManager.notify({client:layers,action:"beforedraw",formalName:"layer"});var classPrefix=context.config().classPrefix,orderedLayers=layers.sort(function(a,b){return a.config().order-b.config().order}),layerParentGroup=makeElement(container,"g",[1],"".concat(classPrefix,"-layer-group")),layerDepOrder=getDependencyOrder(context._layerDepOrder),groups={};makeElement(layerParentGroup,"g",orderedLayers,null,{update:function update(group,layer){groups[layer.alias()]={group:group,layer:layer}}}),layerDepOrder.map(function(name){return groups[name]}).filter(function(d){return void 0!==d}).forEach(function(o){var layer=o.layer,group=o.group;layer.measurement(measurement),layer.dataProps({timeDiffs:context._timeDiffs}),!1!==layer.config().render&&layer.mount(group.node())})},helper_getNearestDimensionalValue=function getNearestDimensionalValue(context,position){var fields=context.fields();if(!fields.x.length||!fields.y.length)return null;var data=context.data(),axes=context.axes(),fieldsConfig=data.getFieldsConfig(),xField=getObjProp(fields,"x",0).getMembers()[0],yField=getObjProp(fields,"y",0).getMembers()[0],xFieldType=fieldsConfig[xField].def.subtype,yFieldType=fieldsConfig[yField].def.subtype,entryVal=[["x",xFieldType,xField],["y",yFieldType,yField]].find(function(entry){return entry[1]===dist_datamodel.DimensionSubtype.CATEGORICAL||entry[1]===dist_datamodel.DimensionSubtype.TEMPORAL});if(!entryVal||xFieldType!==dist_datamodel.MeasureSubtype.CONTINUOUS&&yFieldType!==dist_datamodel.MeasureSubtype.CONTINUOUS)return null;var field=entryVal[2],index=fieldsConfig[field].index,key=axes[entryVal[0]][0].invert(position[entryVal[0]]);if(entryVal[1]===dist_datamodel.DimensionSubtype.TEMPORAL){var filterData=src_helper_toConsumableArray(new Set(data.getData().data.map(function(d){return d[index]})));key=getNearestValue(filterData,key)}return void 0!==key?[[field],[key]]:null},getLayersBy=function getLayersBy(layers,searchBy,value){return layers.filter(function(layer){return("type"===searchBy?layer.constructor.formalName():layer.alias())===value})},removeLayersBy=function removeLayersBy(layers,searchBy,value){layers.filter(function(inst){return("type"===searchBy?inst.config().mark:inst.alias())!==value||(inst.remove(),!1)})},helper_createSideEffectGroup=function createSideEffectGroup(container,className){return makeElement(container,"g",[1],className).node()},createRenderPromise=function createRenderPromise(unit){unit._renderedPromise.then(function(){unit._renderedPromise=new Promise(function(resolve){unit._renderedResolve=resolve}),createRenderPromise(unit)})},getRadiusRange=function getRadiusRange(width,height){var config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]},helper_setAxisRange=function setAxisRange(context){var radiusAxes=context.axes().radius;radiusAxes&&radiusAxes.forEach(function(axis){axis.range(getRadiusRange(context.width(),context.height()))})},helper_createRTree=function createRTree(context){var _ref,elements=(_ref=[]).concat.apply(_ref,src_helper_toConsumableArray(context.layers().filter(function(layer){return!1!==layer.config().interactive}).map(function(layer){return layer.getBoundBoxes()}))).flat().filter(function(d){return null!==d}),rtree=new RTree;return rtree.load(elements),rtree},reactive_props_CONFIG="config",reactive_props_DATA="data",AXES="axes",LAYERDEFS="layerDef",reactive_props_WIDTH="width",reactive_props_HEIGHT="height",reactive_props_MOUNT="mount",reactive_props_TRANSFORM="transform",TRANSFORMEDDATA="transformedData",DATADOMAIN="dataDomain",FIELDS="fields",LAYERAXISINDEX="layerAxisIndex",reactive_props_LAYERS="layers",reactive_props_DOMAIN="domain",enums_constants_CLASSPREFIX="muze",IDFIELD="__id__",GRID_LINE_PARENT_GROUP_CLASS="grid-lines",GRID_BAND_PARENT_GROUP_CLASS="grid-bands",GRID_PARENT_GROUP="grid-parent-group",enums_constants_BAND="band",TICK="tick",GRID_BAND="gridBands",GRID_LINE="gridLines",CONSOLIDATED="consolidated",FRAGMENTED="fragmented",FACET_BY_FIELDS="facetByFields",RETINAL_FIELDS="retinalFields",PARENT_ALIAS="parentAlias",constants_LAYERS="layers",CACHED_DATA="cachedData",STORE="store",DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},set=this._set,uidMap=this._uidMap,retObj={entrySet:[[],[]],exitSet:[[],[]],mergedEnter:[],mergedExit:[],completeSet:[]},dimVals=this._dimVals,keepDims=config.keepDims,_config$fields=config.fields,fields=void 0===_config$fields?[]:_config$fields,_config$keys=config.keys,keys=void 0!==_config$keys&&_config$keys,measureNames=this._measureNames,_loop=function _loop(key){var measureNamesArr=measureNames[key]||[],val=void 0;val=keepDims?fields.map(function(field){return field===reserved_fields.MEASURE_NAMES?measureNamesArr:field===reserved_fields.ROW_ID?uidMap[key]:dimVals[key][_this._fieldIndices[field]]}):keys?key:measureNamesArr.length?[uidMap[key],measureNamesArr]:[uidMap[key]],set[key]>0?([SELECTION_OLD_ENTRY,SELECTION_NEW_ENTRY].forEach(function(v,i){set[key]===v&&retObj.entrySet[i].push(val)}),set[key]!==SELECTION_OLD_ENTRY&&set[key]!==SELECTION_NEW_ENTRY||retObj.mergedEnter.push(val)):set[key]<0&&([SELECTION_OLD_EXIT,SELECTION_NEW_EXIT].forEach(function(v,i){set[key]===v&&retObj.exitSet[i].push(val)}),set[key]!==SELECTION_OLD_EXIT&&set[key]!==SELECTION_NEW_EXIT||retObj.mergedExit.push(val)),retObj.completeSet.push(val)};for(var key in set)_loop(key);return retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){i in set&&(set[i]=SELECTION_NULL)});else for(var key in set)set[key]=SELECTION_NULL;return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}}]),SelectionSet}();function muze_firebolt_src_helper_toConsumableArray(arr){return function muze_firebolt_src_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffect=this.sideEffects()[name],setTransform=options.setTransform;selectionSet=setTransform?setTransform(selectionSet,payload,sideEffect):selectionSet,sideEffect.apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"shouldApplyHighlightEffect",value:function shouldApplyHighlightEffect(){return!0}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],behaviourEffectMap=this._behaviourEffectMap,sideEffects=getSideEffects(behaviour,behaviourEffectMap);if(this._propagationInf=propagationInfo,this._payloads[behaviour]=payload,action){action.dispatch(payload),this._entryExitSet[behaviour]=action.entryExitSet();var shouldApplySideEffects=this.shouldApplySideEffects(propagationInfo);if(this.shouldApplyHighlightEffect(behaviour)&&(propagate&&this.propagate(behaviour,payload,action.propagationIdentifiers(),{sideEffects:sideEffects}),shouldApplySideEffects)){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,this.getEntryExitSet(behaviour),payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._behaviourPolicies[behaviour]||(this._behaviourPolicies[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sideEffectPolicies[sideEffect]||(this._sideEffectPolicies[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sideEffectPolicies[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._behaviourPolicies[behaviour][key],this}},{key:"propagate",value:function propagate(){return this}},{key:"sideEffects",value:function sideEffects(){return arguments.length?(this._sideEffects=arguments.length<=0?void 0:arguments[0],this):this._sideEffects}},{key:"enableSideEffects",value:function enableSideEffects(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){var handler=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.onDataModelPropagation();return dataModel.unsubscribe("propagation"),dataModel.on("propagation",handler),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),this}},{key:"selectionSet",value:function selectionSet(){return arguments.length?(this._selectionSet=arguments.length<=0?void 0:arguments[0],this):this._selectionSet}},{key:"initializeSideEffects",value:function initializeSideEffects(){var sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),target=SideEffect.target();if(target===context.target()||"all"===target){var sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"target",value:function target(){return"all"}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this.registerPhysicalActionHandlers(),this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{model:propagationInf.data?propagationInf.data:null,uids:criteria?function getKeysFromCriteria(criteria,firebolt){if(criteria){var data=firebolt.data(),dimensionsMap=firebolt._metaData.dimensionsMap,values=[];if(isSimpleObject(criteria))getDataModelFromRange(data,criteria).getData({withUid:!0}).data.forEach(function(row){var id=row[row.length-1],measures=criteria[reserved_fields.MEASURE_NAMES]||dimensionsMap[id]||[];measures.length?measures.forEach(function(measureArr){values.push("".concat([id].concat(firebolt_toConsumableArray(measureArr))))}):values.push([id])});else{var dimsMapGetter=firebolt._dimsMapGetter;values=firebolt_getUidsFromCriteria(criteria,{dm:firebolt.data(),dimensionsMap:dimensionsMap,dimsMapGetter:dimsMapGetter})}return values}return null}(criteria,this):null}}},{key:"getSelectionSet",value:function getSelectionSet(action){return this.selectionSet()[action]}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}},{key:"data",value:function data(){return this.context.data()}},{key:"currentData",value:function currentData(){return this.data()}},{key:"triggerPhysicalAction",value:function triggerPhysicalAction(event,payload){var handlers=this._handlers[event]||[],genericHandlers=this._handlers["*"];return[].concat(firebolt_toConsumableArray(Object.values(handlers)),firebolt_toConsumableArray(Object.values(genericHandlers))).forEach(function(fn){fn(event,payload)}),this}},{key:"onPhysicalAction",value:function onPhysicalAction(event,fn,namespace){return!this._handlers[event]&&(this._handlers[event]={}),this._handlers[event][namespace]=fn,this}},{key:"registerPhysicalActionHandlers",value:function registerPhysicalActionHandlers(){var _this4=this;this.onPhysicalAction("*",function(event,payload){_this4._actionBehaviourMap[event].behaviours.forEach(function(beh){return _this4.dispatchBehaviour(beh,payload)})})}},{key:"id",value:function id(){return this.context.id()}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(){var _this$context;return(_this$context=this.context).getRangeFromIdentifiers.apply(_this$context,arguments)}},{key:"sanitizePayload",value:function sanitizePayload(payload){return payload}},{key:"payloadGenerators",value:function payloadGenerators(){return arguments.length&&Object.assign(this._payloadGenerators,arguments.length<=0?void 0:arguments[0]),this._payloadGenerators}},{key:"getPayloadGeneratorFor",value:function getPayloadGeneratorFor(action){var defaultFn=this._payloadGenerators.__default,fn=this._payloadGenerators[action];return defaultValue(fn,defaultFn)}},{key:"getPayload",value:function getPayload(action){return this._payloads[action]}},{key:"actions",value:function actions(){return this._actions}}]),Firebolt}();function entry_exit_set_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.fields.map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria)},this}return this._entryExitSet}},{key:"getSetInfo",value:function getSetInfo(type,set,filteredDataModel){var sourceId=this.firebolt.getPropagationInf().sourceId,data=this.firebolt.data();return new entry_exit_set_EntryExitSet({uids:set,filteredModel:function filteredModel(fullData){var model=null;if("complete"===type)return fullData;if("mergedEnter"===type&&sourceId)model=filteredDataModel;else{var uidMap=set.reduce(function(acc,v){return acc[v[0]]=1,acc},{});model=fullData.select(function(fields){return fields[reserved_fields.ROW_ID]in uidMap},{saveChild:!1})}return model},data:data})}},{key:"propagationIdentifiers",value:function propagationIdentifiers(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(params.length){var propData=null,selectionSet=params[0],payload=params[1],fieldsConfig=this.firebolt.data().getFieldsConfig(),criteria=payload.criteria,propagationFields=this._propagationFields;if(selectionSet.resetted()||null===criteria)propData=null;else if(isSimpleObject(criteria)){var fields=Object.keys(criteria),otherFields=generic_slicedToArray(partition(fields,function(d){return fieldsConfig[d]?fieldsConfig[d].def.subtype===dist_datamodel.DimensionSubtype.CATEGORICAL:d===reserved_fields.MEASURE_NAMES}),2)[1],allFields=fields.filter(function(d){return d===reserved_fields.ROW_ID||fieldsConfig[d]&&fieldsConfig[d].def.subtype===dist_datamodel.DimensionSubtype.CATEGORICAL}),mergedEnter=selectionSet.getSets({keepDims:!0,fields:allFields}).mergedEnter;propData={fields:fields.map(function(d){return fieldsConfig[d]?fieldsConfig[d].def:{name:d}}),range:this.firebolt.getRangeFromIdentifiers({criteria:criteria,entrySet:selectionSet.getSets().mergedEnter,fields:otherFields}),identifiers:[[].concat(generic_toConsumableArray(allFields),[reserved_fields.MEASURE_NAMES])].concat(generic_toConsumableArray(mergedEnter))}}else{var _fields=propagationFields?[].concat(generic_toConsumableArray(propagationFields),[reserved_fields.MEASURE_NAMES]):criteria[0],_mergedEnter=selectionSet.getSets({keepDims:!0,fields:_fields}).mergedEnter;propData={fields:_fields.map(function(d){return fieldsConfig[d]?fieldsConfig[d].def:{name:d}}),identifiers:[_fields].concat(generic_toConsumableArray(_mergedEnter))}}return this._propagationIdentifiers=propData,this}return this._propagationIdentifiers}},{key:"enable",value:function enable(){this._enabled=!0}},{key:"disable",value:function disable(){this._enabled=!1}},{key:"isEnabled",value:function isEnabled(){return this._enabled}},{key:"propagateWith",value:function propagateWith(){return this._propagationFields=arguments.length<=0?void 0:arguments[0],this}}],[{key:"mutates",value:function mutates(){return!1}}]),GenericBehaviour}();function volatile_typeof(obj){"@babel/helpers - typeof";return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iendPos.x&&(newStartPos.x=endPos.x,newEndPos.x=startPos.x),startPos.y>endPos.y){var y=startPos.y;newStartPos.y=endPos.y,newEndPos.y=y}var payload=drag_action_config(firebolt,{startPos:newStartPos,endPos:newEndPos});payload.dragging=!0,payload.dragDiff=Math.abs(startPos.x-endPos.x)+Math.abs(startPos.y-endPos.y),firebolt.triggerPhysicalAction(action,payload)}}).on("end",function(){var event=renderer_utils_getEvent();endPos={x:event.x,y:event.y};var duration=(new Date).getTime()-touchStart;if(!(touch&&duration>100&&Math.abs(startPos.x-endPos.x)<=5)){if(endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height)),startPos.x>endPos.x){var x=startPos.x;startPos.x=endPos.x,endPos.x=x}if(startPos.y>endPos.y){var y=startPos.y;startPos.y=endPos.y,endPos.y=y}var payload=drag_action_config(firebolt,{startPos:startPos,endPos:endPos});payload.dragEnd=!0,payload.hideSelBox=!0,firebolt.triggerPhysicalAction(action,payload)}}))},physical_hover=function hover(firebolt){return function(targetEl){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:!0,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,getAllPoints:!1,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};firebolt.triggerPhysicalAction(HOVER,payload),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){firebolt.triggerPhysicalAction(HOVER,{criteria:null})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},selection_box_drag_selectionBoxDrag=function selectionBoxDrag(firebolt){return function(targetEl){var subject,drawingInf,context=firebolt.context,onDrag=function onDrag(payload){firebolt.triggerPhysicalAction(actions_namespaceObject.SELECTIONDRAG,payload)},d3Drag=renderer_utils_getD3Drag();targetEl.call(d3Drag().on("start",function(){var event=renderer_utils_getEvent();drawingInf=context.getDrawingContext(),subject=event.subject}).on("drag",function(){var event=renderer_utils_getEvent();subject.x+=event.dx,subject.y+=event.dy;var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(firebolt,{startPos:{x:x,y:y},endPos:{x:x2,y:y2}});onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(firebolt,{startPos:{x:x,y:y},endPos:{x:x2,y:y2}});payload.dragEnd=!0,onDrag(payload)}}))}},physical_click=function click(firebolt){return function(targetEl){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);firebolt.triggerPhysicalAction(CLICK,payload),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl){drag_event_attachDragEvent(targetEl,DRAG,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?firebolt.triggerPhysicalAction(LONGTOUCH,{criteria:null}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);firebolt.triggerPhysicalAction(LONGTOUCH,payload),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),physical_defineProperty(_physicalActions,SELECTIONDRAG,selection_box_drag_selectionBoxDrag),_physicalActions),side_effects_ANCHORS="anchors",side_effects_TOOLTIP="tooltip",side_effects_BRUSH_ANCHORS="brush-anchors",side_effects_PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",side_effects_HIGHLIGHTER="highlighter",CROSSLINE="crossline",FRAGMENTED_TOOLTIP="fragmented-tooltip",AXIS_LABEL_HIGHLIGHTER="axis-label-highlighter",generic_props_PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},layers=arguments.length>2?arguments[2]:void 0,interactionType=config.interactionType,apply=config.apply,_config$reset=config.reset,reset=void 0!==_config$reset&&_config$reset;return(layers||this.firebolt.context.layers()).forEach(function(layer){if(!1!==layer.config().interactive){var layerFields=layer.data().getFieldsConfig(),filteredUids=set.uids.filter(function(_ref){var _ref2$=surrogate_slicedToArray(_ref,2)[1];return(void 0===_ref2$?[]:_ref2$).every(function(m){return m in layerFields})}).map(function(d){return d[0]}),options={apply:apply,reset:reset,styles:null};layer.applyInteractionStyle(interactionType,filteredUids,options)}}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){"@babel/helpers - typeof";return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model,classPrefix=config.classPrefix;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function){makeElement(mount,"div",[1],"".concat(classPrefix,"-tooltip-html-container")).html(data())}else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"",{update:function update(elem,elemData){return elem.attr("class",elemData.className)}}),_cells=makeElement(_rows,"span",function(d){return d.data},"".concat(classPrefix,"-tooltip-content"));_cells.attr("class","".concat(classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block"}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=src_default_config_defaultConfig.content;return config.classPrefix=src_default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!0),this}},{key:"context",value:function context(){return arguments.length?(this._context=arguments.length<=0?void 0:arguments[0],this):this._context}},{key:"content",value:function content(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className="".concat(classPrefix,"-").concat(contentClass,"-").concat(name),specificClass="".concat(classPrefix,"-").concat(contentConfig.className),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className," ").concat(specificClass)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target;if(target){var node=this._tooltipContainer.node(),tooltipPos=this._orientation;if("left"===tooltipPos||"right"===tooltipPos?y+node.offsetHeighttarget.y+target.height:x+node.offsetWidthtarget.x+target.width){var path;this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===tooltipPos?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===tooltipPos?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===tooltipPos&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else this._tooltipConnectorContainer.style("display","none")}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,contentContainer=this._contentContainer.node();this._tooltipContainer.style("top","0px").style("left","0px").style("width","2000px").style("height","2000px");var offsetWidth=contentContainer.offsetWidth+4,offsetHeight=contentContainer.offsetHeight+4,config=this._config,offset=this._offset,spacing=config.spacing,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,bottomSpace=extent.height-(dim.y+dim.height+offset.y),arrowSize=spacing,tooltipHeight=offsetHeight+arrowSize,tooltipWidth=offsetWidth+arrowSize,spaces=[{position:"top",value:topSpace-tooltipHeight},{position:"right",value:rightSpace-tooltipWidth},{position:"left",value:leftSpace-tooltipWidth},{position:"bottom",value:bottomSpace-tooltipHeight}],positionHorizontal=function positionHorizontal(positionVal){var position,x=dim.x+dim.width,y=dim.y;return"right"===positionVal?(position="left",x+=arrowSize):"left"===positionVal&&(x=dim.x-offsetWidth,position="right",x-=arrowSize),dim.height0?positionHorizontal(hMax.position):positionVertical(vMax.position);return this._position={x:obj.x,y:obj.y},this._tooltipContainer.style("height","".concat(offsetHeight,"px")).style("width","".concat(offsetWidth,"px")),this._orientation=obj.position,draw&&this.position(obj.x,obj.y),this}},{key:"hide",value:function hide(){return this._tooltipContainer.style("display","none"),this._tooltipConnectorContainer.style("display","none"),this}},{key:"show",value:function show(){return this._tooltipContainer.style("display","block"),this}},{key:"extent",value:function extent(_extent){return this._extent=_extent,this}},{key:"offset",value:function offset(_offset){return this._offset=_offset,this}},{key:"remove",value:function remove(){return this._tooltipContainer.remove(),this._tooltipConnectorContainer.remove(),this}}],[{key:"defaultConfig",value:function defaultConfig(){return src_default_config_defaultConfig}}]),Tooltip}(),HIGHLIGHT_SUMMARY="highlightSummary";function strategies_construct(Parent,args,Class){return(strategies_construct=function strategies_isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var instance=new(Function.bind.apply(Parent,a));return Class&&strategies_setPrototypeOf(instance,Class.prototype),instance}).apply(null,arguments)}function strategies_setPrototypeOf(o,p){return(strategies_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o})(o,p)}function strategies_toConsumableArray(arr){return function strategies_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1;hasMultipleMeasures&&content.push({data:[icon,formattedRetinalValue]});var isSelected=(target&&target[1][target[0].indexOf(retField)])===retinalFieldValue;measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,formatterFn=_fieldInf$measure.fn,currentMeasureValue=valueArr[measureIndex],value=formatterFn(currentMeasureValue),keyValue=strategies_getKeyValue({field:hasMultipleMeasures?"".concat(dName).concat(separator):formattedRetinalValue,value:value,classPrefix:classPrefix,margin:hasMultipleMeasures?margin:void 0,isSelected:isSelected,stackedSum:stackedSum,stackedValue:currentMeasureValue instanceof strategies_InvalidAwareTypes?currentMeasureValue.value():currentMeasureValue.toFixed(2),isStackedBar:isStackedBar});hasMultipleMeasures||(keyValue.data=[icon].concat(strategies_toConsumableArray(keyValue.data))),content.push(keyValue)})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$retinalField=context.retinalFields,color=_context$retinalField.color,shape=_context$retinalField.shape,size=_context$retinalField.size,detailFields=context.detailFields||[],_ref2$showStackSum=(context.config||{}).showStackSum,showStackSum=void 0===_ref2$showStackSum||_ref2$showStackSum,_context$payload$sele=context.payload.selectedMeasures,selectedMeasures=void 0===_context$payload$sele?[]:_context$payload$sele,dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(strategies_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),isStacked=function isStackedChart(layers){return layers.some(function(d){return"stack"===d.transformType()})}(context.layers),isStackedBar=function isStackedBarChart(layers){return layers.some(function(d){return"stack"===d.transformType()&&d.config().mark===BAR})}(context.layers),filteredMeasures=isSingleValue(dataLen,isStacked)?measures:measures.filter(function(d){return-1===allMeasures.indexOf(d.name)});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataModel=selectionSet&&selectionSet.mergedEnter.model;if(!helper_shouldApplySideEffect(dataModel,this))return this;if(null===payload.criteria||dataModel&&dataModel.isEmpty()||null===selectionSet)return this.hide(options,null),this;var strategy=defaultValue(options.strategy,this._strategy);return this.createTooltip(dataModel,Object.assign({},{payload:payload,selectionSet:selectionSet,strategy:strategy,options:options}),null,0),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips,orientation=this.config().orientation;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var tooltip=tooltips[key],strategy=options.strategy||this._strategy;tooltip.content(strategy,null),Object.keys(tooltip._contents).length?tooltip.positionRelativeTo(tooltip._target,{orientation:orientation}):tooltip.hide()}}},{key:"getPlotPointsFromIdentifiers",value:function getPlotPointsFromIdentifiers(payload){var target=payload.target;return tooltip_get(tooltip_getPrototypeOf(Tooltip.prototype),"plotPointsFromIdentifiers",this).call(this,target||payload.criteria,{getBBox:!0})}},{key:"createTooltip",value:function createTooltip(dataModel){var props=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},plotDim=arguments.length>2?arguments[2]:void 0,key=arguments.length>3?arguments[3]:void 0,drawingInf=this.drawingContext(),sourceInf=this.sourceInfo(),config=this.config(),strategy=props.strategy,payload=props.payload,selectionSet=props.selectionSet;plotDim=(plotDim=defaultValue(plotDim,this.getPlotPointsFromIdentifiers(payload)))&&plotDim[0];var pad=config.padding,showInPosition=payload.showInPosition,tooltipPos=payload.position,_config$strategy=config[strategy],projectFields=_config$strategy.fields,dataTransform=_config$strategy.dataTransform,strategyFn=this._strategies[strategy],dt=dataTransform(dataModel,projectFields,this),layoutContainer=drawingInf.parentContainer,parentContainerDimensions=drawingInf.parentContainerDimensions,layoutBoundBox=layoutContainer.getBoundingClientRect(),unitBoundBox=drawingInf.htmlContainer.getBoundingClientRect(),offsetLeft=unitBoundBox.left-layoutBoundBox.left,offsetTop=unitBoundBox.top-layoutBoundBox.top,tooltipInst=this._tooltips[key]=this._tooltips[key]||new tooltip_Tooltip(layoutContainer,drawingInf.svgContainer);Object.assign(sourceInf,{payload:payload,firebolt:this.firebolt,detailFields:[],timeDiffs:sourceInf.timeDiffs,valueParser:this.valueParser(),selectionSet:selectionSet,config:config[strategy]}),tooltipInst.context(sourceInf),tooltipInst.content(strategy,dt,{formatter:strategyFn,order:config[strategy].order,className:config[strategy].className}).config(this.config()).extent({x:0,y:0,width:parentContainerDimensions.width,height:parentContainerDimensions.height}).offset({x:offsetLeft+(config.offset.x||0),y:offsetTop+(config.offset.y||0)}),showInPosition?tooltipInst.position(tooltipPos.x+pad,tooltipPos.y+pad):plotDim?tooltipInst.positionRelativeTo({x:plotDim.x,y:plotDim.y,width:plotDim.width||0,height:plotDim.height||0},{orientation:config.orientation}):tooltipInst.hide()}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{order:1,dataTransform:function dataTransform(dm,fields){return fields?dm.project(fields,{saveChild:!1}):dm}},selectionSummary:{order:0,dataTransform:function dataTransform(dm){return dm}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}},{key:"target",value:function target(){return"all"}}]),Tooltip}();function fragmented_tooltip_typeof(obj){"@babel/helpers - typeof";return(fragmented_tooltip_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function fragmented_tooltip_toConsumableArray(arr){return function fragmented_tooltip_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);idrawingInf.height:totalWidth>drawingInf.width)break;position&&boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(strategy,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return boxes.length&&function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})}),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"formalName",value:function formalName(){return FRAGMENTED_TOOLTIP}}]),FragmentedTooltip}();__webpack_require__(30);function crossline_typeof(obj){"@babel/helpers - typeof";return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]&&arguments[2]?common_utils_intersect:difference)(set.uids,selectedPointsId,[function(d){return d[0]},function(d){return d[0]}]);return function helper_objectSpread(target){for(var i=1;i0&&void 0!==arguments[0]?arguments[0]:[];return excludeSet instanceof Function?excludeSet(this.firebolt.getEntryExitSet):excludeSet.reduce(function(acc,behaviour){var selectedPointsIds=((_this2.firebolt.getEntryExitSet(behaviour)||{}).mergedEnter||{}).uids;return selectedPointsIds&&acc.push.apply(acc,plot_highlighter_toConsumableArray(selectedPointsIds)),acc},[])}},{key:"apply",value:function apply(selectionSet,payload){var options=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},currentStrategy=this._strategies[options.strategy||this._strategy],excludeSetIds=this.getExcludeSetIds(options.excludeSet);return currentStrategy({selectionSet:selectionSet,formattedSet:function plot_highlighter_objectSpread(target){for(var i=1;i3&&void 0!==arguments[3]?arguments[3]:{},propagationDataDims=[],criteria=null,propPayload=propConfig.payload,sourceIdentifiers=propConfig.sourceIdentifiers,excludeSelectedMeasures=propConfig.excludeSelectedMeasures,data=propagationDataModel.getData({withUid:!0}).data,payload=Object.assign({},propPayload),fieldsConfig=Object.assign({},propagationDataModel.getFieldsConfig(),function payload_generator_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},reserved_fields.ROW_ID,{index:Object.keys(propagationDataModel.getFieldsConfig()).length}));return!(propagationDataDims=Object.keys(propagationDataModel.getFieldspace().getDimension())).length&&(propagationDataDims=[reserved_fields.ROW_ID]),sourceIdentifiers&&function(){for(var identifierMap=function getIdentifierMeasureMap(identifiers,fields,facetsMap){var identifierIdxMap=getIndexMap(identifiers[0]);return identifiers.slice(1,identifiers.length).reduce(function(acc,row){var facetPresent=!0;for(var field in facetsMap){var facetVal=row[identifierIdxMap[field]];facetPresent=facetPresent&&facetVal===facetsMap[field]}if(facetPresent){var key=fields.map(function(field){var fieldIndex=identifierIdxMap[field];return row[fieldIndex]}),measureNamesIdx=identifierIdxMap[reserved_fields.MEASURE_NAMES];if(void 0!==measureNamesIdx){var measureArr=row[measureNamesIdx];!acc[key]&&(acc[key]=[]),measureArr&&measureArr.length&&acc[key].push([measureArr])}}return acc},{})}(sourceIdentifiers.identifiers,propagationDataDims,facetByFields),dataArr=[],_loop=function _loop(i,len){var row=data[i],dims=[];propagationDataDims.forEach(function(field){var idx=fieldsConfig[field].index;dims.push(row[idx])});var uid=row[row.length-1],dimKey="".concat(dims);if(dimKey in identifierMap){var measures=identifierMap[dimKey],allMeasures=instance._metaData.dimensionsMap[uid];if(excludeSelectedMeasures)difference(allMeasures,measures).forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))});else measures&&measures.length?measures.forEach(function(measureArr){dataArr.push([].concat(dims,[measureArr]))}):dataArr.push([].concat(dims,[[]]))}else dataArr.push([].concat(dims,[[]]))},i=0,len=data.length;i2&&void 0!==arguments[2]?arguments[2]:{},obj=function getUniqueKeys(data,_ref2){var layers=_ref2.layers,uids=_ref2.uids,_ref2$keys=_ref2.keys,keys=void 0===_ref2$keys?{}:_ref2$keys,_ref2$dimensionsMap=_ref2.dimensionsMap,dimensionsMap=void 0===_ref2$dimensionsMap?{}:_ref2$dimensionsMap,dimensions=_ref2.dimensions;return data.forEach(function(row,i){var key=[uids[i]],dims=dimensions.map(function(d){return row[d.index]});layers.forEach(function(layer){var measureNames=Object.keys(layer.data().getFieldspace().getMeasure()),mKey="".concat([key].concat(firebolt_helper_toConsumableArray(measureNames)));keys[mKey]=defaultValue(keys[mKey],{}),keys[mKey]={dims:dims,measureNames:measureNames,uid:uids[i]},dimensionsMap[key]=defaultValue(dimensionsMap[key],[]),measureNames.length&&dimensionsMap[key].push(measureNames)})}),{keys:keys,dimensionsMap:dimensionsMap}}(data,{layers:layers,uids:uids,keys:maps.keys,dimensions:dimensions,dimensionsMap:maps.dimensionsMap});return{keys:obj.keys,dimensionsMap:obj.dimensionsMap}},createMapByDimensions=function createMapByDimensions(context,dm){var cacheMap=context._cacheMap={};return function(propDims,fieldsConfig){return(cacheMap=context._cacheMap)[propDims]||(cacheMap[propDims]=dm.getData({withUid:!0}).data.reduce(function(acc,row){var key=propDims.map(function(d){return row[fieldsConfig[d].index]});return acc[key]||(acc[key]=[]),acc[key].push(row),acc},{})),cacheMap[propDims]}};function src_firebolt_typeof(obj){"@babel/helpers - typeof";return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(transposeArray(Object.values(identifiers)))));for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}},BORDER_WIDTH={default:2,facet:1},cell_border_applier_handleBlankCell=function handleBlankCell(data){data.config().externalClassname.push("".concat(NONE,"-").concat(constants_LEFT)),data.config().externalClassname.push("".concat(NONE,"-").concat(constants_RIGHT))},cell_border_applier_sanitiseHeaderMatrix=function sanitiseHeaderMatrix(matrices,header){if(header)for(var i=0;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},getCellKey=function getCellKey(rowId,columnId){return"cell-".concat(rowId,"-").concat(columnId)},group_utils_extractUnitConfig=function extractUnitConfig(config){var unitConfig={};return[INTERACTION,GRID_LINES,GRID_BANDS].forEach(function(attr){void 0!==config[attr]&&(unitConfig[attr]=config[attr])}),unitConfig},hasOneField=function hasOneField(fields){return Object.keys(fields).some(function(d){return fields[d].length>0})},getHeaderText=function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i0?fields[0].map(function(cell,i){return new TextCell({type:HEADER,className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(getHeaderText(fieldHeaders,i,fields[0].length)).config({show:cell.config().show})}):[];return sanitizeCheck&&cell_border_applier_sanitiseHeaderMatrix(headers,!0),headers},group_utils_sanitizeCheck=function sanitizeCheck(){var isBorderPresent=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).isBorderPresent;return!isBorderPresent||["color","showRowBorders","showColBorders","showValueBorders"].every(function(d){return!isBorderPresent[d]})},group_utils_findInGroup=function findInGroup(variable,allFields){var channel=null;return[enums_constants_COLOR,enums_constants_SIZE,enums_constants_SHAPE].forEach(function(e){group_utils_this.store.get(e)&&variable===group_utils_this.store.get(e)[0]&&(channel=e)}),channel?{channel:channel}:([ROW,COL].forEach(function(facetType){allFields["".concat(facetType,"Facets")].forEach(function(e){e.toString()===variable&&(channel={channel:FACET,type:facetType===COL?COLUMN:ROW})})}),channel||([ROW,COL].forEach(function(projType){allFields["".concat(projType,"Projections")].forEach(function(e){e.forEach(function(m){m.toString()===variable&&(channel=projType===COL?X:Y)})})}),channel?{channel:channel}:null))},group_utils_getAxisType=function getAxisType(fieldsConfig,field){var fieldType=enums_constants_ORDINAL;return field&&fieldsConfig[field].def.type!==DIMENSION&&(fieldType=enums_constants_LINEAR),fieldType},retriveDomainFromData=function retriveDomainFromData(datamodel,fieldName){return datamodel.getFieldspace().fields.find(function(d){return d.name()===fieldName.toString()}).domain()},mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}},group_utils_getEncoder=function getEncoder(layers){var encoder=new cartesian_encoder_CartesianEncoder;return layers.length&&(encoder=layers.some(function(layerConf){return function hasPolarEncodings(layerConf){return layerConf.mark===ARC||[enums_constants_RADIUS,enums_constants_ANGLE].some(function(field){return getObjProp(layerConf.encoding,field)})}(layerConf)})?new polar_encoder_PolarEncoder:encoder),encoder},group_utils_getHeaderAxisFrom=function getHeaderAxisFrom(type,fields,userAxisFromConfig){var axisFrom=userAxisFromConfig[type],headerFrom="",options=type===ROW?[constants_LEFT,constants_RIGHT]:[enums_constants_BOTTOM,enums_constants_TOP],_fields=group_utils_slicedToArray(fields,2),firstField=_fields[0],secondField=_fields[1],firstFieldType=function firstFieldType(i){return firstField.length?firstField[i].type():null},secondFieldType=function secondFieldType(i){return secondField.length?secondField[i].type():null};return firstFieldType(firstField.length-1)===DIMENSION&&secondFieldType(0)===DIMENSION?(headerFrom=axisFrom?options[1-options.indexOf(axisFrom)]:options[1],axisFrom=type===COLUMN&&firstField[firstField.length-1].toString()===secondField[0].toString()?enums_constants_TOP:axisFrom||options[0]):secondFieldType(secondField.length-1)===DIMENSION?(headerFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM,axisFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM):(headerFrom=type===ROW?constants_LEFT:enums_constants_TOP,axisFrom=type===ROW?constants_LEFT:enums_constants_TOP),firstFieldType(firstField.length-1)===MEASURE&&secondFieldType(0)===MEASURE?axisFrom=type===ROW?constants_LEFT:enums_constants_TOP:secondFieldType(0)===MEASURE?axisFrom=type===ROW?constants_RIGHT:enums_constants_BOTTOM:firstFieldType(firstField.length-1)===MEASURE&&(axisFrom=type===ROW?constants_LEFT:enums_constants_TOP),[headerFrom,axisFrom]},setFacetsAndProjections=function setFacetsAndProjections(context,fieldInfo,encoder){var fields=fieldInfo.fields,type=fieldInfo.type,_encoder$simpleEncode=encoder.simpleEncoder.getFacetsAndProjections(fields,type),facets=_encoder$simpleEncode.facets,projections=_encoder$simpleEncode.projections;return context.facets(group_utils_defineProperty({},"".concat(type,"Facets"),facets)),context.projections(group_utils_defineProperty({},"".concat(type,"Projections"),projections)),{facets:facets,projections:projections,fields:fields}},getBorders=function getBorders(matrices,encoder){var showRowBorders={top:!1,bottom:!1,left:!1,right:!1},showColBorders={top:!1,bottom:!1,left:!1,right:!1},showValueBorders={top:!1,bottom:!1,left:!1,right:!1},rows=matrices.rows,columns=matrices.columns,valueMatrix=matrices.values,_rows=group_utils_slicedToArray(rows,2),leftRows=_rows[0],rightRows=_rows[1],_columns=group_utils_slicedToArray(columns,2),topColumns=_columns[0],bottomColumns=_columns[1],_encoder$fieldInfo=encoder.fieldInfo(),rowDimensions=_encoder$fieldInfo.rowDimensions,columnDimensions=_encoder$fieldInfo.columnDimensions,rowTemporalFields=_encoder$fieldInfo.rowTemporalFields,columnTemporalFields=_encoder$fieldInfo.columnTemporalFields,columnMeasures=_encoder$fieldInfo.columnMeasures,rowMeasures=_encoder$fieldInfo.rowMeasures,allDimensionLength=rowDimensions.length+columnDimensions.length,allMeasuresLength=rowMeasures.length+columnMeasures.length,allTemporalFieldsLength=rowTemporalFields.length+columnTemporalFields.length;if(encoder.constructor.type()===group_utils_POLAR){if(!allDimensionLength)return{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}}else if(!allMeasuresLength&&!allTemporalFieldsLength&&allDimensionLength<=2)return{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders};return showRowBorders=function getRowBorders(left,right){var borders={top:!1,bottom:!1,left:!1,right:!1};return(left.length>1||right.length>1)&&(borders.top=!0,borders.bottom=!0,borders.left=!0,borders.right=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={top:!1,bottom:!1,left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.top=!0,borders.bottom=!0,borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=[enums_constants_TOP,enums_constants_BOTTOM];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},getFieldsFromSuppliedLayers=function getFieldsFromSuppliedLayers(suppliedLayerConfig){var _ref3,encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}}),fields=(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return"object"===group_utils_typeof(d)?d.field:d})})));return group_utils_toConsumableArray(new Set(fields.filter(function(d){return d})))},group_utils_extractFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],facetNames=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet);facetNames.push(name);var facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([facetNames].concat(group_utils_toConsumableArray(keys)),schema).getData({sort:sortInfo}).data},group_utils_removeExitCells=function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)},encoder_props_PROPS={layers:{},data:{},globalConfig:{}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(COLUMN,fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}},{key:"getProjectionFields",value:function getProjectionFields(layers){return getFieldsFromSuppliedLayers(layers)}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){return hasOneField(fields)}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis};function matrix_model_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function matrix_model_objectSpread(target){for(var i=1;i1)){var _config$facetsUserCon=config.facetsUserConfig,facetsUserConfig=void 0===_config$facetsUserCon?{}:_config$facetsUserCon,border=config.border,_facetsUserConfig$isB=facetsUserConfig.isBorderPresent,isBorderPresent=void 0===_facetsUserConfig$isB?{}:_facetsUserConfig$isB,_facetsUserConfig$isG=facetsUserConfig.isGridLinePresent,isGridLinePresent=void 0===_facetsUserConfig$isG?{}:_facetsUserConfig$isG,gridLinesShowLength=Object.keys(isGridLinePresent).length,borderWidth=border.width,borderColor=border.color,borderStyle=border.style,showValueBorders=border.showValueBorders,showRowBorders=border.showRowBorders,showColBorders=border.showColBorders,gridLines={},borderConf={};0!==Object.keys(isBorderPresent).length&&isBorderPresent.width?Object.assign(borderConf,borderWidth?{width:borderWidth}:null,borderColor?{color:borderColor}:null,showValueBorders?{showValueBorders:showValueBorders}:null,showRowBorders?{showRowBorders:showRowBorders}:null,showColBorders?{showColBorders:showColBorders}:null,borderStyle?{style:borderStyle}:null):borderConf={width:BORDER_WIDTH[FACET]},gridLinesShowLength<=0&&(gridLines={x:{show:!1}}),conf={border:borderConf,gridLines:gridLines}}return conf}(facetInfo,projectionInfo,globalConfig);globalConfig=mergeRecursive(globalConfig,defaultConfig);var generalContext={matrix:matrix,geomCellCreator:geomCellCreator,projectionInfo:projectionInfo,splitModelsHashMap:splitModelsHashMap,colKeys:colKeys};if(rowKeys.length)rowKeys.forEach(function(rowKeyObj){var rowIndex=function createRowDataModels(rowContext,fieldInfo,sourceDM){var currentColumnIndex=0,rowIndexForCurrentKey=0,colKeys=rowContext.colKeys,rowKeyObj=rowContext.rowKeyObj,currentRowIndex=rowContext.currentRowIndex,newRowIndex=currentRowIndex,colContext=matrix_model_objectSpread({},rowContext,{rowKeyArr:rowKeyObj.keyArr,rowKey:rowKeyObj.joinedKey,newRowIndex:newRowIndex});if(rowIndexForCurrentKey=currentRowIndex,colKeys.length)colKeys.forEach(function(colKeyObj){colContext.colKeyObj=colKeyObj,colContext.currentColumnIndex=currentColumnIndex;var _createColumnDataMode=matrix_model_createColumnDataModels(colContext,fieldInfo,sourceDM),columnIndex=_createColumnDataMode.columnIndex,rowIndex=_createColumnDataMode.rowIndex;currentColumnIndex=columnIndex,rowIndexForCurrentKey=rowIndex});else{colContext.colKeyObj={keyArr:[],joinedKey:""},colContext.currentColumnIndex=currentColumnIndex;var _createColumnDataMode2=matrix_model_createColumnDataModels(colContext,fieldInfo,sourceDM),columnIndex=_createColumnDataMode2.columnIndex,rowIndex=_createColumnDataMode2.rowIndex;currentColumnIndex=columnIndex,rowIndexForCurrentKey=rowIndex}return{rowIndex:++rowIndexForCurrentKey}}(matrix_model_objectSpread({},generalContext,{rowKeyObj:rowKeyObj,currentRowIndex:currentRowIndex}),fieldInfo,dataModel).rowIndex;currentRowIndex=rowIndex});else if(colKeys.length){var currentColumnIndex=0,newRowIndex=currentRowIndex;colKeys.forEach(function(colKeyObj){var colContext=matrix_model_objectSpread({},generalContext,{rowKeyArr:[],rowKey:"",colKeyObj:colKeyObj,newRowIndex:newRowIndex,currentColumnIndex:currentColumnIndex}),_createColumnDataMode3=matrix_model_createColumnDataModels(colContext,fieldInfo,dataModel),columnIndex=_createColumnDataMode3.columnIndex,rowIndex=_createColumnDataMode3.rowIndex;currentRowIndex=rowIndex,currentColumnIndex=columnIndex})}else{var _currentColumnIndex=0,colContext=matrix_model_objectSpread({},generalContext,{rowKeyArr:[],rowKey:"",colKeyObj:{keyArr:[],joinedKey:""},newRowIndex:currentRowIndex,currentColumnIndex:_currentColumnIndex}),_createColumnDataMode4=matrix_model_createColumnDataModels(colContext,fieldInfo,dataModel),columnIndex=_createColumnDataMode4.columnIndex,rowIndex=_createColumnDataMode4.rowIndex;currentRowIndex=rowIndex,_currentColumnIndex=columnIndex}var formattedColKeys=formatKeys(colKeys.map(function(e){return e.keyArr}),colFacets.map(function(facetField){return facetField.rawFormat()}));return{matrix:matrix,rowKeys:formatKeys(rowKeys.map(function(e){return e.keyArr}),rowFacets.map(function(facetField){return facetField.rawFormat()})),columnKeys:formattedColKeys.length>0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;resolvedData instanceof datamodel_default.a&&resolvedData.dispose();var fields=getFieldsFromSuppliedLayers(suppliedLayers).filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),allFields=group_utils_extractFields(facetsAndProjections,fields);if(groupedModel=dataModel.project(allFields),resolver.data(groupedModel),!groupBy.disabled){var newFieldsConfig=groupedModel.getFieldsConfig(),dimensions=allFields.filter(function(field){return getObjProp(newFieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return fieldConfig[field].def.subtype===constants_TEMPORAL?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel),resolver.transformedData(groupedModel),groupedModel},cell_creator_computeMatrices=function computeMatrices(resolverConfig){var datamodel=resolverConfig.datamodel,encoders=resolverConfig.encoders,resolver=resolverConfig.resolver,globalConfig=resolverConfig.globalConfig,selection=resolverConfig.selection,transform=resolverConfig.transform,componentRegistry=resolverConfig.componentRegistry,groupBy=resolverConfig.groupBy,labelManager=resolverConfig.labelManager,fieldMap=resolverConfig.fieldMap,layerConfig=resolverConfig.layerConfig,registry=resolverConfig.registry,normalizedRows=resolverConfig.normalizedRows,normalizedColumns=resolverConfig.normalizedColumns,otherEncodings=resolverConfig.otherEncodings,facetsAndProjections=resolverConfig.facetsAndProjections,simpleEncoder=resolverConfig.simpleEncoder,config=resolverConfig.config,rowFacets=facetsAndProjections.rowFacets,colFacets=facetsAndProjections.colFacets,isFacet=rowFacets.length>0||colFacets.length>0;isFacet&&(globalConfig.isFacet=!0);var matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.cells.GeomCell),AxisCell:resolver.getCellDef(registry.cells.AxisCell),BlankCell:resolver.getCellDef(registry.cells.BlankCell),TextCell:resolver.getCellDef(registry.cells.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver);simpleEncoder.data(groupedModel);var cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=matrix_model_getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);group_utils_removeExitCells(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=mutateAxesFromMap(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;if(resolver.rowMatrix(rows),resolver.columnMatrix(columns),isFacet){var sanitizeCheckBorder=group_utils_sanitizeCheck(globalConfig.facetsUserConfig),arr=sanitizeCheckBorder&&function sanitiseBorderMatrix(matrices,blankCell){var leftMatrix=matrices.leftMatrix,rightMatrix=matrices.rightMatrix,topMatrix=matrices.topMatrix,bottomMatrix=matrices.bottomMatrix,bottomBorderObj={};return rightMatrix.length&&(bottomBorderObj=cell_border_applier_sanitiseFacetValues(rightMatrix,"".concat(constants_RIGHT),blankCell)),leftMatrix.length&&(bottomBorderObj=cell_border_applier_sanitiseFacetValues(leftMatrix,"".concat(constants_LEFT),blankCell)),topMatrix.length&&cell_border_applier_sanitiseHeaderMatrix(topMatrix),bottomMatrix.length&&cell_border_applier_sanitiseHeaderMatrix(bottomMatrix),bottomBorderObj}({leftMatrix:rows[0],rightMatrix:rows[1],topMatrix:columns[0],bottomMatrix:columns[1]},registry.cells.BlankCell);valueMatrixInfo.matrix=sanitizeCheckBorder&&function sanitiseGeomMatrix(matrices){for(var arr=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=0;i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:INITIALIZED,formalName:FACET_HEADERS}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"updateVisualUnit",value:function updateVisualUnit(retinalConfig){var retinalAxes=this.getRetinalAxes(),lifeCycleManager=this.dependencies().lifeCycleManager;lifeCycleManager.notify({client:this.axes(),action:INITIALIZED,formalName:AXIS}),lifeCycleManager.notify({client:this.units(),action:BEFORE_UPDATE,formalName:UNIT});var units=[],matrixLayers=this.matrixLayers(),props=["".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"),"".concat(namespace_namespaceObject.UNIT_GLOBAL_NAMESPACE,".domain")],store=this.store();return store.lockCommits(props),store.lockModel(),this.forEach(VALUE_MATRIX,function(i,j,el){el.axes(Object.assign(el.axes(),retinalAxes)),el.source()&&el.source().retinalFields(retinalConfig),el.layerDef(matrixLayers[i][j]),el.updateModel(),units.push(el.source())}),store.unlockModel().unlockCommits([props[0]]).unlockCommits([props[1]]),lifeCycleManager.notify({client:units,action:UPDATED,formalName:UNIT}),this}},{key:"getMatrices",value:function getMatrices(resolverConfig){return this._placeholderInfo=cell_creator_computeMatrices(resolverConfig),this._placeholderInfo}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}],[{key:"getterSetters",value:function getterSetters(){return RESOLVER_PROPS}}]),MatrixResolver}();function src_data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_data_type_scale_map_dataTypeScaleMap=(src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap={},dist_datamodel.FieldType.DIMENSION,scale_type_namespaceObject.BAND),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.CATEGORICAL,scale_type_namespaceObject.BAND),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.TEMPORAL,scale_type_namespaceObject.TIME),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.FieldType.MEASURE,scale_type_namespaceObject.LINEAR),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.MeasureSubtype.CONTINUOUS,scale_type_namespaceObject.LINEAR),src_data_type_scale_map_defineProperty(data_type_scale_map_dataTypeScaleMap,dist_datamodel.DimensionSubtype.BINNED,scale_type_namespaceObject.BAND),data_type_scale_map_dataTypeScaleMap);function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratio1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis},getIndex=function getIndex(arr,val){for(var i=0,arrIndex=-1;-1===arrIndex&&i1?axesCreators.position=BOTH:axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.dataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=getAdjustedDomain(max,min);else if(typeOfAxis===scale_type_namespaceObject.BAND){key=axisType?"".concat(idx,"00"):"0".concat(idx,"0");var currentFieldName=fieldsObj[axisType][key].oneVar(),sortingOrder=getSortingConfig(context,currentFieldName,axes[0].config);sortingOrder&&domains[axisType][key]instanceof Array&&domains[axisType][key].sort(function(a,b){return sortCategoricalField(sortingOrder,a,b)})}axes.forEach(function(axis,index){key=axisType?"".concat(idx,"0").concat(index):"0".concat(idx).concat(index),(domain=adjustedDomain[index]||domains[axisType][key])&&axis.domain(domain);var type=axisType?"y":"x";store.commit("".concat(namespace_namespaceObject.GROUP_GLOBAL_NAMESPACE,".domain.").concat(type),domain,"".concat(idx).concat(index))})})}),store.unlockModel()}},{key:"getFacetsAndProjections",value:function getFacetsAndProjections(fields,type){for(var facets=[],projections=[],counter=0,primaryFacets=[],secondaryFacets=[],primaryFields=fields[0],secondaryFields=fields[1],primaryLen=primaryFields.length,secondaryLen=secondaryFields.length,axisFrom=this.axisFrom(),i=0;icounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field),fieldInstance=groupedModel.getFieldspace().fieldsObj()[field];fieldInstance.schema().subtype===constants_TEMPORAL&&(domain=fieldInstance.data()),domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),colFieldType=colField.subtype(),mark=encoder_helper_getDefaultMark(colFieldType,rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=getLayerConfFromFields(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){var colProjections=fields.colProjections,rowProjections=fields.rowProjections,colFields=cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"hasMandatoryFields",this).call(this,{colProjections:colProjections}),rowFields=cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"hasMandatoryFields",this).call(this,{rowProjections:rowProjections});return colFields&&rowFields}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){"@babel/helpers - typeof";return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}},{key:"hasMandatoryFields",value:function hasMandatoryFields(fields){var optionalProjections=fields.optionalProjections;return polar_encoder_get(polar_encoder_getPrototypeOf(PolarEncoder.prototype),"hasMandatoryFields",this).call(this,{optionalProjections:optionalProjections})}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){"@babel/helpers - typeof";return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){"@babel/helpers - typeof";return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}();__webpack_require__(35);function legend_marker_typeof(obj){"@babel/helpers - typeof";return(legend_marker_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_marker_defineProperties(target,props){for(var i=0;i0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{onset:function onset(context,value){return context.firebolt().attachPropagationListener(value)}},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}};var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+iconSpaces[i].width+2*effPadding):(labelSpaces[i].width=iconSpaces[i].width,itemSpaces[i].width=iconSpaces[i].width,labelSpaces[i].width=iconSpaces[i].width),totalWidth+=itemSpaces[i].width;else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelWidth+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,maxWidth=_this$measurement2.maxWidth,width=legend_helper_calculateTitleWidth(this.measurement(),this._labelManager.getOriSize(this._title.text).width,this.config()),_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var orientation=config.item.text.orientation,textAlign="left",alignment=measurement.alignment,maxWidth=measurement.maxWidth,width=measurement.width,height=measurement.height,border=measurement.border,padding=measurement.padding;"top"!==orientation&&"bottom"!==orientation&&alignment!==HORIZONTAL||(textAlign="center");var titleWidth=Math.min(maxWidth,width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(height,"px")).style("border-bottom","".concat(border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(maxWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(padding,"px")).text(title.text).style("text-align",textAlign).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor,alignment:POSITION_ALIGNMENT_MAP[this.config().position]},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),border=_this$measurement3.border,marginHorizontal=_this$measurement3.marginHorizontal,maxHeight=_this$measurement3.maxHeight,height=_this$measurement3.height,width=_this$measurement3.width,maxWidth=_this$measurement3.maxWidth,margin=this.measurement().margin,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom"),margin=marginHorizontal;break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top"),margin=marginHorizontal;break;default:marginPosition="margin-".concat("left")}legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left");var widthBox=legend_helper_calculateTitleWidth(this.measurement(),this._labelManager.getOriSize(this._title.text).width,this.config()),titleWidth=Math.min(maxWidth,widthBox);return width4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),icon).attr("transform","translate(".concat(transalate," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color).attr("stroke",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){"@babel/helpers - typeof";return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](ele)),gradient_legend_defineProperty(_ref,"value",+value.toFixed(1)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data,context._id),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border));var markerWithBuffer=LEGEND_MARKER_PROPS_size+LEGEND_MARKER_PROPS_BUFFER;align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," ").concat(markerWithBuffer,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),renderer_utils_applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(".concat(markerWithBuffer," ").concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-(gradientDimensions.width+markerWithBuffer)-2*padding),renderer_utils_applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),renderer_utils_applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height+markerWithBuffer,"px"),width:"".concat(gradientDimensions.width+markerWithBuffer,"px")}),renderer_utils_applyStyle(legendRect,{fill:"url(#linear-gradient-".concat(context._id,")")}),legendGradSvg.attr("height",gradientDimensions.height+markerWithBuffer),legendGradSvg.attr("width",gradientDimensions.width+markerWithBuffer),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.mapSideEffects(gradient_legend_defineProperty({},"highlight",["marker"])),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}},{key:"getRangeFromIdentifiers",value:function getRangeFromIdentifiers(_ref2){var fields=_ref2.fields,criteria=_ref2.criteria;return fields.reduce(function(range,v){return range[v]=criteria[v],range},{})}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){"@babel/helpers - typeof";return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainLeg.push(domain[1]),domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,range,value=null;if(i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}},sideEffects:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container"),baseFontLimit:16,upperFontLimit:24,baseSizeLimit:100,upperSizeLimit:300,fractionImage:.8,fractionChild:.7};function local_options_typeof(obj){"@babel/helpers - typeof";return(local_options_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function local_options_slicedToArray(arr,i){return function local_options_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function local_options_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function local_options_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var canvas_local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref){var _ref2=local_options_slicedToArray(_ref,2),arg1=_ref2[0],arg2=_ref2[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref3){var _ref4=local_options_slicedToArray(_ref3,2),title=_ref4[0],titleConfig=_ref4[1],t=title;"string"!=typeof title&&title||(t=function t(){return title});var defConfig=mergeRecursive({},TITLE_CONFIG);return[t,mergeRecursive(defConfig,titleConfig)]}}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref5){var _ref6=local_options_slicedToArray(_ref5,2),arg1=_ref6[0],arg2=_ref6[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref7){var _ref8=local_options_slicedToArray(_ref7,2),subtitle=_ref8[0],subtitleConfig=_ref8[1],sub=subtitle;"string"!=typeof subtitle&&subtitle||(sub=function sub(){return subtitle});var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return[sub,mergeRecursive(defConfig,subtitleConfig)]}}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"primaryMatrix",value:function primaryMatrix(){return arguments.length?this:this._primaryMatrix}},{key:"secondaryMatrix",value:function secondaryMatrix(){return arguments.length?this:this._secondaryMatrix}},{key:"tree",value:function tree(){return arguments.length?this:this._tree}},{key:"createTree",value:function createTree(){var _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){"@babel/helpers - typeof";return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){"@babel/helpers - typeof";return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},computations_bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(computations_bufferCondition).every(function(e){return computations_bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){"@babel/helpers - typeof";return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,specificBorderApplier=function specificBorderApplier(params){var borderTypes=params.borderTypes,showBorders=params.showBorders,cells=params.cells,borderInfo=params.borderInfo,name=params.name,isFacet=params.isFacet,color=borderInfo.color,style=borderInfo.style,width=borderInfo.width;borderTypes.forEach(function(borderType){!function applySpecificBorder(params){var type=params.type,borderWidth=params.borderWidth,borderStyle=params.borderStyle,cells=params.cells,color=params.color;cells.style("border-".concat(type),"".concat(borderWidth,"px ").concat(borderStyle," ").concat(color))}({cells:cells,color:showBorders[borderType]?color:"transparent",type:borderType,borderWidth:width,borderStyle:style,name:name,isFacet:isFacet})})},border_helper_applyBorders=function applyBorders(params){var cells=params.cells,border=params.border,row=params.row,column=params.column,isFacet=params.isFacet,showHeaders=params.showHeaders,name="".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column]),borderApplierFn=function borderApplier(cells,borderInfo,name,isFacet){var _ref2,showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return border_helper_defineProperty(_ref2={},"row",function(){return specificBorderApplier({borderTypes:["top","bottom"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"column",function(){return specificBorderApplier({borderTypes:["left","right"],showBorders:showColBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"center",function(){return specificBorderApplier({borderTypes:["left","right","top","bottom"],showBorders:showValueBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"left",function(){return specificBorderApplier({borderTypes:["left"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"right",function(){return specificBorderApplier({borderTypes:["right"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"".concat("center").concat("left"),function _(){return specificBorderApplier({borderTypes:["left","top","bottom"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),border_helper_defineProperty(_ref2,"".concat("center").concat("right"),function _(){return specificBorderApplier({borderTypes:["right","top","bottom"],showBorders:showRowBorders,cells:cells,borderInfo:borderInfo,name:name,isFacet:isFacet})}),_ref2}(cells,border,name,isFacet),borderMapVal=function borderMap(isFacet,showHeaders){var _ref;return border_helper_defineProperty(_ref={},"".concat("top","-").concat("left"),isFacet&&showHeaders?"left":null),border_helper_defineProperty(_ref,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_ref,"".concat("top","-").concat("right"),isFacet&&showHeaders?"right":null),border_helper_defineProperty(_ref,"".concat("center","-").concat("left"),isFacet?"".concat("center").concat("left"):"row"),border_helper_defineProperty(_ref,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_ref,"".concat("center","-").concat("right"),isFacet?"".concat("center").concat("right"):"row"),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_ref,"".concat("bottom","-").concat("right"),null),_ref}(isFacet,showHeaders)[name];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"formalName",value:function formalName(){return"SimpleCell"}},{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"padding",(enums_defaults_defineProperty(_CONSTANTS$PADDING={},visual_cell_src_enums_constants_LEFT,8),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_RIGHT,8),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_TOP,10),enums_defaults_defineProperty(_CONSTANTS$PADDING,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$PADDING)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"headerPadding",(enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD={},visual_cell_src_enums_constants_LEFT,8),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_RIGHT,5),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_TOP,2),enums_defaults_defineProperty(_CONSTANTS$HEADER_PAD,visual_cell_src_enums_constants_BOTTOM,5),_CONSTANTS$HEADER_PAD)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"titlePadding",(enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$TITLE_PADD,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$TITLE_PADD)),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){"@babel/helpers - typeof";return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidthcurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")}).each(function(d){d.legend.mount(this)})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}},{key:"setComponentInfo",value:function setComponentInfo(params){var rootNode=params.rootNode;this.components.forEach(function(legendInfo){legendInfo.legend.setParentInfo({canvasRoot:rootNode})})}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(37),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();__webpack_require__(38);function matrix_component_typeof(obj){"@babel/helpers - typeof";return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)MESSAGE_CONFIG.baseSizeLimit?MESSAGE_CONFIG.fractionChild*height:0,message=config.message;renderer_utils_applyStyle(node,{width:"".concat(width,"px"),height:"".concat(height,"px")});var childNode=makeElement(node,"div",[1],"".concat(className,"-child")),imageNode=makeElement(childNode,"div",[1],"".concat(className,"-child-img")),messageNode=makeElement(childNode,"div",[1],"".concat(className,"-child-message"));renderer_utils_applyStyle(childNode,{width:width,height:"".concat(childHeight,"px")}),renderer_utils_applyStyle(imageNode,{width:width,height:"".concat(childHeight*MESSAGE_CONFIG.fractionImage,"px")}),imageNode.html('\n\x3c!-- Generator: Sketch 60.1 (88133) - https://sketch.com --\x3e\n\nGroup 23\n Created with Sketch.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ');var textElement=makeElement(messageNode,"text",[1]);renderer_utils_applyStyle(messageNode,{"font-size":"".concat(function formatFontSize(width,height){var baseFontLimit=MESSAGE_CONFIG.baseFontLimit,upperFontLimit=MESSAGE_CONFIG.upperFontLimit,baseSizeLimit=MESSAGE_CONFIG.baseSizeLimit,upperSizeLimit=MESSAGE_CONFIG.upperSizeLimit,fontSize=upperFontLimit,dim=widthbaseSizeLimit&&dim0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function canvas_firebolt_helper_toConsumableArray(arr){return function canvas_firebolt_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1||rowProj.length>1))},helper_dispatchBehaviours=function dispatchBehaviours(firebolt,_ref){var payload=_ref.payload,unit=_ref.unit;_ref.behaviours.forEach(function(action){var actions=firebolt._actions.behavioural;payload.criteria=helper_addFacetDataAndMeasureNames(payload.criteria,unit.facetFieldsMap(),unit.layers().map(function(layer){return Object.keys(layer.data().getFieldspace().getMeasure())})),function addSelectedMeasuresInPayload(firebolt,unit,payload){var groupFields=firebolt.context.composition().visualGroup.resolver().getAllFields();if(isCrosstab(groupFields)){var measureFields,_unit$fields=unit.fields(),x=_unit$fields.x,y=_unit$fields.y;x.length&&y.length&&(x[0].type()===dist_datamodel.FieldType.MEASURE?measureFields=["".concat(x[0])]:y[0].type()===dist_datamodel.FieldType.MEASURE&&(measureFields=["".concat(y[0])]),payload.selectedMeasures=measureFields)}}(firebolt,unit,payload),payload.sourceCanvas=firebolt.sourceCanvas(),firebolt.dispatchBehaviour(action,payload,{propagate:!1,unit:unit});var identifiers=actions[action].propagationIdentifiers();firebolt.propagate(action,payload,identifiers,{sideEffects:getSideEffects(action,firebolt._behaviourEffectMap),sourceUnitId:unit.id(),sourceId:firebolt.id(),propagationDataSource:firebolt.getPropagationSource()})})},helper_attachBehaviours=function attachBehaviours(group){var allFields=group.resolver().getAllFields(),valueMatrix=group.matrixInstance().value,crosstab=isCrosstab(allFields);valueMatrix.each(function(cell){var firebolt=cell.valueOf().firebolt(),behaviours=crosstab?["pseudoSelect"]:[];firebolt._connectedBehaviours[behaviours_namespaceObject.SELECT]=behaviours})};function group_firebolt_typeof(obj){"@babel/helpers - typeof";return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{};!function propagateValues(instance,action){var config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,identifiers=config.identifiers,sourceUnitId=config.sourceUnitId,sourceCanvasId=config.sourceCanvasId,dataModel=config.propagationDataSource,sideEfffects=instance._sideEffectDefinitions,behaviourEffectMap=instance._behaviourEffectMap,propagationBehaviour=instance._propagationBehaviourMap[action]||action;payload.sourceUnit=sourceUnitId,payload.action=action,payload.sourceCanvas=sourceCanvasId;var groupId=sourceCanvasId,sourceBehaviour=instance._actions.behavioural[action],isMutableAction=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:identifiers,isMutableAction:isMutableAction,groupId:groupId,sourceId:config.sourceId,filterFn:function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||!!effects&&effects.some(function(d){return sideEfffects[d.name||d].mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.sourceCanvas()}};if(dataModel.propagate(identifiers,propConfig,!0),action!==propagationBehaviour){var behaviourInstance=instance._actions.behavioural[propagationBehaviour];isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),dataModel.propagate(identifiers,Object.assign({},propConfig,{isMutableAction:isMutableAction,applyOnSource:!1,action:propagationBehaviour,sourceId:isMutableAction?groupId:sourceUnitId,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.sourceCanvas()}}),!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}})}}(this,behaviour,Object.assign({payload:payload,identifiers:identifiers,propagationFields:this._propagationFields,sourceId:this.id(),sourceCanvasId:this.id(),propagationDataSource:this.data()},auxConfig))}},{key:"getPropagationSource",value:function getPropagationSource(){return this.context.composition().visualGroup._originalGroupedData}},{key:"sourceCanvas",value:function sourceCanvas(){return this.context.alias()}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects,payload,propagationInf){var _this4=this;if(payload.sideEffects)return[{effects:payload.sideEffects,behaviours:[payload.action]}];var mode=this.context.config().interaction.tooltip.mode;return propagationInf.propPayload=propagationInf.propPayload||payload,sideEffects.forEach(function(d){var mappedEffects=d.effects;mappedEffects=mappedEffects.filter(function(se){return(se.name!==side_effects_TOOLTIP||"fragmented"!==mode)&&isSideEffectEnabled(_this4,{se:se,propagationInf:propagationInf})}),d.effects=mappedEffects}),sideEffects}},{key:"dispatchBehaviour",value:function dispatchBehaviour(action,payload){var propagationInf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},units=this.context.composition().visualGroup.resolver().units(),_propagationInf$unit=propagationInf.unit,unit=void 0===_propagationInf$unit?units[0][0]:_propagationInf$unit,behaviourEffectMap=this._behaviourEffectMap,sideEffects=getSideEffects(action,behaviourEffectMap),sideEffectInstances=this.sideEffects();sideEffects.forEach(function(_ref3){_ref3.effects.forEach(function(effect){var name=effect.name,inst=sideEffectInstances[name];inst&&(inst.sourceInfo(function(){return unit.getSourceInfo()}),inst.layers(function(){return unit.layers()}),inst.plotPointsFromIdentifiers(function(){return unit.getPlotPointsFromIdentifiers.apply(unit,arguments)}),inst instanceof spawnable_SpawnableSideEffect&&inst.drawingContext(function(){return unit.getDrawingContext()}),inst.valueParser(unit.valueParser()))})}),group_firebolt_get(group_firebolt_getPrototypeOf(GroupFireBolt.prototype),"dispatchBehaviour",this).call(this,action,payload,propagationInf)}}],[{key:"defaultInteractionPolicy",value:function defaultInteractionPolicy(){return function(){}}},{key:"defaultCrossInteractionPolicy",value:function defaultCrossInteractionPolicy(){return _defaultCrossInteractionPolicy}}]),GroupFireBolt}(),APP_INITIAL_STATE={app:{group:{},units:{},layers:{},canvas:{}},local:{canvas:{},group:{},units:{},layers:{}}};function canvas_typeof(obj){"@babel/helpers - typeof";return(canvas_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function canvas_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function canvas_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:COMPONENTS,reg=Object.assign({},components);return{register:function register(cls){var key=cls.formalName();return reg[key]=cls,componentRegistry},get:function get(){return reg}}}(COMPONENTS),cells:cell_registry(),layers:layer_registry(),interactions:registry_registry};__webpack_require__(39);function muze_slicedToArray(arr,i){return function muze_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function muze_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function muze_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var muze_transactor=store_transactor,Smartlabel=SmartlabelManager_default.a,muze_enableChainedTransaction=enableChainedTransaction,muze_LifeCycleManager=lifecycle_manager,DataModel=datamodel_default.a,muze_Store=store_Store,globalCache={},defaultRegistry=default_registry_registry.components,overrideRegistryDefinitions=function overrideRegistryDefinitions(overrideRegistry,registry){overrideRegistry.forEach(function(def){registry.register(def)})},muze_muze=function muze(){var _transactor2=muze_slicedToArray(muze_transactor({},src_options),2),env=_transactor2[0],globalStore=_transactor2[1],components=Object.assign({},default_registry_registry.components.get()),componentSubRegistryDef=Object.assign({},SUBREGISTRIES),componentSubRegistry={};for(var prop in componentSubRegistryDef)componentSubRegistry[prop]=componentSubRegistryDef[prop](default_registry_registry[prop].get());return env.canvas=function(){var settings=globalStore.serialize(),canvas=canvas_Canvas.withSettings(settings,{components:components,componentSubRegistry:componentSubRegistry,interactions:default_registry_registry.interactions},env.globalDependencies());return muze_enableChainedTransaction(globalStore,canvas,Object.keys(settings)),canvas},env.globalDependencies=function(){return globalCache.smartlabel||(globalCache.smartlabel=new Smartlabel(1,"body")),{smartlabel:globalCache.smartlabel,lifeCycleManager:new muze_LifeCycleManager}},env.settings=function(){return globalStore.serialize()},env.registry=function(){for(var _len=arguments.length,overrideRegistry=new Array(_len),_key=0;_key<_len;_key++)overrideRegistry[_key]=arguments[_key];return overrideRegistry.length?(overrideRegistry.forEach(function(def){var prop=def.formalName();prop in defaultRegistry&&(components[prop]=def)}),env):components},env.cellRegistry=function(){for(var cellRegistry=componentSubRegistry.cellRegistry,_len2=arguments.length,overrideRegistry=new Array(_len2),_key2=0;_key2<_len2;_key2++)overrideRegistry[_key2]=arguments[_key2];return overrideRegistry.length?(overrideRegistryDefinitions(overrideRegistry,cellRegistry),env):cellRegistry.get()},env.layerRegistry=function(){for(var layerRegistry=componentSubRegistry.layerRegistry,_len3=arguments.length,overrideRegistry=new Array(_len3),_key3=0;_key3<_len3;_key3++)overrideRegistry[_key3]=arguments[_key3];return overrideRegistry.length?(overrideRegistryDefinitions(overrideRegistry,layerRegistry),env):layerRegistry.get()},env};muze_muze.registry=default_registry_registry,muze_muze.Components={VisualLayer:{layers:{BaseLayer:base_layer_BaseLayer,LineLayer:line_LineLayer,TextLayer:TextLayer,TickLayer:TickLayer,PointLayer:point_PointLayer,SimpleLayer:simple_layer_SimpleLayer,AreaLayer:area_AreaLayer,ArcLayer:ArcLayer},helpers:helpers,enums:src_enums_namespaceObject,layerMixins:layerMixins},VisualUnit:{constructor:visual_unit_VisualUnit,helpers:visual_unit_src_helper_namespaceObject,enums:visual_unit_src_enums_namespaceObject,UnitFireBolt:firebolt_UnitFireBolt},VisualGroup:{constructor:visual_group,Encoders:encoder_namespaceObject,encoderHelpers:encoder_helper_namespaceObject,groupUtils:group_utils_namespaceObject,enums:visual_group_src_enums_constants_namespaceObject},Canvas:{constructor:canvas_Canvas},Firebolt:{constructor:firebolt_Firebolt}};var SideEffects={sideEffects:src_side_effects_namespaceObject,standards:{SurrogateSideEffect:SurrogateSideEffect,SpawnableSideEffect:spawnable_SpawnableSideEffect,GenericSideEffect:generic}},Behaviours={behaviouralActions:behavioural_namespaceObject,standards:{GenericBehaviour:generic_GenericBehaviour,PersistentBehaviour:persistent_PersistentBehaviour,VolatileBehaviour:volatile_VolatileBehaviour}};muze_muze.DataModel=DataModel,muze_muze.version=muze_package.version,muze_muze.SideEffects=SideEffects,muze_muze.ActionModel=actionModel,muze_muze.layerFactory=src_layer_factory,muze_muze.Operators=operators_namespaceObject,muze_muze.Behaviours=Behaviours,muze_muze.utils=muze_utils_src_namespaceObject,muze_muze.Model=(new muze_Store).model.constructor;__webpack_exports__.default=muze_muze}])}); //# sourceMappingURL=muze.js.map \ No newline at end of file diff --git a/release/dist/muze.js.map b/release/dist/muze.js.map index 50a945f9..1adbe4ed 100644 --- a/release/dist/muze.js.map +++ b/release/dist/muze.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/webpack://DataModel/webpack/universalModuleDefinition","webpack://muze/webpack://DataModel/webpack/bootstrap","webpack://muze/webpack://DataModel/src/index.js","webpack://muze/webpack://DataModel/src/enums/data-format.js","webpack://muze/webpack://DataModel/src/enums/dimension-subtype.js","webpack://muze/webpack://DataModel/src/enums/measure-subtype.js","webpack://muze/webpack://DataModel/src/enums/field-type.js","webpack://muze/webpack://DataModel/src/enums/filtering-mode.js","webpack://muze/webpack://DataModel/src/enums/group-by-functions.js","webpack://muze/webpack://DataModel/src/utils/date-time-formatter.js","webpack://muze/webpack://DataModel/src/utils/column-major.js","webpack://muze/webpack://DataModel/src/utils/extend2.js","webpack://muze/webpack://DataModel/src/utils/helper.js","webpack://muze/webpack://DataModel/src/field-store.js","webpack://muze/webpack://DataModel/src/value.js","webpack://muze/webpack://DataModel/src/operator/row-diffset-iterator.js","webpack://muze/webpack://DataModel/src/invalid-aware-types.js","webpack://muze/webpack://DataModel/src/constants/index.js","webpack://muze/webpack://DataModel/src/operator/get-common-schema.js","webpack://muze/webpack://DataModel/src/operator/cross-product.js","webpack://muze/webpack://DataModel/src/operator/merge-sort.js","webpack://muze/webpack://DataModel/src/operator/sort.js","webpack://muze/webpack://DataModel/src/operator/data-builder.js","webpack://muze/webpack://DataModel/src/operator/difference.js","webpack://muze/webpack://DataModel/src/operator/group-by-function.js","webpack://muze/webpack://DataModel/src/utils/reducer-store.js","webpack://muze/webpack://DataModel/src/operator/natural-join-filter-function.js","webpack://muze/webpack://DataModel/src/operator/union.js","webpack://muze/webpack://DataModel/src/operator/outer-join.js","webpack://muze/webpack://DataModel/src/fields/partial-field/index.js","webpack://muze/webpack://DataModel/src/fields/field/index.js","webpack://muze/webpack://DataModel/src/fields/dimension/index.js","webpack://muze/webpack://DataModel/src/fields/measure/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/field-parser/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/categorical-parser/index.js","webpack://muze/webpack://DataModel/src/fields/categorical/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/temporal-parser/index.js","webpack://muze/webpack://DataModel/src/fields/helper.js","webpack://muze/webpack://DataModel/src/fields/temporal/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/binned-parser/index.js","webpack://muze/webpack://DataModel/src/fields/binned/index.js","webpack://muze/webpack://DataModel/src/fields/parsers/continuous-parser/index.js","webpack://muze/webpack://DataModel/src/fields/continuous/index.js","webpack://muze/webpack://DataModel/src/fields/field-registry.js","webpack://muze/webpack://DataModel/src/field-creator.js","webpack://muze/webpack://DataModel/src/default-config.js","webpack://muze/webpack://DataModel/src/converter/model/dataConverter.js","webpack://muze/webpack://DataModel/node_modules/d3-dsv/src/dsv.js","webpack://muze/webpack://DataModel/src/converter/utils/dsv-arr.js","webpack://muze/webpack://DataModel/src/converter/utils/dsv-str.js","webpack://muze/webpack://DataModel/src/converter/defaultConverters/dsvStringConverter.js","webpack://muze/webpack://DataModel/src/converter/utils/flat-json.js","webpack://muze/webpack://DataModel/src/converter/defaultConverters/jsonConverter.js","webpack://muze/webpack://DataModel/src/converter/defaultConverters/dsvArrayConverter.js","webpack://muze/webpack://DataModel/src/converter/defaultConverters/autoConverter.js","webpack://muze/webpack://DataModel/src/converter/utils/auto-resolver.js","webpack://muze/webpack://DataModel/src/converter/dataConverterStore.js","webpack://muze/webpack://DataModel/src/helper.js","webpack://muze/webpack://DataModel/src/relation.js","webpack://muze/webpack://DataModel/src/datamodel.js","webpack://muze/webpack://DataModel/src/operator/group-by.js","webpack://muze/webpack://DataModel/src/operator/bucket-creator.js","webpack://muze/webpack://DataModel/src/stats/index.js","webpack://muze/webpack://DataModel/src/export.js","webpack://muze/webpack://DataModel/src/operator/compose.js","webpack://muze/webpack://DataModel/src/operator/pure-operators.js","webpack://muze/webpack://DataModel/src/operator/natural-join.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/webpack://hyperdis/webpack/universalModuleDefinition","webpack://muze/webpack://hyperdis/webpack/bootstrap","webpack://muze/webpack://hyperdis/src/utils/set.js","webpack://muze/webpack://hyperdis/src/utils/index.js","webpack://muze/webpack://hyperdis/src/graph-node.js","webpack://muze/webpack://hyperdis/src/electric-node.js","webpack://muze/webpack://hyperdis/src/graph.js","webpack://muze/webpack://hyperdis/src/model.js","webpack://muze/webpack://hyperdis/src/index.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/numberArray.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/src/enums/namespace.js","webpack://muze/./packages/muze-utils/src/quick-select.js","webpack://muze/./packages/muze-utils/src/r-tree.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/src/enums/constants.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/join.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/textTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/end.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/store.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/helper.js","webpack://muze/./packages/muze-utils/src/index.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/visual-layer/src/base-layer/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/skip-ticks.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/space-setter.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/helper.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/polar-axis/props.js","webpack://muze/./packages/muze-axis/src/polar-axis/angle-axis.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/polar-axis/radius-axis.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/local-options.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/helper.js","webpack://muze/./packages/visual-layer/src/base-layer/base-mixin.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line-mixin.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area-mixin.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-mixin.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text-mixin.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/helper.js","webpack://muze/./packages/visual-layer/src/layers/point/point-mixin.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-mixin.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick-mixin.js","webpack://muze/./packages/visual-layer/src/layers/tick/helper.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/enums/layer-types.js","webpack://muze/./packages/visual-layer/src/layer-factory/layer-factory.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/visual-layer/src/index.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/selection-set/selection-set.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/enums/side-effects.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/props.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-firebolt/src/enums/tooltip-strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/fragmented-tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/axis-labels-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/muze-firebolt/src/registry.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/firebolt/behaviours/brush.js","webpack://muze/./packages/visual-unit/src/enums/behaviours.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/firebolt/behaviours/pseudo-select.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/visual-group/src/group-helper/cell-border-applier.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/encoder/props.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/resolver-props.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/helper.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-marker/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/layoutComponent.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/dummy-component.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/layout/src/tree-layout/constants/defaults.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/definitionModel.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/helper/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/tree/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/layout-model/index.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/tree-layout/utils/index.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-point.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-parser.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/helper.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/html-data.js","webpack://muze/./packages/layout/src/tree-layout/renderers/renderer.js","webpack://muze/./packages/layout/src/tree-layout/renderers/html-renderer.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/layout-def.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/index.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/row-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/column-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/view-info-getter.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/layout/src/grid-layout/border-helper.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell-helper.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/components/muze-chart-component.js","webpack://muze/./packages/muze/src/canvas/components/headerComponent.js","webpack://muze/./packages/muze/src/canvas/components/legendComponent.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/helper.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/props.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-component.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/horizontal-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/vertical-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/matrix-component.js","webpack://muze/./packages/muze/src/canvas/components/grid-component.js","webpack://muze/./packages/muze/src/enums/constants.js","webpack://muze/./packages/muze/src/canvas/components/message-component.js","webpack://muze/./packages/muze/src/canvas/components/message-icon.js","webpack://muze/./packages/muze/src/canvas/component-wrapper-maker.js","webpack://muze/./packages/muze/src/canvas/scroll-manager.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/firebolt/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt/group-firebolt.js","webpack://muze/./packages/muze/src/canvas/firebolt/index.js","webpack://muze/./packages/muze/src/canvas/app-state.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","_typeof","DataModel","require","DataFormat","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","DimensionSubtype","CATEGORICAL","TEMPORAL","BINNED","MeasureSubtype","CONTINUOUS","FieldType","MEASURE","DIMENSION","FilteringMode","NORMAL","INVERSE","ALL","GROUP_BY_FUNCTIONS","SUM","AVG","MIN","MAX","FIRST","LAST","COUNT","STD","convertToNativeDate","date","Date","pad","DateTimeFormatter","format","this","dtParams","nativeDate","RegExp","escape","text","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","defVal","val","parsedVal","isFinite","parseInt","defaultRangeParser","range","nVal","toLowerCase","length","getTokenDefinitions","daysDef","short","long","monthsDef","H","index","extract","parser","formatter","getHours","toString","hours","P","M","getMinutes","S","getSeconds","K","getMilliseconds","a","join","day","getDay","A","e","getDate","b","month","getMonth","B","y","result","substring","presentDate","presentYear","Math","trunc","getFullYear","year","Y","getTokenFormalNames","definitions","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","defaultResolver","arg","targetParam","arguments","hourFormat24","hourFormat12","ampmLower","ampmUpper","amOrpm","isPM","findTokens","tokenPrefix","tokenLiterals","keys","occurrence","forwardChar","indexOf","push","token","formatAs","nDate","formattedStr","String","formattedVal","parse","dateTimeStamp","options","extractTokenValue","dtParamSeq","noBreak","dtParamArr","args","resolverKey","resolverParams","resolverFn","param","resolvedVal","splice","apply","checkIfOnlyYear","unshift","tokenObj","lastOccurrenceIndex","occObj","occIndex","targetText","regexFormat","tokenArr","map","obj","occurrenceLength","extractValues","match","shift","getNativeDate","Number","len","v","store","fields","Array","forEach","fieldIndex","from","OBJECTSTRING","objectToStrFn","objectToStr","arrayToStr","checkCyclicRef","parentArr","bIndex","extend2","obj1","obj2","skipUndef","merge","tgtArr","srcArr","item","srcVal","tgtVal","str","cRef","isArray","getUniqueId","getTime","round","random","isArrEqual","arr1","arr2","formatNumber","detectDataFormat","data","fieldStore","createNamespace","fieldArr","dataId","fieldsObj","_cachedFieldsObj","field","getMeasure","measureFields","_cachedMeasure","schema","type","getDimension","dimensionFields","_cachedDimension","Value","rawValue","formattedValue","getNumberFormattedVal","defineProperties","_value","configurable","writable","_formattedValue","_internalValue","rowDiffsetIterator","rowDiffset","callback","split","diffStr","diffStsArr","start","end","InvalidAwareTypes","config","assign","_invalidAwareValsMap","invalidAwareVals","NULL","NA","NIL","invalid","nil","null","undefined","ROW_ID","DM_DERIVATIVES","SELECT","PROJECT","GROUPBY","COMPOSE","CAL_VAR","BIN","SORT","JOINS","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","getCommonSchema","fs1","fs2","retArr","fs1Arr","defaultFilterFn","crossProduct","dm1","dm2","filterFn","replaceCommonSchema","jointype","applicableFilterFn","dm1FieldStore","getFieldspace","dm2FieldStore","dm1FieldStoreName","dm2FieldStoreName","commonSchemaList","Error","tmpSchema","_rowDiffset","rowAdded","rowPosition","ii","tuple","userArg","partialField","formattedData","dm1Fields","prepareJoinData","dm2Fields","detachedRoot","tupleObj","cellVal","iii","defSortFn","a1","b1","mergeSort","arr","sortFn","sort","lo","hi","mid","floor","mainArr","auxArr","resolveStrSortOrder","fDetails","strSortOrder","sortOrder","dataType","sortType","retFunc","groupData","hashMap","Map","groupedData","datum","fieldVal","has","set","createSortingFnArg","groupedDatum","targetFields","targetFieldDetails","label","reduce","acc","next","idx","applyStandardSort","sortingDetails","fieldName","sortMeta","fieldInSchema","sortingFn","slice","f","makeGroupMapAndSort","depColumns","targetCol","currRow","fVal","u","iterator","done","W","nMap","dataBuilder","colIdentifier","retObj","uids","addUid","columnWise","reqSorting","tmpDataArr","colName","insertInd","sortData","dataObj","filter","sDetial","groupSortingIdx","findIndex","standardSortingDetails","groupSortingDetails","detail","sortedGroupMap","row","nextMap","pop","tmpData","difference","hashTable","schemaNameArr","dm1FieldStoreFieldObj","dm2FieldStoreFieldObj","_colIdentifier","prepareDataHelper","dm","addData","hashData","schemaName","getFilteredValues","sum","filteredNumber","curr","avg","totalSum","isNaN","fnList","filteredValues","min","max","sqrt","mean","pow","num","defaultReducerName","ReducerStore","defReducer","entries","reducer","__unregister","Function","reducerStore","naturalJoinFilter","commonSchemaArr","retainTuple","internalValue","union","leftOuterJoin","dataModel1","dataModel2","rightOuterJoin","PartialField","_sanitize","Field","subtype","description","displayName","_params","_context","build","Dimension","_cachedDomain","calculateDataDomain","Measure","unit","defAggFn","numberFormat","FieldParser","CategoricalParser","isInvalid","getInvalidType","trim","Categorical","hash","Set","domain","add","TemporalParser","_dtf","calculateContinuousDomain","POSITIVE_INFINITY","NEGATIVE_INFINITY","Temporal","__proto__","getPrototypeOf","_cachedMinDiff","sortedData","arrLn","minDiff","prevDatum","nextDatum","processedCount","dataFormat","parsedDatum","BinnedParser","matched","parseFloat","Binned","binsArr","bins","ContinuousParser","Continuous","FieldTypeRegistry","_fieldType","dimension","fieldRegistry","registerDefaultFields","registerFieldType","createFields","dataColumn","headers","headersObj","header","BUILDER","ct","DataConverter","_type","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","columns","JSON","stringify","inferColumns","rows","columnSet","column","width","_t","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","N","I","eof","eol","j","preformatBody","formatValue","formatRow","formatDate","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","test","convert","concat","formatBody","formatRows","DSVArr","schemaFields","unitSchema","firstRowHeader","columnMajor","headerMap","h","schemaField","headIndex","DSVStr","fieldSeparator","dsv","d3Dsv","DSVStringConverter","FlatJSON","insertionIndex","schemaFieldsName","JSONConverter","DSVArrayConverter","AutoDataConverter","Auto","converters","DataConverterStore","_getDefaultConverters","converter","converterStore","resp","persistDerivations","sourceDm","model","operation","persistCurrentDerivation","criteriaFn","_derivation","Vt","op","meta","criteria","persistAncestorDerivation","newDm","_ancestorDerivation","selectModeMap","diffIndex","calcDiff","generateRowDiffset","lastInsertedValue","li","selectRowDiffsetIterator","checker","newRowDiffSet","rejRowDiffSet","Ut","shouldSelect","shouldReject","checkerResult","rejectRowDiffset","selectHelper","clonedDm","selectFn","cachedStore","cloneProvider","cachedValueObjects","_partialFieldspace","_cachedValueObjects","keyFn","rowId","domainChecker","some","dom","boundsChecker","filterPropagationModel","propModels","fns","filterByDim","filterByMeasure","clone","clonedModel","cloneWithAllFields","partialFieldspace","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","modelFieldsConfig","getFieldsConfig","identifiers","fieldNames","values","indices","dLen","def","valuesMap","rangeKeys","hasData","present","getKey","fn","every","isWithinDomain","fieldType","propModel","select","saveChild","addDiffsetToClonedDm","selectConfig","cloneWithProject","projField","allFields","cloned","projectionSet","actualProjField","sanitizeUnitSchema","sanitizeAndValidateSchema","updateData","relation","defaultConfig","dataHeader","fieldNameAs","as","nameSpace","valueObjects","rawFieldsData","formattedFieldsData","rawData","_","_dataFormat","applyExistingOperationOnModel","dataModel","selectionModel","getDerivations","derivation","params","groupByString","getRootGroupByModel","_parent","find","propagateToAllDataModels","rootModels","propagationInf","propagationNameSpace","propagateToSource","propagationSourceId","sourceId","addGroupedModel","conf","crit","groupedModel","criterias","actionCriterias","mutableActions","filteredCriteria","entry","excludeModels","sourceActionCriterias","actionInf","actionConf","applyOnSource","action","models","path","getPathToRootModel","propagationSource","rootModel","propConfig","sourceIdentifiers","inf","propagationModel","filteredModel","reverse","handlePropagation","propagateIdentifiers","propModelInf","_children","child","matchingCriteria","getNormalizedProFields","fieldConfig","normalizedProjField","constructor","search","Relation","source","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","updateFields","fieldStoreName","collID","partialFieldMap","newFields","coll","joinWith","unionWith","differenceWith","defConfig","cloneConfig","extraCloneDm","setOfRowDiffsets","setParent","_fieldConfig","fieldObj","removeChild","sibling","parent","_onPropagation","order","withUid","getAllFields","dataGenerated","fmtFieldIdx","elem","fIdx","fmtFn","datumIdx","ids","En","fill","fieldsArr","reducers","newDataModel","groupBy","existingDataModel","sFieldArr","dimensions","je","reducerObj","measures","defaultReducer","measureName","reducerFn","resolve","fieldStoreObj","dbName","dimensionArr","measureArr","rowCount","getData","dataInCSVArr","sortedDm","colData","rowsCount","serializedData","rowIdx","colIdx","fieldinst","dependency","replaceVar","fieldsConfig","depVars","retrieveFn","depFieldIndices","fieldSpec","fs","suppliedFields","computedValues","fieldsData","addField","addToNameSpace","isMutableAction","payload","getRootDataModel","groupByModel","addToPropNamespace","sourceNamespace","propagateImmutableActions","filterImmutableAction","criteriaModel","eventName","measureFieldName","binFieldName","measureField","buckets","binsCount","binSize","dMin","dMax","ceil","abs","generateBuckets","bucketRanges","binnedData","findBucketRange","leftIdx","rightIdx","midIdx","binField","serialize","getSchema","rowSplitDiffsetIterator","splitRowDiffset","dimensionMap","dimensionSet","clonedDMs","uniqueFields","commonFields","normalizedProjFieldSets","fieldSet","splitWithProject","projFieldSet","projFields","first","last","count","sd","std","Operators","compose","operations","currentDM","firstChild","derivations","dispose","bin","project","calculateVariable","naturalJoin","fullOuterJoin","version","Stats","FieldsUtility","enums","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","default","_lib2","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","id","container","useEllipses","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","height","_getWidthFn","contObj","_containerObj","svgText","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","x","minWidth","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","makeEntry","sCon","_classCallCheck","_set","set1","set2","filteredKeys","s1","s2","ForeignSet","isSimpleObject","reqAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","getTimeBasedId","__lastTime","__id","flat","res","scheduler","onFinishCallback","queue","animationFrame","listeners","tempQ","unique","fetch","namedNode","qualifiedName","seed","fetchAggregator","dependencies","getUpstreamNodes","list","rec","qname","placedIndex","preArr","postArr","outgoingEdges","resolver","accumulate","nodeDetails","identity","CustomResolver","utils_classCallCheck","dep","_dep","graph_node_classCallCheck","edges","_seed","requireResolve","retriever","history","electricEdges","_edges","_this","retrieveDetails","edge","head","hist","TypeError","electric_node_classCallCheck","nextFrame","currentFrame","lstnrs","nodes","nFn","_this2","qualifiedNodeMap","graph_node","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flushTarget","flush","mount","resolveReqList","objn","perv","addDependencies","_node","getDependencies","getResolvedList","props","fnSpec","eNode","_ref","electric_node","addEdges","addElectricNode","changedSet","upstreamNodes","upstreamNode","append","__execUniqueElectricEdges","cfLstnrs","nfLstnrs","toArray","_this3","repeatHead","resetPropagationOverride","qnames","_this4","update","resolved","resolveDependencyOrder","resolveMap","neighbour","isRoot","model_classCallCheck","_graph","graph","_lockFlag","_reqQ","mountPoint","_addPropInModel","calculationConfig","customResolver","varName","fetchFn","_customResolver","createNodesFrom","instantCall","_graph$stopPropagatio","propsArr","unsub","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","_graph$stopPropagatio2","setProp","getNodeValue","getNodeFromQualifiedName","Model","__webpack_exports__","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","each","remove","clear","empty","src_nest","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","keyValue","valuesByKey","createObject","setObject","createMap","setMap","sortKey","k","proto","implicit","ordinal","unknown","scale","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","side","highVal","d1","low","high","src_number","extend","definition","Color","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","exec","rgbn","Rgb","rgba","hsla","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","channels","displayable","formatHsl","color_formatHsl","brighter","darker","src_constant","linear","hue","constant","gamma","nogamma","exponential","src_rgb","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","numberArray","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","reA","reB","src_string","am","bm","bs","bi","lastIndex","q","one","zero","src_value","value_typeof","string","setTime","valueOf","src_round","d3_scale_src_constant","d3_scale_src_number","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","bisect","target","interpolate","clamp","continuous","piecewise","output","input","interpolateValue","deinterpolateClamp","reinterpolateClamp","interpolateRound","re","formatSpecifier","specifier","FormatSpecifier","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","formatDecimal","toExponential","coefficient","src_exponent","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","X","toUpperCase","src_identity","prefixes","src_locale","group","grouping","thousands","formatGroup","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","interval","x0","x1","pow10","powp","base","E","exp","logp","log10","log2","reflect","logs","pows","z","raise","thresholds","threshold","quantiles","quantize","t0","newInterval","floori","offseti","offset","previous","setMonth","setHours","setFullYear","setDate","durationMinute","durationWeek","weekday","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","hour","minute","second","millisecond","utcWeekday","setUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","localDate","L","utcDate","UTC","newDate","timeFormat","pads","-","0","numberRe","percentRe","requoteRe","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","formatWeekNumberISO","timeThursday","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","formatQuarter","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","formatUTCQuarter","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","newParse","week","utcFormat","utcParse","durationSecond","durationHour","durationDay","durationMonth","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","src_time","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds","src_colors","deg2rad","PI","rad2deg","C","D","ED","EB","BC_DA","cubehelix","cubehelixConvert","Cubehelix","bl","atan2","cubehelixGamma","colorCubehelix","cosh","cos","sinh","sin","cubehelixLong","interpolateCubehelixLong","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","src_ramp","scheme","interpolateRgbBasis","magma","inferno","plasma","warm","cool","sequential_multi_rainbow","ts","UNIT_GLOBAL_NAMESPACE","UNIT_LOCAL_NAMESPACE","LAYER_LOCAL_NAMESPACE","LAYER_GLOBAL_NAMESPACE","GROUP_GLOBAL_NAMESPACE","GROUP_LOCAL_NAMESPACE","CANVAS_LOCAL_NAMESPACE","CANVAS_GLOBAL_NAMESPACE","swap","tmp","defaultCompare","quickselect","quickselectStep","createNode","leaf","minX","minY","maxX","maxY","distBBox","toBBox","destNode","calcBBox","compareNodeMinX","compareNodeMinY","bboxArea","bboxMargin","enlargedArea","intersectionArea","contains","intersects","findItem","items","equalsFn","multiSelect","stack","all","nodesToSearch","_toConsumableArray","RTree","maxEntries","_maxEntries","_minEntries","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","childBBox","err","insert","splitRoot","tmpNode","insertSingleItem","goingUp","indexes","condense","N2","N1","compareMinX","right2","compareMinY","right3","level","minArea","minEnlargement","targetNode","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","area","enlargement","isNode","insertPath","chooseSubtree","adjustParentBoxes","chooseSplitAxis","splitIndex","chooseSplitIndex","newNode","minOverlap","bbox1","bbox2","overlap","allDistMargin","leftBBox","rightBBox","margin","siblings","ReservedFields","MEASURE_NAMES","CommonProps","ACTION_INF","ON_LAYER_DRAW","MATRIX_CREATED","COORD_TYPES","POLAR","CARTESIAN","DATA_TYPE","d3_axis_src_identity","bottom","epsilon","translateX","translateY","entering","__axis","axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","transform","spacing","range0","range1","center","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","transition","getAttribute","tickSize","pi","halfPi","tau","asin","symbol_circle","draw","moveTo","arc","symbol_cross","lineTo","closePath","tan30","tan30_2","diamond","square","rect","kr","kx","ky","star","wye","y0","y1","x2","y2","sqrt3","triangle","tauEpsilon","Path","_x0","_y0","_x1","_y1","quadraticCurveTo","bezierCurveTo","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","a0","ccw","dx","dy","cw","da","d3_shape_src_constant","none","series","order_ascending","sums","offset_none","s0","stackValue","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","Step","_x","_y","curve_step","stepBefore","stepAfter","that","_k","_x2","_y2","Cardinal","tension","custom","cardinal","CatmullRom","alpha","_alpha","_l01_a","_l12_a","_l23_a","_l01_2a","_l12_2a","_l23_2a","x23","y23","curve_catmullRom","catmullRom","src_line","pointX","pointY","defined","curve","curveLinear","buffer","defined0","src_descending","d3_shape_src_identity","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","colorHsl","hslLong","cubicInOut","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","elasticOut","elasticIn","amplitude","period","backInOut","elasticInOut","backIn","overshoot","backOut","polyInOut","polyIn","polyOut","d3_voronoi_src_constant","RedBlackTree","RedBlackNode","R","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","createEdge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","Selection","idGetter","selection_classCallCheck","_dataObjects","_updateData","_enterData","_exitData","_idGetter","newData","entryData","exitdata","tempMap","duplicateData","updatedData","newSelection","dataObjects","defaultValue","_mode","mergedObjects","mergedData","newdata","sortSel","sortSelection","kA","kB","selection_toConsumableArray","objects","dataSelect","idFn","STRING","FUNCTION","HTMLElement","common_utils_typeof","checkExistence","nonExistentKeys","sanitizeIP","typeObj","htmlElem","getMax","common_utils_toConsumableArray","getMin","getDomainFromData","domArr","_loop","_fields","_slicedToArray","field0","field1","arr0","firstMin","secondMin","firstMax","secondMax","sanitizeDomainWhenEqual","unionDomain","domains","_ref2","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getExtremePoint","points","compareValue","minOrMax","extremePoint","minOrMaxVal","getMinPoint","getMaxPoint","getNearestValue","filterData","getWindow","cancelAnimFrame","cancelAnimationFrame","capitalizeFirst","txt","vals","getMinDiff","uniqueVals","getQualifiedClassName","cls","getDependencyOrder","dependencyOrder","visited","visit","objectIterator","Voronoi","common_utils_classCallCheck","_voronoi","_voronoiFn","getObjProp","_len","_key","intSanitizer","generateGetterSetters","propInfo","_propInfo$","sanitization","preset","onset","typeChecker","getArraySum","total","arraysEqual","isEqual","oldVal","newVal","is","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","registerImmediateListener","_ref3","isHTMLElem","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","createSelection","sel","appendObj","mergedSelection","exitSelection","getObjects","inst","interpolateArray","fitCount","linearInterpolate","atPoint","springFactor","angleToRadian","angle","replaceCSSPrefix","numberInterpolator","interpolateNumber","colorInterpolator","interpolateRgb","hslInterpolator","interpolateHslLong","transformColors","piecewiseInterpolator","hue2rgb","hslToRgb","rgbToHsv","hsvToRgb","hexToHsv","hslaToRgb","_hslToRgb2","RGBAtoRGB","r2","g2","r3","g3","detectColor","col","assembleModelFromIdentifiers","fieldMap","_loop2","temp","cIdx","getDataModelFromRange","criteriaFields","selFields","selFn","fieldValue","getArrayIndexMap","getDataModelFromIdentifiers","hasBarLayer","filteredDataModel","dataArr","filteredSchema","include","propField","registerListeners","listenerMap","_len2","_key2","propListenerMap","namespace","mapObj","propType","listenerFn","listener","isValidValue","escapeHTML","htmlEscapes","&","<",">","\"","'","/","transposeArray","extendsClass","extendsFrom","found","concatModels","dataObj1","dataObj2","data1","data2","schema1","schema2","commonTuples","_loop3","row1","row2","dim1Values","dim2Values","dm1Key","dm2Key","commonSchema","getSymbol","stackOrders","_defineProperty","_stackOrders","stackOrderNone","stackOrderAscending","stackOffsets","_stackOffsets","yp","yn","stackOffsetNone","si","sij0","s3","sk","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","nestCollection","nestFn","getArrayDiff","el","pathInterpolators","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","pie","descending","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","scaleBand","getSmallestDiff","timeFormats","timeDurations","formatTemporal","nearestInterval","getNearestInterval","temporalFields","filteredFields","_ref5","_ref6","lookupWhat","lookupDetails","resolvable","lookupTarget","depArr","deps","nextAnimFrame","getValueParser","retrieveNearestGroupByReducers","_len3","measureFieldNames","_key3","filteredReducers","getAncestorDerivations","nearestReducers","derv","retrieveFieldDisplayName","nearestSortingDetails","nearestSortDerivation","sortingOrder","localeCompare","sortOrderMap","_sortOrderMap","firstVal","secondVal","sortCategoricalField","sortOrderType","_accessors","fn1","fn2","_accessors2","partition","mix","superclass","with","_with","_len4","mixins","_key4","mixin","componentRegistry","comps","reg","regObj","register","customKey","formalName","getReadableTicks","steps","orderedDomain","tempScale","scales","legendTicks","transformColor","rgbaValues","_ref7","_ref7$h","_ref7$s","_ref7$l","_RGBAToHSLA$code","RGBAToHSLA","cmin","cmax","delta","code","origH","origS","origL","origA","sanitizedA","newH","newS","newL","newA","pointWithinCircle","dmMultipleSelection","targetData","payloadMap","currentField","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","sparse","EnterNode","ownerDocument","namespaceURI","_next","__data__","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","xhtml","src_namespaces","xlink","xml","xmlns","src_namespace","namespaces","space","local","src_window","defaultView","styleValue","getPropertyValue","getComputedStyle","classArray","classList","ClassList","_names","classedAdd","classedRemove","textRemove","htmlRemove","nextSibling","lower","previousSibling","creator","fullname","creatorFixed","creatorInherit","uri","documentElement","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","on","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_select","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","noop","Dispatch","T","types","current","mouse","changedTouches","src_touch","touches","identifier","touch","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","maxTouchPoints","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","taskHead","taskTail","frame","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","self","tween","state","duration","ease","schedule","cssNode","cssRoot","cssView","svgNode","degrees","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","tweenValue","_id","transition_interpolate","interpolateString","Transition","_name","newId","selection_prototype","inherit","id0","id1","onFunction","on0","on1","sit","attrTween","string00","string10","interpolate0","string0","string1","value1","attrTweenNS","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleMaybeRemove","listener0","styleInterpolate","textTween","textInterpolate","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Promise","reject","cancel","interrupt","defaultTiming","easeCubicInOut","selectElement","element","makeElement","elemType","callbacks","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","applyStyle","appendElement","element1","element2","setElementAttrs","attrs","setAttrs","addClass","removeClass","setStyles","styles","createElements","clipElement","measurement","clipPathElement","getMousePos","boundingClientRect","getClientPoint","pos","clientPoint","tag","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","initProp","fetchPropValues","propNames","setContexts","contexts","propObj","contextMap","depProps","registerListener","propList","callBack","_options$","namespaceInf","callbackFn","namespaceVal","commits","_savedCommits","_propListenerMap","listenersObj","_registeredListeners","_contextMap","contextsObj","commitsObj","subNamespaces","propDeps","nm","fnInf","store_toConsumableArray","registerPropInMaps","registeredListeners","subNamespace","allProps","_fnCount","addListenerToNamespace","_listeners","namespaceListeners","listenerTypes","removePropValue","propInf","sns","Store","store_classCallCheck","_commits","_queuedProps","_locked","store_createClass","lockModel","lock","unlockModel","unlock","lockCommits","locked","unlockCommits","queuedProps","store_slicedToArray","propName","_params2","commit","addSubNamespace","propFns","nsObj","retrieveNamespaces","disableListener","sanitizedVal","savedCommits","disabled","registerChangeListener","computed","calculatedProp","_this$model","unsubscribeAll","unsubscribe","listenersMap","removeSubNamespace","snsMap","transactor","holder","stateProps","nameSpaceProp","nsProp","_len5","_key5","_ref$takesMultiplePar","takesMultipleParams","prevVal","typeCheck","typeExpected","oldValues","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","_preparePromises","promise","_makeNotifierPromise","createPromise","then","prm","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","CLASSPREFIX","STACK","GROUP","IDENTITY","ANGLE","RADIUS","SIZE","COLOR","SHAPE","TEXT","OUTER_RADIUS_VALUE","TEXT_ANCHOR_MIDDLE","ENCODING","X0","Y0","RADIUS0","ANGLE0","STROKE_DASHARRAY","ASCENDING","AGG_FN_SUM","AREA_LAYER","ARC_LAYER","LINE_LAYER","TEXT_LAYER","POINT_LAYER","BAR_LAYER","TICK_LAYER","SIMPLE_LAYER","BASE_LAYER","SimpleLayer","DATA","CONFIG","MEASUREMENT","DOMAIN","MOUNT","props_defineProperty","_props","axes","metaInf","valueParser","coord","PROPS","_customConfig","newConf","defaultPolicy","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","AxisOrientation","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","SEQUENTIAL","THRESHOLD","CONTINOUS","DISCRETE","HIDDEN","DEFAULT_ANGLE_DOMAIN","scaleLinear","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","ScaleType","createScale","scaleFactory","adjustRange","axisName","defClassName","axisNamePadding","classPrefix","fixedBaseline","labels","rotation","smartTicks","orientation","numberOfTicks","show","showAxisName","showInnerTicks","showOuterTicks","xOffset","yOffset","defaultSort","changeTickOrientation","selectContainer","axisInstance","_smartTicks","renderConfig","labelManager","isSmartTicks","tickText","registerAnimationDoneHook","rotateAxis","instance","getTickSize","yShift","xShift","tickLabelDim","quadrant","rotationNormalizer","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","availableSpace","longestWord","quarter","halfYearly","mintues","getTickIntervalFnBasedOnNumberOfTicks","possibleTickLevelIndex","maxPossibleTicks","tickIntervalLevelInfo","tickIntervalInfo","numOfPossibleTicks","getActualTickInterval","noOfTicks","minWidthBetweenTicks","_minTickDistance","getTickIntervalBasedOnCurrentLevel","_dependencies","longestWordType","applyTickSkipping","minTickDistance","minTickSpace","_minTickSpace","minTickWidth","maxTicks","getSkippedTicks","actualNumberOfTicks","_minDiff","millisecondInterval","numOfTicksAccordingToMinDiff","adjustHorizontalRange","adjustVerticalRange","rangeAdjustmentMap","space_setter_defineProperty","_rangeAdjustmentMap","setAxisRange","rangeBounds","getAdjustedRange","getAxisOffset","timeDiff","avWidth","bars","spaceSetter","spaceConfig","heightForTicks","_context$availableSpa2","availWidth","availHeight","isOffset","_context$renderConfig2","_context$getAxisDimen","getAxisDimensions","tickDimensions","allTickDimensions","axisNameDimensions","tickDimHeight","tickDimWidth","namePadding","labelConfig","minTickHeight","getTickValues","tickShifter","maxTickSpaces","widthForTicks","totalTickWidth","getRotatedSpaces","rotatedHeight","rotatedWidth","setOffset","logicalSpace","getAxisComponentDimensions","axisTicks","largestTick","largestTickDimensions","smartTick","_context$renderConfig","labelFunc","_tickLabelStyle","originalLabel","getFormattedText","_axisNameStyle","getHorizontalAxisSpace","axisDimensions","_context$config2","axisDimHeight","minTickDiff","getMinTickDifference","helper_toConsumableArray","getVerticalAxisSpace","_context$config3","calculateBandSpace","largestDimHeight","_getHorizontalAxisSpa","_getVerticalAxisSpace","getValidDomain","userDom","setContinousAxisDomain","_domain","axisComponentDimensions","oldConfig","_config","mockedOldConfig","shouldAxesScaleUpdate","hasAxesConfigChanged","properties","tickFormatter","sanitizeTickFormatter","_scale","_axis","createAxis","_tickFormatter","resetRenderConfig","_renderConfig","_maxTickSpaces","SimpleAxis","simple_axis_classCallCheck","_mount","_range","_domainLock","_axisDimensions","defCon","simpleConfig","bodyElem","dist","_animationDonePromises","domainValue","setAxisComponentDimensions","smartAxisName","axisClass","_objectSpread","setTickConfig","setSmartAxisName","_this$config2","dimType","widthDim","getSmartAxisName","oriSize","domainVal","computeAxisDimensions","_getAxisComponentDime","labelHeight","labelWidth","calculateContinousSpace","_context$renderConfig6","axisNameWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","renderAxis","labelProps","tickLabelStyle","axisTickFormatter","labelOffset","tickData","allTicks","elementToBeModified","elementNotToBeModified","tickValue","_getRawTickValue","selectionSet","rejectionSet","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","InterpolatorCls","_interpolator","getScaleValue","_this$renderConfig","sanitizeDomain","_get2","_get","_this$renderConfig2","newTickValues","tickSpace","getNumberOfTicks","labelDim","numberOfValues","tickLength","_this$smartTicks$","BandAxis","_this$maxTickSpaces","_getRotatedSpaces","paddingNormalized","formatTickValue","TimeAxis","_getPrototypeOf2","time_axis_classCallCheck","time_axis_possibleConstructorReturn","time_axis_getPrototypeOf","time_axis_get","rawTicks","resetTickInterval","_context$config8","_context$availableSpa","adjustedRange","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","stops","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","props_toConsumableArray","newConfig","uniqueValues","treatNullMeasures","scaledVal","minDomainScaledVal","resolveAxisConfig","propVal","defaultVal","sanitiseConfigIntervals","intervals","getStops","newStops","color_strategy_toConsumableArray","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","rangeStops","newStopsLength","newRange","continousSteppedDomain","_getStops2","uniqueRange","indexedRange","numVal","normalRange","strategyGetter","domainType","rangeType","schemeType","strategies","color_strategy_defineProperty","domainRange","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","colorSchemes","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleInfo","domainRangeFn","transformationArr","size_strategy_defineProperty","_strategies","pieceWiseRange","size_strategy_toConsumableArray","newIntervals","discreteRange","_userRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","strategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","createAngleValues","angleData","_angleFn","_angleValues","AngleAxis","angle_axis_classCallCheck","customDomain","customRange","_this$_range","angle_axis_slicedToArray","WIDTH","HEIGHT","MIN_UNIT_WIDTH","MIN_UNIT_HEIGHT","DIMENSIONS","MEASURES","PIVOT","FORMAT","HAS_DATA_UPDATED","ROWS","COLUMNS","COL","ROW","COLUMN","DETAIL","LAYERS","TRANSFORM","RETINAL","CELL","X_AXES","Y_AXES","ENTRY_CELLS","INITIALIZED","EXIT_CELLS","AXIS","UNIT","UPDATED","BEFORE_UPDATE","VALUE_MATRIX","FACET_HEADERS","ARC","BAR","LINE","POINT","PRIMARY","SECONDARY","BOTH","INTERACTION","GRID_LINES","GRID_BANDS","HEADER","FACET","DEFAULT","DESCENDING","DARK","NONE","DARKER","adjustDomain","minOuterRadius","RadiusAxis","radius_axis_classCallCheck","_radiusFactor","sanitizedRange","rangeVal","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","stackData","seriesData","transformFactory","colorAxis","styleType","intensity","interactionType","stateColor","currentState","originalState","colorInfo","applyInteractionStyle","interactionStyles","elements","getPlotElementsFromSet","reset","applyLayerStyle","retrieveEncodingInf","encoding","encodingNames","encodingInf","encodingFieldInfRetriever","helpers_defineProperty","_encodingFieldInfRetr","setNullsInStack","transformedData","setNulls","transformData","transformType","encodingFieldInf","setNullData","connectNullData","xField","yField","xFieldType","yFieldType","getIndividualClassName","individualClassName","classNameStr","dataNormalizers","_dataNormalizers","radiusFieldIndex","angleFieldIndex","radius0FieldIndex","angle0FieldIndex","fieldsLen","pointObj","radius0","angle0","enc","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","getNormalizedData","transformedDataArr","encodingFieldsInf","domainCalculator","_domainCalculator","layerInst","angleValues","radius0Field","xFieldSubType","yFieldSubType","x0Field","y0Field","yEnc","xEnc","defFn","_d$update","attachDataToVoronoi","accessor","helpers_toConsumableArray","_accessor","updateStyle","animateGroup","groupTransition","groupAnimateStyle","effect","positionPoints","positioner","encodingTransform","getGroupSpan","getUnitWidth","getPlotMeasurement","dimensionalValues","fieldInfo","bandScale","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","timeDiffs","innerPadding","isAxisBandScale","axisPadding","groupPadding","renderLayer","render","throwback","parentNamespace","resolveInvalidTransformType","transformResolverPredicates","groupByField","dimensionField","getValidTransform","getValidTransformForAggFn","resolvedInvalidTransformType","_context$encodingFiel","isCustomTransformTypeProvided","getMarkId","resolveEncodingValues","transformedValues","getColorMetaInf","initialStyle","originalStyle","getCoordValue","trig","coordValueGetter","toCartesianCoordinates","rangePlot","_point$update","_coordValueGetter","axisArr","getBoundBoxes","_point$update2","getDataFromEvent","dataPoint","getIdentifiersFromData","layerId","localOptions","local_options_defineProperty","STATE_NAMESPACES","listener_map_slicedToArray","prevData","dataDidSet","getPreviousStyle","stylesForCurrentLevel","getLastItemInMap","strokeProps","stroke-width","stroke","stroke-opacity","parseStyle","datumStyle","applyStylesOnInteraction","_datum$meta","applicableStyles","strokePosition","applicableStrokePos","sanitizedStyles","parsedStyleVal","currentStyle","styleKeys","_partition2","helper_slicedToArray","strokeStyles","otherStyles","applyStyles","layerNs","groupNs","BaseLayerMixin","_superclass","_class","base_mixin_classCallCheck","base_mixin_possibleConstructorReturn","base_mixin_getPrototypeOf","base_mixin_assertThisInitialized","getterSetters","alias","_points","_cachedData","_measurement","_graphicElems","base_mixin_inherits","base_mixin_createClass","_store","_this$metaInf2","_alias","enableCaching","_cacheEnabled","clearCaching","getTransformedData","calculateDomainFromData","isEmpty","getDataDomain","encodingType","_this$metaInf3","getUidsFromPayload","currentSetIds","getUids","uidMap","getNearestPoint","interactionConfig","interaction","resolveTransformType","_transformType","_this$metaInf4","unitDom","cachePoint","pointMap","_pointMap","getInteractionStyles","addOverlayPath","removeOverlayPath","interactionFn","allMeasures","_identifiers$","_identifiers$2","hasPlotSpan","getPlotSpan","getPlotPadding","getPointsFromIdentifiers","getAllAttrs","filteredPoints","base_mixin_toConsumableArray","sizeVal","getTransformedDataFromIdentifiers","measureIndex","_identifiers$getData","identifierData","identifierSchema","_normalizedData","_this$encodingFieldsI","layerName","tupleArr","transformedVal","graphicElems","elems","animationDone","base_mixin_slicedToArray","encodingValue","retrieveEncodingFields","_transformedData","calculateDomain","applyElementStyles","getState","getListeners","getRenderProps","_context$metaInf","unitRowIndex","unitColIndex","base_mixin_defineProperty","getQualifiedStateProps","_construct","userConf","shouldDrawAnchors","BaseLayer","containsNull","getborderIndexes","prevOfNull","nextOfNull","settIndexPrevOrNext","indexesObj","prevContainsNull","nextContainsNull","getElementsForLine","layer","strokeStyle","linepath","updateFns","drawLine","containerSelection","nullDataLineStyle","nullDataLineClass","curveInterpolatorFn","dd","elementWithNullData","sanitizeNullConfig","makeStartEndPair","borderIndexes","pairArray","pair","prevValue","nextValue","fade","focus","brushStroke","crossline","nearestPointThreshold","strokeOpacity","fillOpacity","strokeWidth","LineLayerMixin","line_mixin_classCallCheck","line_mixin_possibleConstructorReturn","line_mixin_getPrototypeOf","line_mixin_inherits","line_mixin_createClass","getDrawFn","translatePoints","xAxis","yAxis","isXDim","isYDim","xPx","yPx","getColor","resolvedEncodings","getTranslatedData","colorValFn","colorFieldIndex","colorVal","getPathStyle","qualifiedClassName","colorField","translatedPoints","seriesClassName","searchRadius","_point$data$data","line_mixin_toConsumableArray","line_mixin_get","drawArea","easeEffect","_map2","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayerMixin","area_mixin_classCallCheck","area_mixin_possibleConstructorReturn","area_mixin_getPrototypeOf","area_mixin_inherits","area_mixin_createClass","area_mixin_get","nearestPoint","dimValue","pointArr","_pointArr$i$update","pointY0","classNameFn","minYVal","basePos","y0Px","invalidY","invalidY0","resolvedValues","AreaLayer","highlight","stroke-linejoin","shape","states","fadeout","selected","ArcLayerMixin","arc_mixin_classCallCheck","arc_mixin_possibleConstructorReturn","arc_mixin_getPrototypeOf","_prevPieData","arc_mixin_inherits","arc_mixin_createClass","_this$axes","radiusAxis","pieIndex","angleV","angles","_angles","uid","getOuterRadius","getInnerRadius","startAngle0","endAngle0","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_context$axes$angle$r2","arc_helper_slicedToArray","_this$config","qualClassName","_arcFn","consecutiveExits","exitCounter","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","ArcLayer","LineLayer","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","alignment-baseline","defaultEncoding","alignmentBaseLine","defRotation","pointTranslators","polar","textEncoding","angleAxis","textFormatter","backgroundEncoding","backgroundValue","text_mixin_objectSpread","cartesian","textField","textFieldIndex","textValue","text_mixin_slicedToArray","TextLayerMixin","text_mixin_classCallCheck","text_mixin_possibleConstructorReturn","text_mixin_getPrototypeOf","text_mixin_inherits","text_mixin_createClass","getPointTranslator","text-anchor","TextLayer","drawSymbols","createShape","groupElement","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","pathEl","exitGroup","defColorStyle","focusStroke","commonDoubleStroke","doubleStroke","anchors","persistent-anchors","brush-anchors","shapes","sizes","prepareDrawingInf","shapeAxis","sizeAxis","getShape","getSize","layerEncoding","helper_defineProperty","_config$offset","offsetX","offsetY","point_helper_slicedToArray","measure","getStrokeWidthByPosition","inside","outside","PointLayerMixin","point_mixin_classCallCheck","point_mixin_possibleConstructorReturn","point_mixin_getPrototypeOf","_overlayPath","formattedUids","point_mixin_inherits","point_mixin_createClass","maxSize","generateDataPoints","point_mixin_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement2","point_mixin_slicedToArray","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","refElement","pathElement","parentElement","styleVal","currentPath","point_mixin_get","PointLayer","drawRects","barEnterFn","transitionBars","selTransition","positionRetriever","isNegativeVal","barBasePos","resolveDimByField","axesInfo","spaceType","sizeEncoding","sizeConfig","sizeValue","enterSpace","minVal","maxVal","diffPx","minDomVal","endPos","_positionRetriever$ty2","bar_helper_slicedToArray","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayerMixin","bar_mixin_classCallCheck","bar_mixin_possibleConstructorReturn","bar_mixin_getPrototypeOf","_plotPadding","_plotSpan","bar_mixin_inherits","bar_mixin_createClass","bar_mixin_get","getTranslatedPoints","normalizedDataArr","barContainer","bar_mixin_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","pathGroup","_strokeWidthPositionM","strokeWidthPositionMap","L1","L2","L3","BarLayer","tick_renderer","pathElem","angle0Axis","angle0V","angles0","_angles2","tick_mixin_objectSpread","_layerInst$encodingFi","_config$span","xSpan","ySpan","x0Px","TickLayerMixin","tick_mixin_classCallCheck","tick_mixin_possibleConstructorReturn","tick_mixin_getPrototypeOf","tick_mixin_inherits","tick_mixin_createClass","offsetM","offsetL","_ref$position","drawTicks","TickLayer","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","_layerRegistry","getSerializedConf","mark","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","propValue","layer_factory_toConsumableArray","getLayerInstance","layerRegistry","instances","layerObj","layerConstructor","getLayerClass","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","LAYER_TYPES","layer_registry","layers","helpers","commonHelpers","pointLayerHelpers","layerMixins","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","sizeField","shapeField","_retinalEncodingsAndM","src_helper_toConsumableArray","transformDataModels","dataModels","transformVal","getLayerFromDef","existingLayer","rowIndex","colIndex","instanceArr","_timeDiffs","resolveEncodingTransform","sanitizeLayerDef","sanitizedDefs","sConf","attachDataToLayers","transformedDataModels","dataSource","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","axisIndex","getLayerAxisIndex","_layer$config","specificField","encodingField","fieldInst","getMembers","unionDomainFromLayers","axisFields","domainValues","layerDomain","fieldDomain","encodingDomain","fieldStr","domain1","renderLayers","_lifeCycleManager","notify","orderedLayers","layerParentGroup","layerDepOrder","_layerDepOrder","getNearestDimensionalValue","entryVal","getLayersBy","searchBy","removeLayersBy","createSideEffectGroup","createRenderPromise","_renderedPromise","_renderedResolve","getRadiusRange","radiusAxes","isXandYMeasures","_context$fields","src_helper_slicedToArray","xMeasures","yMeasures","getValuesMap","idValuesMap","valuesIdMap","_model$getData","fieldIndices","getSelectionRejectionModel","propValuesMap","rejectionModel","_propModel$getData","entryRowIds","exitRowIds","rowIdsObj","createRTree","interactive","rtree","load","AXES","LAYERDEFS","TRANSFORMEDDATA","DATADOMAIN","FIELDS","LAYERAXISINDEX","IDFIELD","GRID_LINE_PARENT_GROUP_CLASS","GRID_BAND_PARENT_GROUP_CLASS","GRID_PARENT_GROUP","TICK","GRID_BAND","GRID_LINE","CONSOLIDATED","FRAGMENTED","FACET_BY_FIELDS","RETINAL_FIELDS","PARENT_ALIAS","CACHED_DATA","STORE","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","SelectionSet","_volatile","selection_set_classCallCheck","completeSet","_uidMap","_measureNames","_dimVals","measureNames","dims","_completeSetCount","_lockedSelection","_fieldIndices","_resetted","entrySet","exitSet","mergedEnter","mergedExit","dimVals","_config$keepDims","keepDims","_config$dimensions","measureNamesArr","selection_set_toConsumableArray","addSet","removeSet","updateSet","raw","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","muze_firebolt_src_helper_toConsumableArray","getSideEffects","behaviour","behaviourEffectMap","behaviours","effects","unionSets","firebolt","combinedSet","uidSet","entryExitSet","_entryExitSet","_entryExitSet$type","existingModel","cloneObj","clonedVal","getKeysFromCriteria","_firebolt$_metaData","_metaData","dimensionsMap","dimArr","firebolt_defineProperty","dimKey","firebolt_toConsumableArray","Firebolt","actions","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_sourceSelectionSet","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sideEffectPolicies","_propagationBehaviourMap","_behaviourPolicies","_actionBehaviourMap","_behaviourEffectMap","_actionHistory","_queuedSideEffects","_handlers","_payloadGenerators","_payloads","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","setSideEffectConfig","sideEffect","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","initializeSideEffects","sideEffectStore","actionHistory","queuedSideEffects","mergeSelectionSets","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","setTransform","propagationInfo","sanitizePayload","propagate","shouldApplySideEffects","propagationIdentifiers","applicableSideEffects","getApplicableSideEffects","applySideEffects","getEntryExitSet","sourceSelectionSet","behaviourConditions","sideEffectConditions","physicalAction","actionBehaviourMap","behaviourMap","mapActionsAndBehaviour","handler","onDataModelPropagation","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","sideEffectsMap","SideEffect","initedActions","initializePhysicalActions","physicalActions","phyAction","initedPhysicalActions","getDefaultTargetContainer","bindActionWithBehaviour","registerPhysicalActionHandlers","targets","behaviourList","applicableSelectionSets","handlers","genericHandlers","onPhysicalAction","beh","_this$context","getRangeFromIdentifiers","defaultFn","__default","GenericBehaviour","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_this$getAddSetFromCr","getAddSetFromCriteria","getPropagationInf","_payload","setSelectionSet","_this$firebolt","_selectionSet$getSets","getSets","getSetInfo","getSourceFields","setFields","setKeys","aggFns","propData","propagationFields","resetted","otherFields","generic_slicedToArray","generic_toConsumableArray","_propagationIdentifiers","VolatileBehaviour","existingAddSet","SELECTION","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","HighlightBehaviour","BrushBehaviour","BEHAVIOURNAMES","FilterBehaviour","PersistentBehaviour","updateEntry","SelectBehaviour","mergedExitSet","completeSetCount","dragCriteriaRetriever","drag_action_config_defineProperty","_dragCriteriaRetrieve","sourceInfo","startPos","ranges","getRangeFromPositions","getDragActionConfig","getSourceInfo","coordType","attachDragEvent","targetEl","drawingInf","touchStart","d3Drag","getDrawingContext","newStartPos","newEndPos","dragging","dragDiff","triggerPhysicalAction","dragEnd","hover","tooltip","svgContainer","getAllPoints","showInPosition","ACTION_NAMES","generatePayloadFromEvent","click","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","ANCHORS","BRUSH_ANCHORS","PERSISTENT_ANCHORS","HIGHLIGHTER","CROSSLINE","FRAGMENTED_TOOLTIP","AXIS_LABEL_HIGHLIGHTER","GenericSideEffect","generic_sideeffect_classCallCheck","_strategy","plotPointsFromIdentifiers","_this$firebolt$contex","getPlotPointsFromIdentifiers","_sourceInfo","_layers","_plotPointsFromIdentifiers","SurrogateSideEffect","_config$reset","layerFields","filteredUids","_ref2$","surrogate_slicedToArray","SpawnableSideEffect","_drawingContext","changeVisibility","sideEffectGroup","visible","SelectionBox","boxConf","box","drawingContext","unitWidth","unitHeight","selectionGroupClassName","persistent","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","xRange","yRange","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort2","selection_box_helper_slicedToArray","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort4","_xDim","_yDim","direction","selectionBox","selectiondrag","BEHAVIOURS","selectionBoxDrag","onDrag","ACTIONS","boxClassName","parentClassName","connectorClassName","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","arrow","Content","content_classCallCheck","_model","_formatter","ctx","displayFormat","table","tbody","elemData","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","defConf","contentConfig","specificClass","reorderContainers","contentConf","_target","tooltipPos","_orientation","connector","_offset","dim","_extent","contentContainer","topSpace","dimX","rightSpace","leftSpace","bottomSpace","arrowSize","tooltipHeight","tooltipWidth","spaces","positionHorizontal","positionVal","positionVertical","hMax","vMax","_position","HIGHLIGHT_SUMMARY","defNumberFormat","formatters","strategies_defineProperty","isSingleValue","dataLen","stackedSum","getStackedKeyValue","getKeyValue","isSelected","removeKey","isStackedBar","stackedValue","keyObj","valueObj","stackedValueObj","margin-left","getStackedSum","generateRetinalFieldsValues","valueArr","retinalFields","dimensionMeasureMap","fieldInf","retField","retIndex","retinalFieldValue","measuresArr","icon","_fieldInf$retField","formattedRetinalValue","hasMultipleMeasures","_fieldInf$measure","dName","formatterFn","currentMeasureValue","strategies_toConsumableArray","buildTooltipData","nestedDataObj","fieldValues","_dataModel$getData","fieldspace","_context$retinalField","detailFields","_ref2$showStackSum","showStackSum","_context$payload$sele","selectedMeasures","containsDetailField","getFieldInf","defFormatter","nf","getTabularData","strategies_construct","isStacked","isStackedChart","isStackedBarChart","filteredMeasures","generateTooltipContent","nestedData","_nestedData$i","_fieldInf$field","len2","_fieldInf$name","strategies_strategies","showMultipleMeasures","entryUids","fieldsConf","aggregatedValues","getAggregatedValues","dimsMap","groupedDm","dmFields","_values$0$data","_fieldsConf$measure$d","rowValues","configResolvers","tooltip_defineProperty","_configResolvers","specificConf","_default","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","tooltip_getPrototypeOf","_tooltips","sanitizeConfig","strategyObj","sanitizedConf","createTooltip","tooltips","positionRelativeTo","sourceFields","tooltip_get","plotDim","_config$strategy","projectFields","dataTransform","strategyFn","dt","layoutContainer","parentContainerDimensions","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","highlightSummary","selectionSummary","FragmentedTooltip","totalHeight","totalWidth","boundBox","showVertically","boxes","fragmented_tooltip_toConsumableArray","fragmented_tooltip_get","fragmented_tooltip_getPrototypeOf","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","repositionArrow","Crossline","bandWidth","px","bandClass","lineClass","isEmptyDataModel","plotWidth","crossline_toConsumableArray","startPx","endPx","parentGroup","getFormattedSet","selectedPointsId","formattedSet","helper_objectSpread","fadeFn","fadeOnBrush","fadeOnBrushFn","getPayload","actualPoint","commonSet","excludeSetIds","currentHighlightedSet","selectEntrySet","diffSet","pseudoFocus","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","plot_highlighter_getPrototypeOf","excludeSet","selectedPointsIds","plot_highlighter_toConsumableArray","currentStrategy","getExcludeSetIds","plot_highlighter_objectSpread","FilterEffect","entryModel","resetData","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","anchors_getPrototypeOf","_layersMap","addAnchorLayers","addLayer","layerCls","depLayerEncoding","defaultSizeValue","commonName","layerOwner","defaultClassName","groupId","getTransitionConfig","owner","registry","upperAnchors","lowerAnchors","targetObj","anchors_toConsumableArray","layerConfig","linkedLayer","getLayerByName","linkedLayerName","isUpperAnchor","_linkedLayer$getTrans2","anchors_slicedToArray","dmFromPayload","_linkedLayer$getTrans4","transformedDataModel","anchorSizeConfig","getAnchorSizeOnInteraction","getAnchorStroke","PersistentAnchors","anchor","defaultInteractionLayerEncoding","BrushAnchors","AxisLabelHighLighter","selectedData","selectedDataValues","_context$axes","_context$axes$x","_context$axes$y","axis_labels_highlighter_toConsumableArray","fieldMeta","selData","_axis$getTicksBasedOn","getTicksBasedOnData","selectedElements","nullDataTooltipMap","bar","applySideEffectOnEmptyTarget","behaviour_effect_map_defineProperty","brush","brushEntrySet","unionedSet","highlightUids","SIDE_EFFECTS","convertToObj","payloadGenerator","selectionDataModel","facetByFields","propPayload","getRangeFromData","_propConfig$includeMe","includeMeasures","selectionDataFields","measureNamesIdx","excludeSelectedMeasures","payload_generator_defineProperty","selectionSetFields","_facetByFields","payload_generator_slicedToArray","_facetByFields$","facetFields","_facetByFields$2","facetValues","facetIndices","identifierIdxMap","sourceIdentifierFields","identifierMap","payload_generator_toConsumableArray","pseudoSelect","isSideEffectEnabled","se","sideEffectPolicies","sideEffectCheckers","propagationData","prepareSelectionSetMap","maps","getUniqueKeys","_ref2$keys","_ref2$dimensionsMap","mKey","firebolt_helper_toConsumableArray","sanitizePayloadCriteria","propFields","_ref4","dimsMapGetter","firebolt_helper_defineProperty","fieldIndexMap","dataWithFacets","measureNameField","propDims","origRow","rowVal","newRowVal","createMapByDimensions","cacheMap","_cacheMap","sideEffectPolicy","hasCommonCanvas","sourceCanvas","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","firebolt_getPrototypeOf","_connectedBehaviours","payloadGenerators","changeSideEffectStateOnPropagation","unitId","aliasName","parentAlias","propagationSourceCanvas","sourceUnitId","sourceUnit","sideEffectInstances","actionOnSource","mappedEffects","applySideEffect","_this$_metaData","_dimsMapGetter","enabledFn","enabled","getPayloadGeneratorFor","payloadFn","behaviourPolicies","dispatchSecondaryActions","secAction","generatedPayload","payloadGeneratorFn","firebolt_get","cachedData","action_behaviour_map_defineProperty","UnitBrushBehaviour","dragStart","brush_get","behaviours_brush_getPrototypeOf","getGridLayerDefinitions","axisType","getDefaultVisibilty","getLayerDefinition","_definition","_axes","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","dimensionSubTypes","getValidSubtype","attachDataToGridLineLayers","_gridLines","_gridBands","gridLayerData","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_toConsumableArray","src_listener_map_slicedToArray","fieldsVal","removeExitLayers","layersMap","markSet","queuedLayerDefs","_queuedLayerDefs","layerDefArr","listener_map_toConsumableArray","timeDiffsByField","minimumConsecutiveDifference","_ref8","_timeDiffsByField","originalData","_prepareSelectionSetD","prepareSelectionSetData","_prepareSelectionSetM","createSelectionSet","attachPropagationListener","_ref9","createGridLineLayer","vuConf","atomicDef","_ref11","_ref12","_ref15","_ref16","layerAxisIndexVal","_layerAxisIndex","axesVal","_dimensionMeasureMap","src_props_defineProperty","_PROPS","facets","facetKeys","facetFieldsMap","trackerClassName","arcLayerClassName","sideEffectClassName","local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$TRA","_cachedValuesMap","local_options_toConsumableArray","oldData","PseudoSelectBehaviour","unitNs","VisualUnit","visual_unit_classCallCheck","lifeCycleManager","_gridLinesSelection","_gridBandsSelection","createFireboltInstance","_Object$assign","interactions","fireboltDeps","Cls","getFireboltCls","visual_unit_defineProperty","getActionBehaviourMap","getBehaviourEffectMap","_firebolt","createRootContainers","_rootSvg","_sideEffectGroup","initSideEffects","class","renderGridLineLayers","gridLineParentGroup","_entry","grid_lines_slicedToArray","parentGroupClass","rootSvg","_this$parentContainer","parentContainerInf","layerDefinition","layerDefinitions","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","visual_unit_toConsumableArray","layerdeps","_this$_dependencies","parentModel","REACTIVE_PROPS","pointInf","getMarkInfFromLayers","visual_unit_objectSpread","markInf","parsedIdentifiers","_this$fields","xdom","ydom","_rtree","localNs","dataDomain","visual_unit_slicedToArray","dispatchQueuedSideEffects","clearActionHistory","visual_unit_construct","Variable","ComposedVars","composed_vars_classCallCheck","composed_vars_possibleConstructorReturn","composed_vars_getPrototypeOf","vars","_vars","_data","member","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","simple_var_getPrototypeOf","oneVar","_oneVar","dtFormat","dateFormat","fieldDef","varInst","convertToVar","datamodel","transformFields","field_sanitizer_slicedToArray","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","BORDER_WIDTH","facet","handleBlankCell","externalClassname","sanitiseHeaderMatrix","matrices","sanitiseFacetValues","blankCell","normal","latestSource","lastSource","initStore","group_utils_defineProperty","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","getAxisKey","getCellKey","columnId","extractUnitConfig","unitConfig","hasOneField","getHeaderText","rowLength","headerCreator","fieldHeaders","TextCell","findInGroup","variable","channel","group_utils_this","facetType","projType","getAxisType","retriveDomainFromData","mutateAxesFromMap","cacheMaps","xAxes","yAxes","xAxisSet","yAxisSet","axisId","getEncoder","encoder","CartesianEncoder","layerConf","hasPolarEncodings","PolarEncoder","getHeaderAxisFrom","userAxisFromConfig","axisFrom","headerFrom","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","projections","getBorders","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","getFieldsFromSuppliedLayers","suppliedLayerConfig","encodingArr","group_utils_typeof","extractFields","facetsAndProjections","flattenArray","sortFacetFields","facetNames","sortInfo","sortConfig","facetSortConfig","getSchemaDef","removeExitCells","exitCells","qualifiedStateProps","placeholder","globalConfig","VisualEncoder","visual_encoder_classCallCheck","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom4","colHeader","colAxis","scaleMaps","getFieldNames","fieldVar","matrix_model_toConsumableArray","prepareHashMaps","rowKey","joinedRowKey","createJoinedKeys","keyArr","joinedKey","formatKeys","formatterList","formattedKeys","rKeys","rIdx","createColumnDataModels","colContext","sourceDM","rowFacets","colFacets","rowKeyArr","colKeyObj","newRowIndex","splitModelsHashMap","currentColumnIndex","colKeyArr","colKey","hashMapKey","splitByColumn","optionalProjections","facetInfo","projectionInfo","geomCellCreator","_indices$i","projectionIndexObject","columnIndex","matrix_model_objectSpread","getMatrixModel","currentRowIndex","prepareProjectionInfo","colProjections","rowProjections","rowProj","rIndex","newRIndex","colProj","cIndex","newCIndex","newRowProj","newColProj","rowFields","columnFields","prepareFacetInfo","rowFacetNames","colFacetNames","allFacets","_getSplitModelHashMap","getSplitModelHashMap","splitModels","rowKeyHashMap","colKeyHashMap","rowKeys","colKeys","splitContext","splitByRow","setDefaultConfigForFacet","facetsUserConfig","border","isBorderPresent","isGridLinePresent","gridLinesShowLength","borderWidth","generalContext","rowKeyObj","createRowDataModels","rowContext","rowIndexForCurrentKey","_createColumnDataMode","_createColumnDataMode2","_createColumnDataMode3","_createColumnDataMode4","formattedColKeys","facetField","rawFormat","columnKeys","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","sortedFields","layerConfigArr","getLayerConfig","retinalConfig","axesCreators","normalizedColumns","normalizedRows","cell_creator_toConsumableArray","geomCellKey","geomCell","updateCells","facetKey","extractAxisIndex","createAxisCells","currObj","axisInst","_axisInst$config","AxisCell","BlankCell","extractFacetIndex","headerPlaceholderGn","selectionObj","counter","selectionKeys","keySet","textCells","createTextCells","textCell","generatePlaceholders","encoders","valuesMatrix","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","rowsSecondary","rowSec","columnsPrimary","colPrime","columnsSecondary","colSec","_selectionObj","section","hContext","getAxisFields","fieldHolder","ac","transformDataModel","resolvedData","newFieldsConfig","aggregationFns","nearestAggFns","resolvedAggFns","sortDmTemporalFields","computeMatrices","resolverConfig","otherEncodings","isProjection","isFacet","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","cellCreator","valueCellsCreator","valueMatrixInfo","_mutateAxesFromMap","createUnits","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","_map4","leftFacets","rightFacets","rowPriority","colPriority","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","sanitiseBorderMatrix","bottomBorderObj","sanitiseGeomMatrix","RESOLVER_PROPS","units","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_fireboltDeps","_placeholderInfo","matrix_resolver_toConsumableArray","getProjectionFields","_horizontalAxis","_verticalAxis","matrixType","matrix_resolver_defineProperty","_this5","_this$dependencies","autoGroupBy","_this$getAllFields","retContext","getRetinalFieldsDomain","getRetinalAxes","retinalEncoder","setCommonDomain","retinalAxes","updateVisualUnit","placeholders","bottomLeft","bottomRight","_this$dependencies2","showHeaders","_this$registry$cells","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","footers","topLeft","topRight","updateModel","dataTypeScaleMap","src_data_type_scale_map_defineProperty","data_type_scale_map_dataTypeScaleMap","getAdjustedDomain","y1ratio","y2ratio","allSameSign","generateAxisFromMap","axisKey","groupAxes","currentAxes","commonAxisKey","axisConfig","getAxisConfig","axisInfo","axisOrientation","rawUserAxisConfig","userAxisConfig","_rotationLock","createSimpleAxis","sanitizeIndividualLayerConfig","encodingConfigs","getDefaultMark","colFieldType","rowFieldType","createRetinalAxis","fieldProps","getIndex","arrIndex","getLayerConfFromFields","colFields","userLayerConfig","encoder_helper_toConsumableArray","xFields","yFields","colFieldExist","rowFieldExist","resolverAxes","axesArr","userConfig","getSortingConfig","currentFieldName","axesConfig","lastSortConfig","geomCellAxes","1","unitsArr","encodingDomains","axisTypeIndex","typeOfField","_resolver$axes","adjustedDomain","typeOfAxis","alignZeroLine","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","existIndex","axisFromIndex","cartesian_encoder_get","cartesian_encoder_getPrototypeOf","encodingObj","layerArray","serializedLayers","colField","colFieldName","rowField","configs","rowFieldName","defConfigs","layerConfigs","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","axesCls","polar_encoder_defineProperty","_axesCls","pieAxes","varInstances","encType","domainProps","matrixInstance","unitDomains","setRadiusFactor","sizeFieldIndex","sizeMultiplier","getSizeMultiplier","sizeAxisDomain","encodingFields","sanitizedRows","sanitizedColumns","polar_encoder_get","polar_encoder_getPrototypeOf","sanitizedFields","typeIndex","polar_encoder_toConsumableArray","sanitizedConfig","angleField","angle0Field","RetinalEncoder","newAxes","visual_group_local_options","visual_group_local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","cellValue","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","getLogicalSpace","rowHeight","currentRowHeight","setMatrixInstances","_composition","updateChecker","option","hasValue","hasOneValue","createMatrices","groupConfig","matrixConfig","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setRetinalAxisDomain","cornerMatrices","createHeaders","metaData","unionUnitDomains","registerDomainChangeListener","visual_group_props_defineProperty","visual_group_props_PROPS","groupType","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","visual_group_getPrototypeOf","componentSubRegistry","visual_group_assertThisInitialized","_selection","createMatrixResolver","initializeGlobalState","globalState","createUnitState","_VisualUnit$getState2","visual_group_helper_slicedToArray","localState","createLayerState","_BaseLayer$getState2","setupChangeListeners","stores","_context$registry","comp","storeInst","listenerInf","getSimpleAxes","_this$resolver$getAll","visual_group_defineProperty","sanitizedValue","shouldRender","localFields","initializeFields","unsubscribeChangeListeners","sanitizeRetinalConfig","retinalConf","confValue","createEncoderInstance","fieldSanitizer","setAxisAndHeaders","resolverFields","initializeResolverFields","hasMandatoryFields","info","existingRemoveSet","select_toConsumableArray","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","propagationBehaviourMap","_propagationBehaviour","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","src_firebolt_helper_toConsumableArray","DEFAULTICONSIZE","SCALE_FUNCTIONS","HORIZONTAL","VALUE","POSITION_ALIGNMENT_MAP","constants_defineProperty","_POSITION_ALIGNMENT_M","OPPOSITE_POSITION","_OPPOSITE_POSITION","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_getPrototypeOf","legend_firebolt_inherits","legend_firebolt_createClass","getPropagationSelectionSet","behaviourName","canvasAlias","legend_firebolt_toConsumableArray","getFullData","getCriteriaFromData","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","ALIGN","DEFAULT_MEASUREMENT","marginHorizontal","paddingRight","LEGEND_TITLE","_buffer","legend_defaults_defineProperty","borderStyle","borderColor","bounds","upper","tempConfig","STEP_DEFAULT_CONFIG","ICON_MAP","LEGEND_MARKER_PROPS","side_effects_selection_box_classCallCheck","side_effects_selection_box_possibleConstructorReturn","side_effects_selection_box_getPrototypeOf","gradientDimension","legendGradContainer","legendSelGroup","selBox","enterFn","selection_box_drag_defineProperty","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_highlighter_getPrototypeOf","SYMBOL_PADDING","LegendMarker","legend_marker_classCallCheck","legend_marker_possibleConstructorReturn","legend_marker_getPrototypeOf","_graphicElements","markerElement","legendmarkerTextContainer","legendmarkerText","rotateAngle","lableConfig","labelText","_getRelativePosition","getRelativePosition","canvas","legendContainer","_canvasMount","_labelManager$getSmar","MARKER_BUFFER","legendmarkerGroup","textElement","createTextCell","labelManagerRef","maxLines","_minTickDiff","_cells","resetLogicalSpace","title","_title","getScaleInfo","scaleType","scaleFn","getInterpolatedArrayData","domainForLegend","scaleParams","requiredWidth","requiredHeight","upperBound","maxTickDiff","alignment","smartLabelCalc","minimumTickSize","_smartLabelCalc$getOr","isInteger","getcomputedArray","computationhelper","requiredMeasure","availableMeasure","currentTickValue","nextTickValue","measureParam","pixelPerTick","getInterpolatedData","recomputeSteps","getTickMeasure","_scaleParams$measures","getItemMeasures","_labelManager","_labelManager$getOriS","calculateTitleWidth","titleWidth","maxItemSpaces","itemSpaces","localBuffer","cur","SimpleLegend","simple_legend_classCallCheck","_fieldName","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","_this$measurement","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","textOrientation","iconSpaces","maxIconWidth","labelSpace","itemSpace","iconSpace","newLabelWidth","titleSpaces","_this$measurement2","_this$config3","titleCreator","textAlign","titleContainer","marginPosition","_this$config4","_this$measurement3","widthBox","renderTitle","rawVal","simple_legend_defineProperty","idRangeMap","canvasRoot","legendOrientation","position_config_defineProperty","_legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","_context$config","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","transalate","defaultIcon","defaultIconSize","DiscreteLegend","_getScaleInfo","_field$schema","discrete_legend_toConsumableArray","ele","nextVal","discrete_legend_defineProperty","discrete_legend_get","discrete_legend_getPrototypeOf","renderDiscreteItem","_context$measurement2","_item$icon","text-align","marginVerticalBuffer","allSelections","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","legendRect","GradientLegend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","getScaleFactor","newAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","gradient_legend_getPrototypeOf","renderGradient","_createLegendSkeleton","StepLegend","domainLeg","isFraction","step_legend_toConsumableArray","numRight","step_legend_defineProperty","stepData","step_legend_get","step_legend_getPrototypeOf","renderStepItem","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","IS_POINT_MAP","true","false","LEGEND_TYPE_MAP","src_constants_defineProperty","_LEGEND_TYPE_MAP","HORIZONTAL_CENTER","VERTICAL_CENTER","share","operators_construct","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","canvasIterator","canvases","iteratorFn","cFn","visualGroup","_throwback","registerActions","fnName","_registrableComponents","setFireboltDependencies","actionModel","ActionModel","action_model_classCallCheck","registerPropagationBehaviourMap","dissociateBehaviour","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","*","propagationPayload","propagationCanvas","crossInteractionPolicy","TITLE_CONFIG","SUB_TITLE_CONFIG","MESSAGE_CONFIG","baseFontLimit","upperFontLimit","baseSizeLimit","upperSizeLimit","fractionImage","fractionChild","canvas_local_options_defineProperty","_localOptions","canvasOptions","_canvasOptions","local_options_slicedToArray","arg1","arg2","local_options_typeof","titleConfig","subtitle","subtitleConfig","sub","LayoutComponent","layoutComponent_classCallCheck","_boundBox","_renderAt","_alignWith","_alignment","_componentName","_className","DummyComponent","newDimensions","renderAt","component","componentName","pagination","scrollBar","thickness","speed","legend","minHeight","minCharacters","verticalAlign","collapse","invalidValues","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_CLASS_NAME","NODE_PREFIX","DefinitionModel","definitionModel_classCallCheck","_host","host","_cut","cut","_ratioWeight","ratioWeight","_preferred","preferred","_lanes","lanes","_remainingHeight","_remainingWidth","remainingHeight","remainingWidth","getNodeId","_uid","yExtraSpace","smallestHeight","getCutType","smallestExtraHeightHorizontally","MAX_SAFE_INTEGER","containerHeight","hostHeight","xExtraSpace","smallestWidth","smallestExtraWidthVertically","containerWidth","hostWidth","createPlaceHolderComponent","placeComponent","definitionModel","leftOvercomponentRationWidth","isPreferred","isGridComponent","componentRatioWidth","leftHeight","leftWidth","_component$getLogical","componentHeight","componentWidth","firstLaneConfig","firstLane","secondLane","tree_classCallCheck","_parentCut","_this$_children","tree_toConsumableArray","parentCut","bound","nodeconfig","searchNode","childNode","nodeId","deleteSearchNode","LayoutModel","measurements","layout_model_classCallCheck","_measurements","_root","createTree","setBoundBox","addChildren","lane","allocateBoundingBox","totalWeight","carry","lastSibling","ratio","setHostSpatialConfig","setHostPosition","negotiateDimension","alteredDim","nonAlteredDim","cumultiveExtraSpaceAmt","childrenLength","extraSpaceAmt","computePosition","determineBoundBox","bb","_lastSibling$boundBox","_top","_left","_height","_width","_instance$parent$boun","setSpatialConfig","VIEW_INDEX","ROW_MATRIX_INDEX","2","COLUMN_MATRIX_INDEX","ROW_ROOT","COLUMN_ROOT","VERTICAL","Utils","utils_createClass","isDOMElement","getID","getElement","findContainer","coordinate","removeDiv","divId","DataPoint","data_point_classCallCheck","DataParser","data_parser_classCallCheck","data_parser_createClass","defaultDataPointLogic","nodepoints","getnodePoints","datapoint","HTMLDataAdapter","_DataParser","html_data_classCallCheck","html_data_possibleConstructorReturn","html_data_getPrototypeOf","html_data_inherits","html_data_createClass","getCoordinates","html_data_get","Renderer","renderer_classCallCheck","renderer_createClass","initRenderer","__logicalTree","HTMLRenderer","_Renderer","html_renderer_classCallCheck","html_renderer_possibleConstructorReturn","html_renderer_getPrototypeOf","_coordinates","html_renderer_inherits","html_renderer_createClass","createhtml","mainDiv","html_renderer_get","parentDiv","createAndCustomiseParent","hasHost","createAndPositionDiv","html_renderer_objectSpread","div","coordinates","findNode","nodeID","renderer","drawLayout","renderHTML","resolveAligment","componentData","alignWith","componentToAlign","componentMap","refNode","newNodeConfig","setAlignConfig","DrawingManager","drawing_manager_classCallCheck","_componentMap","_layoutClassName","layoutClassName","_renderer","drawing_manager_createClass","drawComponent","DefinitionManager","definition_manager_classCallCheck","_prioritySequence","_totalHeight","_totalWidth","_targetComponentMap","prepareTargetComponentMap","targetComponentMap","canvasComponent","tempDefModel","componentRef","getComponent","placeGridComponent","gridComponents","iscolumnPreffered","_placeComponent","rowpreffred","LayoutDef","layout_def_classCallCheck","_layoutDefinition","layout_def_createClass","addComponent","layoutDefinition","addMultipleComponent","componentArray","sanitizedDefinition","hostObj","hostID","childHost","resetComponentMap","LayoutManager","layout_manager_classCallCheck","_dimension","_skeletonType","skeletonType","_layoutDef","_drawingManager","_rootNodeID","con","resetNode","updateNode","compute","_layout","calLayOutDef","_context$dimension","layoutDef","prioritySequence","generateConfigModel","negotiate","broadcast","layoutComponents","componentArr","compo","elementName","removeElement","elemID","co","deleteElement","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","nameSpaceProps","equalityChecker","dispatchProps","sanitizedData","getMandatoryFields","_cachedProps","notifyAnimationEnd","viewInfo","layout","centerMatrix","viewMatricesInfo","promises","cellArr","lifeCycle","animDonePromises","applyPropagationPolicy","changeBehaviourStateOnPropagation","isMeasure","applyInteractionPolicy","splom","isSplom","interactionPolicy","_interactionPolicy","_crossInteractionPolicy","unitFireBolt","canvas_helper_defineProperty","canvas_helper_objectSpread","createLayoutManager","src_options","minUnitWidth","minUnitHeight","options_slicedToArray","_auxConfig$reset","oldConf","facetDefaultConfig","fixFacetConfig","fixScrollBarConfig","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_DEFAULT_CONFIGURATIO","_FieldNames$BORDER","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","rowData","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","minSecondMeasure","createMatrixEachLevel","_arr$i","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_layoutMatrix","_tree","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistributeSpaces","childDepth","createMatrixInstances","matrixInfo","breakPointer","_breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","RowVisualMatrix","row_matrix_classCallCheck","row_matrix_possibleConstructorReturn","row_matrix_getPrototypeOf","maxHeights","maxWidths","matrixInst","cellDimOptions","matrixIndex","_this2$getCellDimensi","getCellDimensions","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","remainingAvailWidth","cWidths","conditions","maxPrioritySpace","availableWidth","currentWidth","prioritySpace","logicalWidths","getPriorityDistribution","mWidth","mHeight","redistributeViewSpaces","computeViewableSpaces","rHeights","gutter","spaceTakenByColumn","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","colHeight","colWidth","heights","ColumnVisualMatrix","column_matrix_classCallCheck","column_matrix_possibleConstructorReturn","column_matrix_getPrototypeOf","heightDist","divider","condition","spaceTakenByRow","getDistributedWidth","layoutConfig","distWidth","rowLen","oldLogicalSpace","heightDistribution","getMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","paginationDetailsMap","scrollType","paginationMeasureGetter","relatedMaxMeasure","getMatrixMeasureForPagination","measureDetails","actualMeasure","scrollInfo","getMatrixHeightDetails","columnMatrixWidth","_getHeightRequiredByC","getHeightRequiredByColMatrix","maxColumnMatrixHeight","columnViewSpace","getViewableSpaces","columnPointer","columnMatrixHeight","maxHeightAvailableForRowMatrix","rowMatrixHeight","bufferCondition","isScroll","getActualBufferFromConfig","computations_slicedToArray","getBufferFromCondition","currentBufferType","horizontalBuffer","verticalBuffer","computeLayoutMeasurements","_getMatrixWidthDetail","getMatrixWidthDetails","_layout$config3","rowMatrixWidth","maxRowMatrixWidth","maxWidthAvailableForColumnMatrix","_getMatrixHeightDetai","_getActualBufferFromC","rowViewableSpaces","columnViewableSpaces","setValueMatrixMeasurements","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnHeightsPrimary","columnHeightsSecondary","measureSum","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","layout_getPrototypeOf","_layoutId","_scrollInfo","generateVisualMatrices","begColCells","endColCells","gutterSpace","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","RowMatrix","ColumnMatrix","layout_get","_computeLayoutMeasure","setViewInformation","pageNumber","pageType","totalPages","layout_defineProperty","renderGrid","currentPage","_viewInfo","maxRowHeight","maxColWidth","rowPointer","getViewMatrices","rowMatrices","getViewableMatrices","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$config","rowSpaces","colSpaces","rightWidth","topHeight","bottomHeight","centerHeight","centerWidth","viewWidth","viewHeight","actualCenterMeasures","totalMeasures","unitHeights","unitWidths","specificBorderApplier","borderTypes","showBorders","borderInfo","borderType","applySpecificBorder","applyBorders","borderApplierFn","borderApplier","border_helper_defineProperty","borderMapVal","borderMap","orderMaker","nestByStack","updateArr","optionalParams","currStack","prevStack","arrVal","stackVal","currElemIndex","newElem","arrElem","returnArr","spanCalculator","isNull","maskCreator","_nestByStack","viewMatrix","hierarchy","_nestByStack2","spanGenerator","spans","ridx","currSpan","getOrder","matrixSpanGeneratorMap","span_maker_defineProperty","_matrixSpanGeneratorM","orderGetter","viewMatrixMaker","spanMaker","matrixSpanGenerator","spanApplier","cellCounter","spaceAllocationDueToSpan","primaryUnitWidth","cumulativeWidth","spanApplierMap","_spanApplierMap","TransactionSupport","INTERFACE_IMPl","LAYER_DEF","DETAIL_FIELDS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_DEFAULT_CONFIG","_CONSTANTS$MARGIN","CONSTANTS","_CONSTANTS$PADDING","_CONSTANTS$HEADER_PAD","_CONSTANTS$TITLE_PADD","DEFAULT_PROPS","minSpacing","visual_cell_src_props_defineProperty","visual_cell_src_props_PROPS","caption","smartText","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","axis_cell_getPrototypeOf","_availHeight","_availWidth","axis_cell_assertThisInitialized","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","actualWidth","actualHeight","_axis$config2","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","blank_cell_getPrototypeOf","blank_cell_assertThisInitialized","setSmartText","_context$minSpacing","minHeightSpace","minWidthSpace","paddedHeight","paddedWidth","isTitleSubtitle","subType","returnVal","computeTextSpace","_context$minSpacing2","minText","_minTextSpace","smartSpace","smHeight","smWidth","headerPadding","text_cell_classCallCheck","text_cell_possibleConstructorReturn","text_cell_getPrototypeOf","text_cell_assertThisInitialized","titlePadding","vAlign","_this$smartText","translation","middle","setPadding","localPadding","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","geom_cell_getPrototypeOf","_unit","_datamodel","_transform","_caption","geom_cell_assertThisInitialized","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","resolveTitleSubTitleContent","rawContent","createHeading","prevCell","cellType","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","interactionRegistry","dataInfo","legendMeasures","titleText","legendIconShapeMapper","layerMarks","includes","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","setParentInfo","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","_this$params$componen","updateWrapper","_this$params$componen2","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","childHeight","message","imageNode","messageNode","formatFontSize","_params$config","headerCell","configType","headerAlignmentMap","component_wrapper_maker_defineProperty","_headerAlignmentMap","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","wrapperParams","component_wrapper_maker_objectSpread","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","_i","_headerValues","defaultDimensions","canvasHeight","canvasWidth","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","addFacetDataAndMeasureNames","facetData","facetVals","canvas_firebolt_helper_defineProperty","hasMeasureNameField","canvas_firebolt_helper_toConsumableArray","measureNameArr","isDimension","isCrosstab","dispatchBehaviours","_firebolt$context$con2","behaviourConfs","unitFirebolt","targetFirebolt","propagationDataSource","getPropagationSource","defaultCrossInteractionPolicy","propagationCanvasAlias","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","defaultInteractionPolicy","tooltipSideEffect","unitDimsMap","unitDims","group_firebolt_toConsumableArray","groupDataMap","facetMap","unitFieldsConfig","linkedRows","linkedRow","handleDataModelPropagation","attachBehaviours","crosstab","_this$context$config$","_ref$instance","findPlaceHolderById","addSelectedMeasuresInPayload","groupFields","_unit$fields","handlePhysicalAction","resetSelectAction","group_firebolt_get","auxConfig","propagateValues","sourceCanvasId","sideEfffects","propagationBehaviour","sourceBehaviour","propagationConf","propConf","behaviourInstance","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setComponentInfo","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","default_registry_defineProperty","_COMPONENTS","SUBREGISTRIES","utils","Smartlabel","globalCache","defaultRegistry","globalRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","Components","VisualLayer","unitHelpers","unitEnums","Encoders","encoderHelpers","groupUtils","groupEnums","SideEffects","standards","Behaviours","pkg","operators"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","import { getNumberFormattedVal } from './helper';\n\n/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (value, rawValue, field) {\n const formattedValue = getNumberFormattedVal(field, value);\n\n Object.defineProperties(this, {\n _value: {\n enumerable: false,\n configurable: false,\n writable: false,\n value\n },\n _formattedValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: formattedValue\n },\n _internalValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: rawValue\n }\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Returns the parsed value of field\n */\n get formattedValue () {\n return this._formattedValue;\n }\n\n /**\n * Returns the internal value of field\n */\n get internalValue () {\n return this._internalValue;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[i],\n formattedValue: field.formattedData()[i],\n };\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[ii],\n formattedValue: field.formattedData()[ii],\n };\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray } from '../utils';\n\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType) {\n let retFunc;\n\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'asc') {\n retFunc = (a, b) => a - b;\n } else {\n retFunc = (a, b) => b - a;\n }\n break;\n default:\n if (sortType === 'asc') {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? 1 : -1;\n };\n } else {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? -1 : 1;\n };\n }\n }\n\n return retFunc;\n}\n\n/**\n * Resolves the actual sorting function based on sorting string value.\n *\n * @param {Object} fDetails - The target field info.\n * @param {string} strSortOrder - The sort order value.\n * @return {Function} Returns the sorting function.\n */\nfunction resolveStrSortOrder (fDetails, strSortOrder) {\n const sortOrder = String(strSortOrder).toLowerCase() === 'desc' ? 'desc' : 'asc';\n return getSortFn(fDetails.type, sortOrder);\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData (data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg (groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data by applying the standard sorting mechanism.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction applyStandardSort (data, schema, sortingDetails) {\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n const sortFn = resolveStrSortOrder(fDetails, sortMeta);\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortFn(a[fDetails.index], b[fDetails.index]));\n }\n }\n}\n\n/**\n * Creates a map based on grouping.\n *\n * @param {Array} depColumns - The dependency columns' info.\n * @param {Array} data - The input data.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - The sorting details for standard sorting.\n * @return {Map} Returns a map.\n */\nconst makeGroupMapAndSort = (depColumns, data, schema, sortingDetails) => {\n if (depColumns.length === 0) { return data; }\n\n const targetCol = depColumns[0];\n const map = new Map();\n\n data.reduce((acc, currRow) => {\n const fVal = currRow[targetCol.index];\n if (acc.has(fVal)) {\n acc.get(fVal).push(currRow);\n } else {\n acc.set(fVal, [currRow]);\n }\n return acc;\n }, map);\n\n for (let [key, val] of map) {\n const nMap = makeGroupMapAndSort(depColumns.slice(1), val, schema, sortingDetails);\n map.set(key, nMap);\n if (Array.isArray(nMap)) {\n applyStandardSort(nMap, schema, sortingDetails);\n }\n }\n\n return map;\n};\n\n/**\n * Sorts the data by retaining the position/order of a particular field.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n * @param {Array} depColumns - The dependency column list.\n * @return {Array} Returns the sorted data.\n */\nfunction applyGroupSort (data, schema, sortingDetails, depColumns) {\n sortingDetails = sortingDetails.filter((detail) => {\n if (detail[1] === null) {\n depColumns.push(detail[0]);\n return false;\n }\n return true;\n });\n if (sortingDetails.length === 0) { return data; }\n\n depColumns = depColumns.map(c => fieldInSchema(schema, c));\n\n const sortedGroupMap = makeGroupMapAndSort(depColumns, data, schema, sortingDetails);\n return data.map((row) => {\n let i = 0;\n let nextMap = sortedGroupMap;\n\n while (!Array.isArray(nextMap)) {\n nextMap = nextMap.get(row[depColumns[i++].index]);\n }\n\n return nextMap.shift();\n });\n}\n\n/**\n * Sorts the data.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nexport function sortData (dataObj, sortingDetails) {\n let { schema, data } = dataObj;\n\n sortingDetails = sortingDetails.filter(sDetial => !!fieldInSchema(schema, sDetial[0]));\n if (sortingDetails.length === 0) { return; }\n\n let groupSortingIdx = sortingDetails.findIndex(sDetial => sDetial[1] === null);\n groupSortingIdx = groupSortingIdx !== -1 ? groupSortingIdx : sortingDetails.length;\n\n const standardSortingDetails = sortingDetails.slice(0, groupSortingIdx);\n const groupSortingDetails = sortingDetails.slice(groupSortingIdx);\n\n applyStandardSort(data, schema, standardSortingDetails);\n data = applyGroupSort(data, schema, groupSortingDetails, standardSortingDetails.map(detail => detail[0]));\n\n dataObj.uids = data.map(row => row.pop());\n dataObj.data = data;\n}\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport { sortData } from './sort';\nimport { FieldType } from '../enums';\nimport { ROW_ID } from '../constants';\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: ROW_ID,\n type: FieldType.DIMENSION\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].internalValue ===\n dm2Fields[fieldName].internalValue && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum, { format: this.schema.format }));\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport PartialField from '../partial-field';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n static parser() {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n\n static get BUILDER() {\n const builder = {\n _params: {},\n _context: this,\n fieldName(name) {\n this._params.name = name;\n return this;\n },\n schema(schema) {\n this._params.schema = schema;\n return this;\n },\n data(data) {\n this._params.data = data;\n return this;\n },\n partialField(partialField) {\n this._params.partialField = partialField;\n return this;\n },\n rowDiffset(rowDiffset) {\n this._params.rowDiffset = rowDiffset;\n return this;\n },\n build() {\n let partialField = null;\n if (this._params.partialField instanceof PartialField) {\n partialField = this._params.partialField;\n } else if (this._params.schema && this._params.data) {\n partialField = new PartialField(this._params.name,\n this._params.data,\n this._params.schema,\n this._context.parser());\n }\n else {\n throw new Error('Invalid Field parameters');\n }\n return new this._context(partialField, this._params.rowDiffset);\n }\n };\n return builder;\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\nimport CategoricalParser from '../parsers/categorical-parser';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n\n static parser() {\n return new CategoricalParser();\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val, { format }) {\n let result;\n // check if invalid date value\n if (!this._dtf) {\n this._dtf = new DateTimeFormatter(format);\n }\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { rowDiffsetIterator } from '../operator/row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nexport const calculateContinuousDomain = (data, rowDiffset) => {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n};\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\nimport TemporalParser from '../parsers/temporal-parser';\nimport { calculateContinuousDomain } from '../helper';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n return calculateContinuousDomain(this.partialField.data, this.rowDiffset);\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data\n * If data is of type invalid or has missing format use the raw value\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n const dataFormat = this.format();\n\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n // If value is of invalid type or format is missing\n if (InvalidAwareTypes.isInvalid(datum) || (!dataFormat && Number.isFinite(datum))) {\n // Use the invalid map value or the raw value\n const parsedDatum = InvalidAwareTypes.getInvalidType(datum) || datum;\n data.push(parsedDatum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, dataFormat));\n }\n });\n return data;\n }\n\n static parser() {\n return new TemporalParser();\n }\n}\n\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import Dimension from '../dimension';\nimport BinnedParser from '../parsers/binned-parser';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n\n static parser() {\n return new BinnedParser();\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport ContinuousParser from '../parsers/continuous-parser';\nimport { calculateContinuousDomain } from '../helper';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n return calculateContinuousDomain(this.partialField.data, this.rowDiffset);\n }\n\n static parser() {\n return new ContinuousParser();\n }\n}\n","import Categorical from './categorical';\nimport Temporal from './temporal';\nimport Binned from './binned';\nimport Continuous from './continuous';\nimport { DimensionSubtype, MeasureSubtype } from '../enums';\n\n\nclass FieldTypeRegistry {\n constructor() {\n this._fieldType = new Map();\n }\n\n registerFieldType(subtype, dimension) {\n this._fieldType.set(subtype, dimension);\n return this;\n }\n\n has(type) {\n return this._fieldType.has(type);\n }\n\n get(type) {\n return this._fieldType.get(type);\n }\n}\n\nconst registerDefaultFields = (store) => {\n store\n .registerFieldType(DimensionSubtype.CATEGORICAL, Categorical)\n .registerFieldType(DimensionSubtype.TEMPORAL, Temporal)\n .registerFieldType(DimensionSubtype.BINNED, Binned)\n .registerFieldType(MeasureSubtype.CONTINUOUS, Continuous);\n};\n\nconst fieldRegistry = (function () {\n let store = null;\n function getStore () {\n store = new FieldTypeRegistry();\n registerDefaultFields(store);\n return store;\n }\n return store || getStore();\n}());\n\nexport default fieldRegistry;\n\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport { fieldRegistry } from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n\n if (fieldRegistry.has(schema.subtype)) {\n return fieldRegistry.get(schema.subtype)\n .BUILDER\n .fieldName(schema.name)\n .schema(schema)\n .data(data)\n .rowDiffset(`0-${data.length - 1}`)\n .build();\n }\n return fieldRegistry\n .get(schema.type === FieldType.MEASURE ? MeasureSubtype.CONTINUOUS : DimensionSubtype.CATEGORICAL)\n .BUILDER\n .fieldName(schema.name)\n .schema(schema)\n .data(data)\n .rowDiffset(`0-${data.length - 1}`)\n .build();\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n if (fieldRegistry.has(schema.subtype)) {\n return fieldRegistry.get(schema.subtype)\n .BUILDER\n .partialField(partialField)\n .rowDiffset(rowDiffset)\n .build();\n }\n return fieldRegistry\n .get(schema.type === FieldType.MEASURE ? MeasureSubtype.CONTINUOUS : DimensionSubtype.CATEGORICAL)\n .BUILDER\n .partialField(partialField)\n .rowDiffset(rowDiffset)\n .build();\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","/**\n * Interface for all data converters\n */\nexport default class DataConverter {\n constructor(type) {\n this._type = type;\n }\n\n get type() {\n return this._type;\n }\n\n convert() {\n throw new Error('Convert method not implemented.');\n }\n\n}\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import { columnMajor } from '../../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr(arr, schema, options) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n const defaultOption = {\n firstRowHeader: true,\n };\n const schemaFields = schema.map(unitSchema => unitSchema.name);\n options = Object.assign({}, defaultOption, options);\n\n const columns = [];\n const push = columnMajor(columns);\n\n let headers = schemaFields;\n if (options.firstRowHeader) {\n // If header present then remove the first header row.\n // Do in-place mutation to save space.\n headers = arr.splice(0, 1)[0];\n }\n // create a map of the headers\n const headerMap = headers.reduce((acc, h, i) => (\n Object.assign(acc, { [h]: i })\n ), {});\n\n arr.forEach((fields) => {\n const field = [];\n schemaFields.forEach((schemaField) => {\n const headIndex = headerMap[schemaField];\n field.push(fields[headIndex]);\n });\n return push(...field);\n });\n return [schemaFields, columns];\n}\n\nexport default DSVArr;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, schema, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), schema, options);\n}\n\nexport default DSVStr;\n","import DataConverter from '../model/dataConverter';\nimport DSVStr from '../utils/dsv-str';\nimport DataFormat from '../../enums/data-format';\n\nexport default class DSVStringConverter extends DataConverter {\n constructor() {\n super(DataFormat.DSV_STR);\n }\n\n convert(data, schema, options) {\n return DSVStr(data, schema, options);\n }\n}\n","import { columnMajor } from '../../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr, schema) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n const schemaFieldsName = schema.map(unitSchema => unitSchema.name);\n\n arr.forEach((item) => {\n const fields = [];\n schemaFieldsName.forEach((unitSchema) => {\n if (unitSchema in header) {\n insertionIndex = header[unitSchema];\n } else {\n header[unitSchema] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[unitSchema];\n });\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import DataConverter from '../model/dataConverter';\nimport FlatJSON from '../utils/flat-json';\nimport DataFormat from '../../enums/data-format';\n\nexport default class JSONConverter extends DataConverter {\n constructor() {\n super(DataFormat.FLAT_JSON);\n }\n\n convert(data, schema, options) {\n return FlatJSON(data, schema, options);\n }\n}\n","import DataConverter from '../model/dataConverter';\nimport DSVArr from '../utils/dsv-arr';\nimport DataFormat from '../../enums/data-format';\n\nexport default class DSVArrayConverter extends DataConverter {\n constructor() {\n super(DataFormat.DSV_ARR);\n }\n\n convert(data, schema, options) {\n return DSVArr(data, schema, options);\n }\n}\n","import DataConverter from '../model/dataConverter';\nimport AUTO from '../utils/auto-resolver';\nimport DataFormat from '../../enums/data-format';\n\nexport default class AutoDataConverter extends DataConverter {\n constructor() {\n super(DataFormat.AUTO);\n }\n\n convert(data, schema, options) {\n return AUTO(data, schema, options);\n }\n}\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, schema, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, schema, options);\n}\n\nexport default Auto;\n","import DataConverter from './model/dataConverter';\nimport { DSVStringConverter, DSVArrayConverter, JSONConverter, AutoDataConverter } from './defaultConverters';\n\nclass DataConverterStore {\n constructor() {\n this.store = new Map();\n this.converters(this._getDefaultConverters());\n }\n\n _getDefaultConverters() {\n return [\n new DSVStringConverter(),\n new DSVArrayConverter(),\n new JSONConverter(),\n new AutoDataConverter()\n ];\n }\n\n /**\n * Sets the given converters in the store and returns the store\n * @param {Array} converters : contains array of converter instance\n * @return { Map }\n */\n converters(converters = []) {\n converters.forEach(converter => this.store.set(converter.type, converter));\n return this.store;\n }\n\n /**\n * Registers a Converter of type DataConverter\n * @param {DataConverter} converter : converter Instance\n * @returns self\n */\n register(converter) {\n if (converter instanceof DataConverter) {\n this.store.set(converter.type, converter);\n return this;\n }\n return null;\n }\n\n /**\n * Rempves a converter from store\n * @param {DataConverter} converter : converter Instance\n * @returns self\n */\n\n unregister(converter) {\n this.store.delete(converter.type);\n return this;\n }\n\n get(name) {\n if (this.store.has(name)) {\n return this.store.get(name);\n }\n return null;\n }\n\n}\n\nconst converterStore = (function () {\n let store = null;\n\n function getStore () {\n store = new DataConverterStore();\n return store;\n }\n return store || getStore();\n}());\n\nexport default converterStore;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS, ROW_ID } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport { converterStore } from './converter';\nimport { fieldRegistry } from './fields';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, formattedData, rawData, i) {\n const resp = {};\n\n for (const [key, field] of fields.entries()) {\n resp[field.name()] = new Value(formattedData[key][i], rawData[key][i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n\n for (const key in fields) {\n resp[key] = new Value(fields[key].formattedValue, fields[key].rawValue, key);\n }\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nconst selectModeMap = {\n [FilteringMode.NORMAL]: {\n diffIndex: ['rowDiffset'],\n calcDiff: [true, false]\n },\n [FilteringMode.INVERSE]: {\n diffIndex: ['rejectRowDiffset'],\n calcDiff: [false, true]\n },\n [FilteringMode.ALL]: {\n diffIndex: ['rowDiffset', 'rejectRowDiffset'],\n calcDiff: [true, true]\n }\n};\n\nconst generateRowDiffset = (rowDiffset, i, lastInsertedValue) => {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n const li = rowDiffset.length - 1;\n\n rowDiffset[li] = `${rowDiffset[li].split('-')[0]}-${i}`;\n } else {\n rowDiffset.push(`${i}`);\n }\n};\n\nexport const selectRowDiffsetIterator = (rowDiffset, checker, mode) => {\n let lastInsertedValueSel = -1;\n let lastInsertedValueRej = -1;\n const newRowDiffSet = [];\n const rejRowDiffSet = [];\n\n const [shouldSelect, shouldReject] = selectModeMap[mode].calcDiff;\n\n rowDiffsetIterator(rowDiffset, (i) => {\n const checkerResult = checker(i);\n checkerResult && shouldSelect && generateRowDiffset(newRowDiffSet, i, lastInsertedValueSel);\n !checkerResult && shouldReject && generateRowDiffset(rejRowDiffSet, i, lastInsertedValueRej);\n });\n return {\n rowDiffset: newRowDiffSet.join(','),\n rejectRowDiffset: rejRowDiffSet.join(',')\n };\n};\n\n\nexport const rowSplitDiffsetIterator = (rowDiffset, checker, mode, dimensionArr, fieldStoreObj) => {\n let lastInsertedValue = {};\n const splitRowDiffset = {};\n const dimensionMap = {};\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n let hash = '';\n\n let dimensionSet = { keys: {} };\n\n dimensionArr.forEach((_) => {\n const data = fieldStoreObj[_].partialField.data[i];\n hash = `${hash}-${data}`;\n dimensionSet.keys[_] = data;\n });\n\n if (splitRowDiffset[hash] === undefined) {\n splitRowDiffset[hash] = [];\n lastInsertedValue[hash] = -1;\n dimensionMap[hash] = dimensionSet;\n }\n\n generateRowDiffset(splitRowDiffset[hash], i, lastInsertedValue[hash]);\n lastInsertedValue[hash] = i;\n }\n });\n\n return {\n splitRowDiffset,\n dimensionMap\n };\n};\n\n\nexport const selectHelper = (clonedDm, selectFn, config, sourceDm, iterator) => {\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const { mode } = config;\n const rowDiffset = clonedDm._rowDiffset;\n const cachedValueObjects = clonedDm._partialFieldspace._cachedValueObjects;\n\n const selectorHelperFn = index => selectFn(\n cachedValueObjects[index],\n index,\n cloneProvider,\n cachedStore\n );\n\n return iterator(rowDiffset, selectorHelperFn, mode);\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nconst getKey = (arr, data, fn, rowId) => {\n let key = fn(arr, data, 0, rowId);\n\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${fn(arr, data, i, rowId)}`;\n }\n return key;\n};\n\nconst keyFn = (arr, fields, idx, rowId) => {\n const field = arr[idx];\n const val = field === ROW_ID ? rowId : fields[field].internalValue;\n return val;\n};\n\nconst domainChecker = (val, domain) => {\n const domainArr = domain[0] instanceof Array ? domain : [domain];\n return domainArr.some(dom => val >= dom[0] && val <= dom[1]);\n};\n\nconst boundsChecker = {\n [MeasureSubtype.CONTINUOUS]: domainChecker,\n [DimensionSubtype.TEMPORAL]: domainChecker\n};\n\nconst isWithinDomain = (value, domain, fieldType) => boundsChecker[fieldType](value, domain);\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n let fns = [];\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const { filterByDim = true, filterByMeasure = false, clone = true } = config;\n const clonedModel = clone ? cloneWithAllFields(model) : model;\n const modelFieldsConfig = clonedModel.getFieldsConfig();\n\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => (({ criteria = {} }) => {\n const { identifiers = [[], []], range } = criteria;\n let [fieldNames = [], values = []] = identifiers;\n const indices = fieldNames.reduce((map, name, i) => {\n map[name] = i;\n return map;\n }, {});\n fieldNames = fieldNames.filter(field => (field in modelFieldsConfig &&\n modelFieldsConfig[field].def.type === FieldType.DIMENSION) || field === ROW_ID);\n const dLen = fieldNames.length;\n const valuesMap = {};\n\n if (dLen) {\n for (let i = 1, len = identifiers.length; i < len; i++) {\n const row = identifiers[i];\n const key = `${fieldNames.map((field) => {\n const idx = indices[field];\n return row[idx];\n })}`;\n valuesMap[key] = 1;\n }\n }\n let rangeKeys = Object.keys(range || {}).filter(field => field in modelFieldsConfig);\n const hasData = values.length || rangeKeys.length;\n\n if (!filterByMeasure) {\n rangeKeys = rangeKeys.filter(field => modelFieldsConfig[field].def.type !== FieldType.MEASURE);\n }\n\n if (!filterByDim) {\n rangeKeys = rangeKeys.filter(field => modelFieldsConfig[field].def.type !== FieldType.DIMENSION);\n }\n\n return hasData ? (fields, i) => {\n let present = true;\n if (filterByDim) {\n present = dLen ? valuesMap[getKey(fieldNames, fields, keyFn, i)] : true;\n }\n\n return rangeKeys.every((field) => {\n const val = fields[field].internalValue;\n return isWithinDomain(val, range[field], modelFieldsConfig[field].def.subtype);\n }) && present;\n } : () => false;\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = clonedModel.select((fields, i) => fns.every(fn => fn(fields, i)), {\n saveChild: false\n });\n } else {\n filteredModel = clonedModel.select((fields, i) => fns.some(fn => fn(fields, i)), {\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\n\nexport const splitWithSelect = (sourceDm, dimensionArr, reducerFn = val => val, config) => {\n const {\n saveChild,\n } = config;\n const fieldStoreObj = sourceDm.getFieldspace().fieldsObj();\n\n const {\n splitRowDiffset,\n dimensionMap\n } = selectHelper(\n sourceDm.clone(saveChild),\n reducerFn,\n config,\n sourceDm,\n (...params) => rowSplitDiffsetIterator(...params, dimensionArr, fieldStoreObj)\n );\n\n const clonedDMs = [];\n Object.keys(splitRowDiffset).sort().forEach((e) => {\n if (splitRowDiffset[e]) {\n const cloned = sourceDm.clone(saveChild);\n const derivation = dimensionMap[e];\n cloned._rowDiffset = splitRowDiffset[e].join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n const derivationFormula = fields => dimensionArr.every(_ => fields[_].internalValue === derivation.keys[_]);\n // Store reference to child model and selector function\n if (saveChild) {\n persistDerivations(sourceDm, cloned, DM_DERIVATIVES.SELECT, config, derivationFormula);\n }\n cloned._derivation[cloned._derivation.length - 1].meta = dimensionMap[e];\n\n clonedDMs.push(cloned);\n }\n });\n\n\n return clonedDMs;\n};\nexport const addDiffsetToClonedDm = (clonedDm, rowDiffset, sourceDm, selectConfig, selectFn) => {\n clonedDm._rowDiffset = rowDiffset;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n persistDerivations(\n sourceDm,\n clonedDm,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n};\n\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n let extraCloneDm = {};\n\n let { mode } = selectConfig;\n\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const setOfRowDiffsets = selectHelper(\n cloned,\n selectFn,\n selectConfig,\n sourceDm,\n selectRowDiffsetIterator\n );\n const diffIndex = selectModeMap[mode].diffIndex;\n\n addDiffsetToClonedDm(cloned, setOfRowDiffsets[diffIndex[0]], sourceDm, selectConfig, selectFn);\n\n if (diffIndex.length > 1) {\n extraCloneDm = sourceDm.clone(cloneConfig.saveChild);\n addDiffsetToClonedDm(extraCloneDm, setOfRowDiffsets[diffIndex[1]], sourceDm, selectConfig, selectFn);\n return [cloned, extraCloneDm];\n }\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\n\nexport const splitWithProject = (sourceDm, projFieldSet, config, allFields) =>\n projFieldSet.map(projFields =>\n cloneWithProject(sourceDm, projFields, config, allFields));\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const { type, subtype, name } = unitSchema;\n if (type === FieldType.DIMENSION || type === FieldType.MEASURE) {\n if (!fieldRegistry.has(subtype)) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n } else {\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converter = converterStore.get(options.dataFormat);\n\n\n if (!converter) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converter.convert(data, schema, options);\n resolveFieldName(schema, header);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n\n // This stores the value objects which is passed to the filter method when selection operation is done.\n const valueObjects = [];\n const { fields } = nameSpace;\n const rawFieldsData = fields.map(field => field.data());\n const formattedFieldsData = fields.map(field => field.formattedData());\n rowDiffsetIterator(relation._rowDiffset, (i) => {\n valueObjects[i] = prepareSelectionData(fields, formattedFieldsData, rawFieldsData, i);\n });\n nameSpace._cachedValueObjects = valueObjects;\n\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n name: field,\n type: schema[i].subtype || schema[i].type,\n index: i,\n };\n }\n }\n return null;\n};\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.SORT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel;\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return selectionModel;\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const excludeModels = propModelInf.excludeModels || [];\n const criterias = propModelInf.criteria;\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n const matchingCriteria = criterias.filter(val => val.groupedModel === child);\n let selectionModel = applyExistingOperationOnModel(propModel, child);\n\n if (matchingCriteria.length) {\n selectionModel = filterPropagationModel(selectionModel, matchingCriteria, {\n filterByDim: false,\n filterByMeasure: true,\n clone: false\n });\n }\n propagateIdentifiers(child, selectionModel, config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n const addGroupedModel = ({ config: conf, model }) => {\n const { criteria: crit } = conf;\n let groupedModel;\n\n if (crit !== null && crit.fields.some(d => d.type === FieldType.MEASURE)) {\n groupedModel = getRootGroupByModel(model);\n }\n return Object.assign({}, conf, {\n groupedModel\n });\n };\n\n let criterias = [];\n\n if (identifiers === null) {\n criterias = [{\n criteria: []\n }];\n criteria = [];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(addGroupedModel);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria.map(addGroupedModel), {\n criteria: identifiers,\n groupedModel: identifiers !== null && identifiers.fields.some(d => d.type === FieldType.MEASURE) ?\n getRootGroupByModel(propagationInf.propagationSource) : null\n }]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n criterias.forEach((inf) => {\n const { criteria: crit } = inf;\n const propagationModel = filterPropagationModel(rootModel, crit, {\n filterByMeasure: !!crit.find(d => d.groupedModel === rootModel)\n });\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n criteria: crit\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModel, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, {\n model: rootModel,\n groupByModel: getRootGroupByModel(actionInf.model)\n }, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId,\n propagationSource: actionInf.model\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n\n\nexport const getNormalizedProFields = (projField, allFields, fieldConfig) => {\n const normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n return Array.from(new Set(normalizedProjField)).map(field => field.trim());\n};\n\n/**\n * Get the numberFormatted value if numberFormat present,\n * else returns the supplied value.\n * @param {Object} field Field Instance\n * @param {Number|String} value\n * @return {Number|String}\n */\nexport const getNumberFormattedVal = (field, value) => {\n if (field.numberFormat) {\n return field.numberFormat()(value);\n }\n return value;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport {\n updateFields,\n cloneWithSelect,\n cloneWithProject,\n updateData,\n getNormalizedProFields\n} from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n config.mode = config.mode || defConfig.mode;\n\n const cloneConfig = { saveChild: config.saveChild };\n return cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n const normalizedProjField = getNormalizedProFields(projField, allFields, fieldConfig);\n\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat, FilteringMode } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema,\n splitWithSelect,\n splitWithProject,\n getNormalizedProFields\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport Value from './value';\nimport { converterStore } from './converter';\nimport { fieldRegistry } from './fields';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Converters are functions that transforms data in various format tpo datamodel consumabe format.\n */\n static get Converters() {\n return converterStore;\n }\n\n /**\n * Register new type of fields\n */\n static get FieldTypes() {\n return fieldRegistry;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Returns the unique ids in an array.\n *\n * @return {Array} Returns an array of ids.\n */\n getUids () {\n const rowDiffset = this._rowDiffset;\n const ids = [];\n\n if (rowDiffset.length) {\n const diffSets = rowDiffset.split(',');\n\n diffSets.forEach((set) => {\n let [start, end] = set.split('-').map(Number);\n\n end = end !== undefined ? end : start;\n ids.push(...Array(end - start + 1).fill().map((_, idx) => start + idx));\n });\n }\n\n return ids;\n }\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n const cachedValueObjects = partialFieldspace._cachedValueObjects;\n const formattedData = field.formattedData();\n const rawData = field.partialField.data;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n cachedValueObjects.forEach((obj, i) => {\n obj[field.name()] = new Value(formattedData[i], rawData[i], field);\n });\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace,\n sourceId: propagationSourceId,\n propagationSource: this },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModel, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of rows in the source {@link DataModel}\n * instance based on a set of dimensions.\n *\n * For each unique dimensional value, a new split is created which creates a unique {@link DataModel} instance for\n * that split\n *\n * If multiple dimensions are provided, it splits the source {@link DataModel} instance with all possible\n * combinations of the dimensional values for all the dimensions provided\n *\n * Additionally, it also accepts a predicate function to reduce the set of rows provided. A\n * {@link link_to_selection | Selection} is performed on all the split {@link DataModel} instances based on\n * the predicate function\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByRow(['Origin'])\n * console.log(splitDt));\n * // This should give three unique DataModel instances, one each having rows only for 'USA',\n * // 'Europe' and 'Japan' respectively\n *\n * @example\n * // without predicate function:\n * const splitDtMulti = dt.splitByRow(['Origin', 'Cylinders'])\n * console.log(splitDtMulti));\n * // This should give DataModel instances for all unique combinations of Origin and Cylinder values\n *\n * @example\n * // with predicate function:\n * const splitWithPredDt = dt.select(['Origin'], fields => fields.Origin.value === \"USA\")\n * console.log(splitWithPredDt);\n * // This should not include the DataModel for the Origin : 'USA'\n *\n *\n * @public\n *\n * @param {Array} dimensionArr - Set of dimensions based on which the split should occur\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByRow (dimensionArr, reducerFn, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n dimensionArr.forEach((fieldName) => {\n if (!fieldsConfig[fieldName]) {\n throw new Error(`Field ${fieldName} doesn't exist in the schema`);\n }\n });\n\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n\n config = Object.assign({}, defConfig, config);\n\n return splitWithSelect(this, dimensionArr, reducerFn, config);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of fields in the source {@link DataModel}\n * instance based on a set of common and unique field names provided.\n *\n * Each DataModel created contains a set of fields which are common to all and a set of unique fields.\n * It also accepts configurations such as saveChild and mode(inverse or normal) to include/exclude the respective\n * fields\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByColumn( [['Acceleration'], ['Horsepower']], ['Origin'])\n * console.log(splitDt));\n * // This should give two unique DataModel instances, both having the field 'Origin' and\n * // one each having 'Acceleration' and 'Horsepower' fields respectively\n *\n * @example\n * // without predicate function:\n * const splitDtInv = dt.splitByColumn( [['Acceleration'], ['Horsepower'],['Origin', 'Cylinders'],\n * {mode: 'inverse'})\n * console.log(splitDtInv));\n * // This should give DataModel instances in the following way:\n * // All DataModel Instances do not have the fields 'Origin' and 'Cylinders'\n * // One DataModel Instance has rest of the fields except 'Acceleration' and the other DataModel instance\n * // has rest of the fields except 'Horsepower'\n *\n *\n *\n * @public\n *\n * @param {Array} uniqueFields - Set of unique fields included in each datamModel instance\n * @param {Array} commonFields - Set of common fields included in all datamModel instances\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByColumn (uniqueFields = [], commonFields = [], config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const normalizedProjFieldSets = [[commonFields]];\n\n config = Object.assign({}, defConfig, config);\n uniqueFields = uniqueFields.length ? uniqueFields : [[]];\n\n\n uniqueFields.forEach((fieldSet, i) => {\n normalizedProjFieldSets[i] = getNormalizedProFields(\n [...fieldSet, ...commonFields],\n allFields,\n fieldConfig);\n });\n\n return splitWithProject(this, normalizedProjFieldSets, config, allFields);\n }\n\n\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union,\n rowDiffsetIterator\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DataConverter } from './converter';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\nimport * as FieldsUtility from './fields';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union,\n rowDiffsetIterator\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version,\n DataConverter,\n FieldsUtility\n}, enums);\n\nexport default DataModel;\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n },\n minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\n","const swap = (arr, i, j) => {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n};\n\nconst defaultCompare = (a, b) => {\n if (a > b) {\n return -1;\n }\n return a > b ? 1 : 0;\n};\n\nconst quickselectStep = (arr, k, left, right, compare) => {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n};\n\n/**\n * Rearranges items so that all items in the [left, k] are the smallest. The k-th element will have the\n * (k - left + 1)-th smallest value in [left, right].\n * array: the array to partially sort (in place)\n * k: middle index for partial sorting (as defined above)\n * left: left index of the range to sort (0 by default)\n * right: right index (last index of the array by default)\n * compareFn: compare function\n *\n * Ref: https://github.com/mourner/quickselect\n * Example:\n * var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];\n * quickselect(arr, 8);\n * arr is [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]\n * ^^ middle index\n * @param {Array} arr the array to partially sort (in place)\n * @param {Number} k middle index for partial sorting (as defined above)\n * @param {Number} left left index of the range to sort (0 by default)\n * @param {Number} right right index (last index of the array by default)\n * @param {Function} compare compare function\n */\nconst quickselect = (arr, k, left, right, compare) => {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n};\n\nexport default quickselect;\n","import quickselect from './quick-select';\n\nconst createNode = children => ({\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n});\n\nconst extend = (a, b) => {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n};\n\n// min bounding rectangle of node children from k to p-1\nconst distBBox = (node, k, p, toBBox, destNode) => {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n};\n\n// calculate node's bbox from bboxes of its children\nconst calcBBox = (node, toBBox) => {\n distBBox(node, 0, node.children.length, toBBox, node);\n};\n\nconst compareNodeMinX = (a, b) => a.minX - b.minX;\nconst compareNodeMinY = (a, b) => a.minY - b.minY;\n\nconst bboxArea = a => (a.maxX - a.minX) * (a.maxY - a.minY);\n\nconst bboxMargin = a => (a.maxX - a.minX) + (a.maxY - a.minY);\n\nconst enlargedArea = (a, b) => (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n\nconst intersectionArea = (a, b) => {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n};\n\nconst contains = (a, b) => a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n\nconst intersects = (a, b) => b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n\nconst findItem = (item, items, equalsFn) => {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n};\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nconst multiSelect = (arr, left, right, n, compare) => {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n};\n\nconst all = (node, result) => {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n};\n\nexport default class RTree {\n constructor (maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all () {\n return all(this.data, []);\n }\n\n search (bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (const child of node.children) {\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) all(child, result);\n else nodesToSearch.push(child);\n }\n }\n\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n load (data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this.build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this.splitRoot(this.data, node);\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this.insertSingleItem(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert (item) {\n if (item) this.insertSingleItem(item, this.data.height - 1);\n return this;\n }\n\n clear () {\n this.data = createNode([]);\n return this;\n }\n\n remove (item, equalsFn) {\n if (!item) return this;\n\n let i;\n let parent;\n let goingUp;\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this.condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toJSON () { return this.data; }\n\n fromJSON (data) {\n this.data = data;\n return this;\n }\n\n toBBox (item) { return item; }\n\n compareMinX (a, b) { return a.minX - b.minX; }\n compareMinY (a, b) { return a.minY - b.minY; }\n\n build (items, left, right, height) {\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / (M ** (height - 1)));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this.build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n chooseSubtree (bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (const child of node.children) {\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n insertSingleItem (item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this.chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this.split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this.adjustParentBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n split (insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this.chooseSplitAxis(node, m, M);\n\n const splitIndex = this.chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this.splitRoot(node, newNode);\n }\n\n splitRoot (node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n chooseSplitIndex (node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n chooseSplitAxis (node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this.allDistMargin(node, m, M, compareMinX);\n const yMargin = this.allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n allDistMargin (node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n adjustParentBoxes (bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n condense (path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n } else this.clear();\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n","const ReservedFields = {\n ROW_ID: '__id__',\n MEASURE_NAMES: '__measure_names__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onLayerDraw',\n MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export var slice = Array.prototype.slice;\n","import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\n\n/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\n\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (idFn) {\n return new Selection(idFn);\n}\n\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } from 'datamodel';\n\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport { dataSelect } from './DataSystem';\nimport * as scales from './scales';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING, ReservedFields } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain = [];\n domains = domains.filter(dom => dom && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = (arr, fn = d => d) => {\n const vals = arr.reduce((acc, v) => {\n acc[fn(v)] = v;\n return acc;\n }, {});\n return Object.values(vals);\n};\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data = []) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n *\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel\n .registerImmediateListener(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n/**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n/**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\n};\n\nconst RGBAtoRGB = (r, g, b, a, r2 = 255, g2 = 255, b2 = 255) => {\n const r3 = Math.round(((1 - a) * r2) + (a * r));\n const g3 = Math.round(((1 - a) * g2) + (a * g));\n const b3 = Math.round(((1 - a) * b2) + (a * b));\n return `rgb(${r3},${g3},${b3})`;\n};\n\nconst hslaToRgb = (h, s, l, a) => {\n const [r, g, b, a1] = hslToRgb(h, s, l, a);\n return RGBAtoRGB(r, g, b, a1);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\(([\\d.]+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\nfunction RGBAToHexA (rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n for (const R in rgba) {\n const r = rgba[R];\n if (r.indexOf('%') > -1) {\n const p = r.substr(0, r.length - 1) / 100;\n\n if (R < 3) {\n rgba[R] = Math.round(p * 255);\n } else {\n rgba[R] = p;\n }\n }\n }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = `0${r}`; }\n if (g.length === 1) { g = `0${g}`; }\n if (b.length === 1) { b = `0${b}`; }\n if (a.length === 1) { a = `0${a}`; }\n\n return `#${r}${g}${b}${a}`;\n}\n\nconst transformToHex = (datumStyle, colorType) => {\n if (colorType === 'rgb') {\n const [r, g, b, a] = datumStyle.replace(/[^\\d,]/g, '').split(',');\n const aa = a || 1;\n\n const rgbaString = `rgba(${r}, ${g}, ${b}, ${aa})`;\n return RGBAToHexA(rgbaString);\n }\n // Add methods to handle hsl and hex conversion\n return null;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n *\n */\nconst getDataModelFromRange = (dataModel, criteria, mode, criteriaFields) => {\n if (criteria === null) return null;\n const fieldsConfig = dataModel.getFieldsConfig();\n const selFields = criteriaFields || Object.keys(criteria).filter(d => d in fieldsConfig);\n const selFn = fields => selFields.every((field) => {\n const fieldValue = fields[field].internalValue;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n\n if (typeof range[0] === STRING) {\n return range.find(d => d === fieldValue) !== undefined;\n }\n\n if (range) {\n // Check if the selected bar value lies insid e the selection box\n return fieldValue >= range[0] && fieldValue <= range[1];\n }\n\n return false;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\nconst getArrayIndexMap = arr => arr.reduce((acc, value, i) => {\n acc[value] = i;\n return acc;\n}, {});\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n *\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode, hasBarLayer) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig || d === ReservedFields.ROW_ID);\n filteredDataModel = dataModel.select((fields, rowId) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = propField === ReservedFields.ROW_ID ? rowId : fields[propField].internalValue;\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n } else {\n filteredDataModel = dataModel.select(() => false, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode, hasBarLayer);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key]) {\n !commonTuples[dm1Key] && (commonTuples[dm1Key] = {});\n row1.forEach((value, idx) => {\n commonTuples[dm1Key][schema1[idx].name] = value;\n });\n }\n if (!commonTuples[dm2Key]) {\n !commonTuples[dm2Key] && (commonTuples[dm2Key] = {});\n row2.forEach((value, idx) => {\n commonTuples[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\n/**\n * Returns array difference, elements in array A, not in Array B\n * @param { Array. } arr Data which needs to be grouped\n * @param { Array. } arr1 Field indices by which the data will be grouped\n * @return { Array. } Returns the array difference (A - B)\n */\nconst getArrayDiff = (arr, arr1) => arr.filter(el => arr1.indexOf(el) < 0);\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nconst getValueParser = config => (val) => {\n if (InvalidAwareTypes.getInvalidType(val)) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\nconst sortingOrder = (a, b) => {\n const sortOrder = !(a instanceof InvalidAwareTypes || a instanceof InvalidAwareTypes)\n ? a.localeCompare(b)\n : 1;\n return sortOrder;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => sortingOrder(firstVal, secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => sortingOrder(secondVal, firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position|null if sort order is invalid\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n if (!sortOrderMap[sortOrder]) return null;\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nconst difference = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => !set.has(fn1(value)));\n};\n\nconst partition = (array, filterFn) => array.reduce((acc, v, i) => {\n const pass = filterFn(v, i, array);\n\n pass ? acc[0].push(v) : acc[1].push(v);\n return acc;\n}, [[], []]);\n\nconst mix = superclass => ({\n with: (...mixins) => mixins.reduce((cls, mixin) => mixin(cls), superclass)\n});\n\nconst componentRegistry = (comps) => {\n const reg = Object.assign({}, comps);\n const regObj = {\n register: (def, customKey) => {\n const key = customKey || def.formalName();\n\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n\n return regObj;\n};\n\nconst getReadableTicks = (domain, steps) => {\n // scaling the axis based on steps provided\n const orderedDomain = [Math.min(...domain), Math.max(...domain)];\n if (steps < 3) {\n return orderedDomain;\n }\n\n const tempScale = scales.scaleQuantize().domain(orderedDomain).nice();\n let tempAxis = null;\n let legendTicks = null;\n\n tempAxis = Symbols.axisBottom().scale(tempScale);\n\n legendTicks = tempAxis.scale().ticks(steps);\n\n if (Math.max(...legendTicks) < orderedDomain[1]) {\n // legendTicks.pop();\n legendTicks.push(orderedDomain[1]);\n }\n if (Math.min(...legendTicks) > orderedDomain[0]) {\n // legendTicks.shift();\n legendTicks.unshift(orderedDomain[0]);\n }\n return legendTicks;\n};\n\nconst RGBAToHSLA = (r, g, b, a = 1) => {\n // Make r, g, and b fractions of 1\n r /= 255;\n g /= 255;\n b /= 255;\n\n // Find greatest and smallest channel values\n const cmin = Math.min(r, g, b);\n const cmax = Math.max(r, g, b);\n const delta = cmax - cmin;\n let h = 0;\n let s = 0;\n let l = 0;\n\n // Calculate hue\n // No difference\n if (delta === 0) {\n h = 0;\n } else if (cmax === r) {\n // Red is max\n h = ((g - b) / delta) % 6;\n } else if (cmax === g) {\n // Green is max\n h = (b - r) / delta + 2;\n } else {\n // Blue is max\n h = (r - g) / delta + 4;\n }\n h = Math.round(h * 60);\n\n // Make negative hues positive behind 360°\n if (h < 0) { h += 360; }\n // Calculate lightness\n l = (cmax + cmin) / 2;\n // Calculate saturation\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n // Multiply l and s by 100\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n\n return {\n color: `hsla(${h},${s}%,${l}%,${a})`,\n code: [h, s, l, a]\n };\n};\n\nconst transformColor = (rgbaValues, { h = 0, s = 0, l = 0, a }, datum, apply) => {\n const [origH, origS, origL, origA] = RGBAToHSLA(...rgbaValues).code;\n const sanitizedA = parseFloat(a || origA, 10);\n const newH = origH + h;\n const newS = origS + s;\n const newL = origL + l;\n let newA = sanitizedA + 1;\n\n if (!apply) {\n newA = sanitizedA - 1;\n }\n\n const finalcolor = {\n color: `hsla(${newH},${newS}%,${newL}%,${newA})`,\n hsla: [newH, newS, newL, newA]\n };\n return finalcolor;\n};\n\nconst pointWithinCircle = (c, point) => {\n const { x: cx, y: cy, r } = c;\n const { x, y } = point;\n\n const dist = Math.sqrt((cx - x) ** 2 + (cy - y) ** 2);\n return dist <= r;\n};\n\n/**\n * Generates a function which performs an intersection (dataModel select)\n * operation for multiple fields\n * @param {Array} targetData - Nested array with field and values in the format:\n * [\n * [field1, field2]\n * [val1, val2]\n * ]\n * @param {Object} dm - The dataModel instance\n * @return {Function} filter function\n */\nconst dmMultipleSelection = (targetData, dm) => {\n const targetFields = targetData[0];\n const targetVals = targetData.slice(1, targetData.length);\n const payloadMap = targetVals.reduce((acc, v) => {\n acc[v] = v;\n return acc;\n }, {});\n const measures = Object.keys(dm.getFieldspace().getMeasure());\n\n const filterFn = (fields, i) => {\n const row = `${targetFields.map((field) => {\n let val;\n if (field === ReservedFields.MEASURE_NAMES) {\n val = measures;\n } else if (field === ReservedFields.ROW_ID) {\n val = i;\n } else {\n const currentField = fields[field];\n const isFieldInvalid = currentField instanceof InvalidAwareTypes;\n\n val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue;\n }\n return val;\n })}`;\n return row in payloadMap;\n };\n return filterFn;\n};\n\nexport {\n arraysEqual,\n componentRegistry,\n mix,\n partition,\n getArrayIndexMap,\n getValueParser,\n require,\n intersect,\n difference,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getArrayDiff,\n getSymbol,\n transformColor,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n transformToHex,\n hsvToRgb,\n hslaToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n unique,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff,\n getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n getReadableTicks,\n dmMultipleSelection,\n pointWithinCircle\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n const sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","import Model from 'hyperdis';\nimport { defaultValue, getObjProp, toArray } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\n }\n};\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nexport class Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (...params) {\n registerListener(this, 'on', ...params);\n }\n\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\n}\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitization: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n const paramsLen = params.length;\n if (paramsLen) {\n const { takesMultipleParams = false } = meta || {};\n // If parameters are passed then it's a setter\n let val = takesMultipleParams ? params : params[0];\n\n if (meta) {\n let values;\n const prevVal = context.get(nsProp, subNamespace);\n const { sanitization, typeCheck, typeExpected } = meta;\n if (typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n const typeCheckResult = typeCheck(val);\n\n if (typeCheckResult) {\n values = val;\n }\n } else if (typeof typeCheck === 'string' && typeCheck === 'constructor') {\n if (val && val.constructor.name === typeExpected) {\n values = val;\n }\n } else {\n values = val;\n }\n\n const preset = meta.preset;\n const oldValues = toArray(context.get(nsProp, subNamespace));\n preset && preset(values, holder);\n if (takesMultipleParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values && context.commit(nsProp, values, subNamespace);\n } else {\n context.commit(nsProp, val, subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, Array.isArray(conf.value));\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = resolver(resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\nimport RTree from './r-tree';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColor,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n hslaToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect,\n partition,\n mix,\n componentRegistry,\n getArrayDiff,\n difference,\n getArrayIndexMap,\n arraysEqual,\n getReadableTicks,\n unique,\n dmMultipleSelection,\n pointWithinCircle\n} from './common-utils';\n\nexport {\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint,\n hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\nexport {\n RTree\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const TEXT = 'text';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0',\n RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0',\n COLOR: 'color',\n SHAPE: 'shape',\n SIZE: 'size',\n TEXT: 'text'\n};\n\nexport const STROKE_DASHARRAY = 'stroke-dasharray';\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\n","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n },\n encodingTransform: {},\n encodingFieldsInf: {},\n dependencies: {},\n dataProps: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n *\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n *\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n adjustRange: false,\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 7,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0,\n defaultSort: 'asc'\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n // selectElement(this).transition()\n // .duration(1000).text(datum);\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const renderConfig = axisInstance.renderConfig();\n const config = axisInstance.config();\n\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\n const mount = axisInstance.mount();\n\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n\n let availableSpace;\n let labelProps;\n let tickSize;\n if (axisInstance.domain().length > 0) {\n const labelManager = axisInstance.dependencies().labelManager;\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n\n const {\n _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n\n tickSize = axisInstance.getTickSize();\n\n // Set style for tick labels\n labelManager.setStyle(tickLabelStyle);\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\n\n // Get range(length of range)\n availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n labelProps = axisInstance.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n setFixedBaseline(axisInstance);\n if (!labels.rotation && labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .call(axis);\n } else {\n selectContainer.call(axis);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n }\n\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n }\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = Math.min(minTickSpace.width, tickDimWidth);\n const minTickHeight = Math.min(minTickSpace.height, tickDimHeight);\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n\n if (heightForTicks < minTickWidth) {\n context.renderConfig({ showAxisName: false });\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimHeight / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\n\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n\n context.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return {\n allTickDimensions,\n tickSize: 0,\n tickDimensions: { height: 0, width: 0 },\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n height = ((max - min) / Math.abs(minTickDiff)) * tickDimHeight;\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + (tickValues ? axisNamePadding : 0);\n\n return {\n height,\n width\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._axisDimensions = {};\n this._smartTicks = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n resetDomain () {\n this._domain = [];\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (value) {\n return this.scale().invert(value);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n\n /**\n * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n _getRawTickValue (data) {\n return data;\n }\n\n getTicksBasedOnData (tickData) {\n const allTicks = selectElement(this.mount()).selectAll('.tick');\n let elementToBeModified = null;\n let elementNotToBeModified = null;\n if (tickData) {\n elementToBeModified = allTicks.filter(tickValue => tickData === this._getRawTickValue(tickValue));\n elementNotToBeModified = allTicks.filter(tickValue => !(tickData === this._getRawTickValue(tickValue)));\n }\n return {\n selectionSet: elementToBeModified,\n rejectionSet: elementNotToBeModified || allTicks\n };\n }\n}\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return tickValues;\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.renderConfig().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation\n } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n *\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\n }\n _getRawTickValue (data) {\n return (new Date(data)).getTime();\n }\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#1f77b4',\n '#ff7f0e',\n '#2ca02c',\n '#d62728',\n '#9467bd',\n '#8c564b',\n '#e377c2',\n '#7f7f7f',\n '#bcbd22',\n '#17becf'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv, defaultValue } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR, DEFAULT_CONFIG } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, defaultValue(Number(color[3]), 1)];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops ?\n config.stops :\n config.range && config.range.length > 2 ?\n config.range.length :\n DEFAULT_CONFIG.stops;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n\nexport const sanitiseConfigIntervals = (intervals) => {\n if (intervals) {\n return intervals;\n }\n return 5;\n};\n","import { piecewiseInterpolator,\n hslInterpolator,\n sanitizeDomainWhenEqual, getReadableTicks } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n newStops = getReadableTicks(domain, stops);\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n*\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n *\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(sanitizeDomainWhenEqual(domain), range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType) =>\n strategies()[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv, defaultValue } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString, getActualHslColor } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n if (color) {\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = Math.min(defaultValue(color[3], 0), 1);\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = Math.min(a + transformationArr[3] || 0, 1);\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n getHslArray (color) {\n return getActualHslColor(color);\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 51,\n range: [51, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator, getReadableTicks } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n // const interpolator = numberInterpolator()(...domain);\n // for (let i = 0; i < intervals; i++) {\n // newIntervals[i] = interpolator(i / (intervals - 1));\n // }\n newIntervals = getReadableTicks(domain, intervals);\n }\n // if (newIntervals[0] < domain[0]) {\n // newIntervals.shift();\n // }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => {\n context._userRange = value.range;\n return mergeRecursive(context._config || {}, value);\n }\n },\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\nimport { sanitiseConfigIntervals } from '../helper';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this.config(this.constructor.defaultConfig());\n this.config(config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n\n this._config.range = this._userRange ? this._userRange : this._config.range;\n\n this._config.stops = sanitiseConfigIntervals(this._config.stops);\n this._rangeType = this._config.type === 'linear' && !!this._config.stops ? DISCRETE : CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1]) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().stops);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive, InvalidAwareTypes } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n *\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\n}\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing data\n */\nexport const DATA = 'data';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n\nexport const ANGLE0 = 'angle0';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\nexport const DEFAULT = 'default';\n/**\n * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\n\nexport const DARK = 'dark';\nexport const NONE = 'none';\nexport const NORMAL = 'normal';\nexport const DARKER = 'darker';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack, InvalidAwareTypes } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n if (row[valueFieldIndex] instanceof InvalidAwareTypes) {\n row[valueFieldIndex] = null;\n }\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const { uniqueField, value: valueField, groupBy } = config;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype,\n retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps,\n defaultValue,\n InvalidAwareTypes,\n isSimpleObject\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nexport const transformColor = (colorAxis, datum, styleType, intensity, interactionType) => {\n const meta = datum.meta;\n const stateColor = defaultValue(meta.currentState[interactionType][styleType], meta.originalState[styleType]);\n const colorInfo = colorAxis.transformColor(stateColor, intensity);\n\n // meta.stateColor[styleType] = colorInfo.hsla;\n meta.currentState[interactionType][styleType] = colorInfo.hsla;\n return colorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const { apply, interactionType, reset } = config;\n const mountPoint = selectElement(context.mount()).select('.muze-overlay-paths').node();\n\n elements.forEach((elem) => {\n const options = { mountPoint, apply, reset };\n context.applyLayerStyle(elem, interactionType, interactionStyles, options);\n\n // const interactionStylesEntries = Object.entries(interactionStyles.style);\n\n // for (const [type, value] of interactionStylesEntries) {\n // const style = { type, value };\n // const options = { mountPoint, apply, reset };\n // context.applyLayerStyle(elem, interactionType, style, options);\n // }\n });\n};\n\nexport const retrieveEncodingInf = (encoding, fieldsConfig, encodingNames) => {\n const encodingInf = {};\n\n encodingNames\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n return encodingInf;\n};\n\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const fields = [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT];\n return retrieveEncodingInf(encoding, fieldsConfig, fields);\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const fields = [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT];\n return retrieveEncodingInf(encoding, fieldsConfig, fields);\n }\n};\n\nexport const setNullsInStack = (transformedData, schema, value, setNulls) => {\n const uniqueFieldIndex = schema.findIndex(d => d.name === value);\n transformedData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n if (dataObj.data[uniqueFieldIndex] === null && !setNulls) {\n dataObj[0] = null;\n dataObj[1] = null;\n }\n });\n });\n return transformedData;\n};\nexport const setNulls = (transformedData, val) => transformedData.map((seriesData) => {\n if (val && (seriesData[val.index] instanceof InvalidAwareTypes)) {\n seriesData[val.index] = null;\n }\n return seriesData;\n});\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const { transform, connectNullData: setNullData } = config;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n const value = yFieldType === FieldType.MEASURE ? yField : xField;\n let transformedData = transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value\n }, data.uids);\n\n if (transformType === STACK) {\n transformedData = setNullsInStack(transformedData, schema, value, setNullData);\n } else {\n transformedData = setNulls(transformedData, dataModel.getFieldsConfig()[value]);\n }\n return transformedData;\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\nexport const dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsArr = Object.keys(fieldsConfig);\n const fieldsLen = fieldsArr.length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n const source = pointObj.source;\n pointObj.dataObj = fieldsArr.reduce((acc, name) => {\n acc[name] = source[fieldsConfig[name].index];\n return acc;\n }, {});\n return pointObj;\n });\n }).filter(d => d.length);\n }\n};\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n }\n};\n\nconst defFn = (d) => {\n const { x, y } = d.update;\n return {\n x,\n y\n };\n};\n\nexport const attachDataToVoronoi = (voronoi, points, accessor = defFn) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== undefined).map((d) => {\n const { x, y } = accessor(d);\n return {\n x,\n y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n const { xField, yField, xFieldType, yFieldType } = encodingFieldInf;\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n\n return [\n !xField,\n !yField,\n !groupByField,\n getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE,\n xFieldType === FieldType.DIMENSION && yFieldType === FieldType.DIMENSION,\n dimensionField && encodingFieldInf[dimensionField] === groupByField\n ];\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates(encodingFieldInf, context, groupByField).some(value => value)) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (initialStyle, conf = {}) => ({\n originalStyle: Object.assign({}, {\n styles: initialStyle\n }, conf),\n currentState: new Map()\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n\nexport const getBoundBoxes = points => points.map((point) => {\n const { x, y } = point.update;\n const data = point.data;\n return {\n minX: x,\n maxX: x,\n minY: y,\n maxY: y,\n data\n };\n});\n\nexport const getDataFromEvent = (context, event) => {\n const dataPoint = selectElement(event.target).data()[0];\n if (isSimpleObject(dataPoint) && getObjProp(dataPoint, 'meta', 'layerId') === context.id()) {\n const values = dataPoint && dataPoint.source;\n let identifiers = null;\n if (values) {\n identifiers = context.getIdentifiersFromData(values, dataPoint.rowId);\n }\n return {\n dimensions: [dataPoint],\n id: identifiers,\n layerId: context.id()\n };\n }\n return null;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [prevData, data]) => {\n context.dataDidSet([prevData, data]);\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import { partition } from 'muze-utils';\n\nconst getLastItemInMap = map => Array.from(map)[map.size - 1];\n\nconst getPreviousStyle = (meta, interactionType) => {\n const { originalStyle, currentState } = meta;\n let stylesForCurrentLevel = Object.assign({}, originalStyle);\n\n if (currentState.size > 0) {\n interactionType = getLastItemInMap(currentState)[0];\n stylesForCurrentLevel = currentState.get(interactionType) || {};\n // const elemFill = elem.style('fill');\n // const newStyle = Object.assign({}, stylesForCurrentLevel, { fill: elemFill });\n }\n return stylesForCurrentLevel;\n};\n\nconst strokeProps = {\n 'stroke-width': 1,\n stroke: 1,\n 'stroke-opacity': 1\n};\n\nconst parseStyle = (value, { datum, datumStyle }, apply) => {\n if (typeof value === 'function') {\n if (isNaN(datumStyle)) {\n // const colorType = detectColor(datumStyle);\n const rgbaValues = datumStyle.replace(/[^\\d,.]/g, '').split(',').map(s => Number(s));\n value = value(rgbaValues, datum, apply);\n } else {\n const numValue = parseFloat(datumStyle, 10);\n value = value(numValue, datum, apply);\n }\n return value;\n }\n return value;\n};\n\nexport const applyStylesOnInteraction = (context, elem, interactionType, conf, options) => {\n const { mountPoint, apply, reset } = options;\n\n const d = elem.data()[0];\n let datum;\n\n if (Array.isArray(d)) {\n datum = d[0];\n } else {\n datum = Array.isArray(d.data) ? d.data[0] : d;\n }\n const { currentState, originalStyle } = datum.meta;\n\n let applicableStyles = {};\n\n const { style: styles, strokePosition } = conf;\n let applicableStrokePos = strokePosition;\n\n if (reset) {\n currentState.clear();\n }\n\n let applyStyle = true;\n\n if (apply) {\n const sanitizedStyles = {\n styles: {},\n strokePosition\n };\n for (const type in styles) {\n const parsedStyleVal = parseStyle(styles[type], {\n datum,\n datumStyle: elem.style(type)\n }, apply);\n\n sanitizedStyles.styles[type] = parsedStyleVal;\n }\n currentState.set(interactionType, sanitizedStyles);\n applicableStyles = sanitizedStyles.styles;\n } else if (!currentState.has(interactionType) && !reset) {\n applyStyle = false;\n } else {\n currentState.delete(interactionType);\n const currentStyle = getPreviousStyle(datum.meta, interactionType);\n applicableStyles = Object.assign({}, originalStyle.styles, currentStyle.styles);\n applicableStrokePos = currentStyle.strokePosition || originalStyle.strokePosition;\n }\n\n const styleKeys = Object.keys(applicableStyles);\n const [strokeStyles, otherStyles] = partition(styleKeys, v => v in strokeProps);\n\n applyStyle && context.applyStyles({\n strokeStyles,\n otherStyles,\n styleObj: applicableStyles,\n elem,\n datum,\n applicableStrokePos,\n mountPoint\n });\n};\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n transactor,\n defaultValue,\n getObjProp,\n InvalidAwareTypes\n} from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer,\n encodingFieldInfRetriever\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\nimport { BASE_LAYER, AREA_LAYER } from '../enums/constants';\nimport { applyStylesOnInteraction } from './helper';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\nexport const BaseLayerMixin = superclass => class extends superclass {\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a\n * layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.size Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor () {\n super();\n\n generateGetterSetters(this, this.constructor.getterSetters());\n this.axes({});\n this.alias(this.constructor.formalName() + getUniqueId());\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(this.localOptions()).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: this.getRenderProps(),\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = this.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BASE_LAYER, this);\n\n transactor(this, this.constructor.localOptions(), store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n static getterSetters () {\n return props;\n }\n\n static localOptions () {\n return localOptions;\n }\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among\n * multiple layers of same type if one layer has to be referred, alias is used. If no alias is given then\n * `formalName` is set as the alias name.\n *\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a categorical field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n getUidsFromPayload ({ model, uids }, targetData) {\n const targetFields = targetData[0];\n const targetVals = targetData.slice(1, targetData.length);\n const payloadMap = targetVals.reduce((acc, v) => {\n acc[v] = v;\n return acc;\n }, {});\n const measures = Object.keys(this.data().getFieldspace().getMeasure());\n\n const filterFn = (fields, i) => {\n const row = `${targetFields.map((field) => {\n let val;\n if (field === ReservedFields.MEASURE_NAMES) {\n val = measures;\n } else if (field === ReservedFields.ROW_ID) {\n val = i;\n } else {\n const currentField = fields[field];\n const isFieldInvalid = currentField instanceof InvalidAwareTypes;\n\n val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue;\n }\n return val;\n })}`;\n return row in payloadMap;\n };\n\n const dm = model.select(filterFn, {});\n\n // Need to find a better way to do this instead of iterating the full data\n const currentSetIds = this.data().select(filterFn, {\n saveChild: false\n }).getUids();\n\n const uidMap = currentSetIds.reduce((acc, v) => {\n acc[v] = true;\n return acc;\n }, {});\n\n return {\n model: dm,\n uids: uids.filter(d => uidMap[d[0]]),\n length: currentSetIds.length\n };\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the\n * data // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, options) {\n const interactionConfig = this.config().interaction || {};\n const { apply, styles, reset } = options;\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType,\n reset\n });\n }\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BASE_LAYER);\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n getInteractionStyles () {\n return applyStylesOnInteraction;\n }\n\n addOverlayPath () {\n return null;\n }\n\n removeOverlayPath () {\n return null;\n }\n\n applyLayerStyle (elem, interactionType, style, options) {\n const interactionFn = this.getInteractionStyles();\n return interactionFn(this, elem, interactionType, style, options);\n }\n\n getIdentifiersFromData (data, rowId) {\n const schema = this.data().getSchema();\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n\n const allMeasures = schema.every(field => field.type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n const { type } = fieldsConfig[name].def;\n if (type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n const measures = schema.filter(d => d.type === FieldType.MEASURE).map(d => d.name);\n if (measures.length) {\n identifiers[0].push(ReservedFields.MEASURE_NAMES);\n identifiers[1].push(measures.join());\n }\n\n if (allMeasures) {\n identifiers[0].push(...[ReservedFields.ROW_ID]);\n identifiers[1].push(...[rowId]);\n }\n\n return identifiers;\n }\n\n hasPlotSpan () {\n return false;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n * Returns the information of the marks corresponding to the supplied identifiers.\n * Identifiers are a set of field names and their corresponding values in an array.\n * It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { source, rowId } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers, idx = 0) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this._normalizedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n const layerName = this.constructor.formalName();\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n if (layerName === AREA_LAYER) {\n enc = (idx % 2 === 0) ? 'y' : 'y0';\n }\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj.source;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc] || 0;\n const row = dataObj.source;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids,\n * it returns all the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n /**\n * Called when the layer datamodel is set.\n *\n * @param {Array} arr Old and new datamodel instance.\n * @param {DataModel} arr[0] Previous datamodel instance.\n * @param {DataModel} arr[1] Current datamodel instance.\n *\n * @return {BaseLayer} Instance of layer.\n */\n dataDidSet ([, data]) {\n const config = this.config();\n\n if (data && config) {\n if (this._cacheEnabled) {\n this._cachedData.push(data);\n } else {\n this._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = this.retrieveEncodingFields(encodingValue, this.coord(), data);\n this.encodingFieldsInf(encodingFieldsInf);\n this.resolveTransformType();\n this._transformedData = this.getTransformedData(data, config,\n this.transformType(), encodingFieldsInf);\n this._normalizedData = this.getNormalizedData(this._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = this.calculateDomainFromData(this._normalizedData,\n this.encodingFieldsInf(), this.data().getFieldsConfig());\n this.domain(domain);\n }\n }\n }\n return this;\n }\n\n retrieveEncodingFields (encoding, coord, data) {\n const fieldsConfig = data.getFieldsConfig();\n\n return encodingFieldInfRetriever[coord](encoding, fieldsConfig);\n }\n\n static getRenderProps () {\n return [`${layerNs[1]}.${PROPS.DATA}`, ...['x', 'y', 'radius'].map(type =>\n `${groupNs}.domain.${type}`)];\n }\n\n applyStyles ({ strokeStyles, otherStyles, styleObj, elem, mountPoint, applicableStrokePos, datum }) {\n strokeStyles.forEach((type) => {\n this.addOverlayPath(\n elem.node(),\n datum,\n { type, value: styleObj[type] },\n applicableStrokePos,\n mountPoint\n );\n });\n\n this.applyElementStyles(elem, otherStyles, styleObj);\n }\n\n applyElementStyles (elem, styles, styleObj) {\n styles.forEach((type) => {\n elem.style(type, styleObj[type]);\n });\n }\n\n getBoundBoxes () {\n return null;\n }\n};\n","import {\n mix\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport { BaseLayerMixin } from './base-mixin';\nimport { BASE_LAYER } from '../enums/constants';\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @module BaseLayer\n */\nexport default class BaseLayer extends mix(SimpleLayer).with(BaseLayerMixin) {\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return BASE_LAYER;\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols,\n setStyles\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\n\nconst containsNull = (elem) => {\n const { x, y } = elem ? elem.update : {};\n if (x === null || y === null) {\n return true;\n }\n return false;\n};\n\nconst settIndexPrevOrNext = (arr, index, indexesObj) => {\n const prevContainsNull = containsNull(arr[index - 1], index - 1);\n const nextContainsNull = containsNull(arr[index + 1], index + 1);\n\n !prevContainsNull && indexesObj.prevOfNull.push(index - 1);\n !nextContainsNull && indexesObj.nextOfNull.push(index + 1);\n};\n\nconst getborderIndexes = (arr) => {\n const indexes = {\n prevOfNull: [],\n nextOfNull: []\n };\n arr.forEach((value, index) => {\n const { update } = value;\n if (update.y === null || update.x === null) {\n settIndexPrevOrNext(arr, index, indexes);\n }\n });\n return indexes;\n};\n\nconst makeStartEndPair = (arr, borderIndexes) => {\n const pairArray = [];\n const { prevOfNull, nextOfNull } = borderIndexes;\n const length = prevOfNull.length;\n if (!length) {\n return pairArray;\n }\n\n for (let i = 0; i < length; i++) {\n const pair = [];\n const prevValue = arr[prevOfNull[i]];\n const nextValue = arr[nextOfNull[i]];\n if (prevValue) {\n pair.push(prevValue);\n }\n if (nextValue) {\n pair.push(nextValue);\n }\n pairArray.push(pair);\n }\n return pairArray;\n};\n\nconst sanitizeNullConfig = (arr) => {\n const borderIndexes = getborderIndexes(arr);\n return makeStartEndPair(arr, borderIndexes);\n};\n\nconst getElementsForLine = (params) => {\n const { mount, data, className, layer, strokeStyle, linepath, transition, updateFns } = params;\n let element = makeElement(mount, 'path', data.length ? [data] : [], className, updateFns);\n element.attr('class', (d, i) => d[i].className);\n setStyles(element, strokeStyle);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n element.attr('d', linepath(data))\n .style('fill-opacity', 0);\n return element;\n};\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n const { layer, container, points, interpolate, connectNullData, className, style, transition } = context;\n const containerSelection = selectElement(container);\n const strokeStyle = layer.config().nullDataLineStyle;\n const nullDataLineClass = layer.config().nullDataLineClass;\n const mount = containerSelection.attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(filterFn);\n\n const graphicElems = layer._graphicElems;\n const updateFns = {\n update: (group, d) => {\n d.forEach((dd) => {\n graphicElems[dd.rowId] = containerSelection;\n });\n }\n };\n\n updateStyle(mount, style);\n\n const elementWithNullData = getElementsForLine({\n mount,\n data: points,\n strokeStyle: undefined,\n layer,\n linepath,\n transition,\n updateFns\n });\n const sanitizedPoints = sanitizeNullConfig(points);\n\n sanitizedPoints.map((d) => {\n if (connectNullData && d.length > 1) {\n getElementsForLine({\n mount,\n data: d,\n strokeStyle,\n className: `.${className}-${nullDataLineClass}`,\n layer,\n linepath,\n transition,\n updateFns\n });\n }\n return null;\n });\n return elementWithNullData;\n};\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n fade: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n focus: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n brushStroke: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n crossline: true,\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n },\n fillOpacity: {\n value: 0\n },\n strokeWidth: {\n value: '2px'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false,\n nullDataLineStyle: {},\n nullDataLineClass: 'null'\n};\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n InvalidAwareTypes,\n getObjProp\n} from 'muze-utils';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData,\n getBoundBoxes\n} from '../../helpers';\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport const LineLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of LineLayer.\n *\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n static formalName () {\n return 'line';\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = super.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n static shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const axes = this.axes();\n const encoding = this.config().encoding;\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const style = {\n stroke: resolvedEncodings.color,\n 'fill-opacity': encoding.fillOpacity.value,\n 'stroke-width': encoding.strokeWidth.value\n };\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style,\n rowId: d.rowId,\n source: d.source,\n data: d.dataObj,\n meta: getColorMetaInf(style)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n getTranslatedData (normalizedData, colorValFn, colorFieldIndex, axes) {\n return normalizedData.map((data, i) => {\n let color;\n const colorVal = data.find(d => d.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(data, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n return {\n data: this.translatePoints(data),\n style: this.getPathStyle(color)\n };\n });\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n\n const colorValFn = encoding.color.value;\n const translatedPoints = this.getTranslatedData(normalizedData, colorValFn, colorFieldIndex, axes);\n\n makeElement(container, 'g', translatedPoints, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n const points = dataArr.data;\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n const style = dataArr.style;\n\n this._points.push(points);\n this.getDrawFn()({\n layer: this,\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d.data[0].source[colorFieldIndex] || d.data[0].rowId);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n\n applyStyles ({ strokeStyles, otherStyles, styleObj, elem }) {\n [...otherStyles, ...strokeStyles].forEach((type) => {\n elem.style(type, styleObj[type]);\n });\n }\n\n getBoundBoxes () {\n return getBoundBoxes(this._points.flat());\n }\n};\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n fade: {\n style: {\n 'fill-opacity': 0.7\n }\n },\n focus: {\n style: {\n 'fill-opacity': 0.7\n }\n },\n brushStroke: {\n style: {\n 'fill-opacity': 0.7\n }\n }\n },\n crossline: true,\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n },\n fillOpacity: {\n value: 0.3\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n const { layer, container, points, style, transition, className, interpolate, connectNullData } = params;\n\n const graphicElems = layer._graphicElems;\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data(points.length ? [points] : []);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== undefined));\n\n mount.attr('class', className);\n\n let filteredPoints = points;\n if (connectNullData) {\n filteredPoints = filteredPoints.filter(d => d.update.y !== undefined);\n }\n const selectionEnter = selection\n .enter()\n .append('path')\n .attr('d', enterAreaPath(filteredPoints))\n .each((d) => {\n d.forEach((dd) => {\n if (dd.rowId) {\n graphicElems[dd.rowId] = mount.select('path');\n }\n });\n });\n\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function () {\n const element = selectElement(this);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport {\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport const AreaLayerMixin = superclass => class extends superclass {\n\n /** Default configuration of area layer\n *\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n let point = this._voronoi.find(x, y, searchRadius);\n let index;\n let nearestPoint = null;\n\n if (!point && config.dimValue && this._pointMap) {\n const pointArr = this._pointMap[config.dimValue[1][0]] || [];\n\n for (let i = 0, len = pointArr.length; i < len; i++) {\n const { y: pointY, y0: pointY0 } = pointArr[i].update;\n if (pointY < y && y < pointY0) {\n index = i;\n nearestPoint = pointArr[i];\n break;\n }\n }\n\n // Index is a number(0 or more)\n if (index !== undefined) {\n point = {\n index,\n data: {\n x,\n y,\n data: nearestPoint\n }\n };\n }\n }\n\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y0: dimensions.y0,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.encodingFieldsInf();\n const { x: xAxis, y: yAxis } = axes;\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const style = {\n fill: color,\n 'fill-opacity': encoding.fillOpacity.value\n };\n\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n data: d.dataObj,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta: getColorMetaInf(style)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color,\n 'fill-opacity': 0.30\n };\n }\n};\n","import { mix } from 'muze-utils';\nimport { AREA_LAYER } from '../../enums/constants';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { LineLayerMixin } from '../line/line-mixin';\nimport { AreaLayerMixin } from './area-mixin';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport default class AreaLayer extends mix(BaseLayer).with(BaseLayerMixin, LineLayerMixin, AreaLayerMixin) {\n static formalName () {\n return AREA_LAYER;\n }\n}\n\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n interaction: {\n highlight: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.1\n }, data, apply).color\n }\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n height: 100,\n width: 100,\n sort: '',\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\nexport const ArcLayerMixin = superclass => class extends superclass {\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\n }\n\n getNearestPoint (x, y, config = {}) {\n return this.getDataFromEvent(config.event);\n }\n\n getDataFromEvent (event) {\n const dataPoint = selectElement(event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf({\n fill: color\n }),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\n\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n};\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayerMixin, BaseLayer } from '../../base-layer';\nimport { ArcLayerMixin } from './arc-mixin';\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\n */\nexport default class ArcLayer extends mix(BaseLayer).with(BaseLayerMixin, ArcLayerMixin) {\n static formalName () {\n return 'arc';\n }\n}\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { LineLayerMixin } from './line-mixin';\nimport { LINE_LAYER } from '../../enums/constants';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport default class LineLayer extends mix(BaseLayer).with(BaseLayerMixin, LineLayerMixin) {\n static formalName () {\n return LINE_LAYER;\n }\n}\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n graphicElems[dataObj.rowId] = element;\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: -15\n }, data, apply).color\n }\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n }\n },\n crossline: false,\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport {\n positionPoints,\n getIndividualClassName,\n resolveEncodingValues,\n getColorMetaInf,\n toCartesianCoordinates,\n getDataFromEvent\n} from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: { ...{ layerId: layerInst.id() },\n ...getColorMetaInf({\n fill: resolvedVal.color\n }) },\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d.source;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const color = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: { ...{ layerId: layerInst.id() },\n ...getColorMetaInf({\n fill: resolvedEncodings.color\n }) },\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport const TextLayerMixin = superclass => class extends superclass {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n getPointTranslator (val) {\n return pointTranslators[val];\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\n }\n });\n return this;\n }\n\n getNearestPoint (x, y, { event }) {\n if (!this.data()) {\n return null;\n }\n return this.getDataFromEvent(event);\n }\n\n getDataFromEvent (event) {\n return getDataFromEvent(this, event);\n }\n};\n\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { TextLayerMixin } from './text-mixin';\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport default class TextLayer extends mix(BaseLayer).with(BaseLayerMixin, TextLayerMixin) {\n static formalName () {\n return 'text';\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol,\n setStyles\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, groupElement) {\n const { shape, size, update, style } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n makeElement(groupElement, () => newShape, [1]);\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n const pathEl = makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n setStyles(pathEl, style);\n } else {\n d.shape = 'circle';\n createShape(d, groupElement);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\n};\n\nexport default drawSymbols;\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: {\n className: 'highlight-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n // fill: 'red'\n },\n strokePosition: 'center'\n },\n focusStroke: {\n className: 'focus-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n commonDoubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n brushStroke: {\n className: 'brush-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n // fill: 'blue'\n },\n strokePosition: 'outside'\n },\n doubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n innerPadding: 0.1,\n nearestPointThreshold: 5,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: {},\n stroke: {\n value: '#000'\n },\n 'stroke-width': {\n value: 0\n },\n fill: {},\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n 'stroke-opacity': {\n value: 1\n },\n 'fill-opacity': {\n value: 0.5\n },\n strokePosition: {\n value: 'center'\n },\n interaction: {\n anchors: 'highlight',\n 'persistent-anchors': 'focusStroke',\n 'brush-anchors': 'brushStroke'\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import { FieldType, COORD_TYPES } from 'muze-utils';\nimport { ENCODING } from '../../enums/constants';\nimport {\n getIndividualClassName,\n resolveEncodingValues,\n getColorMetaInf,\n positionPoints\n} from '../../helpers';\n\nexport const prepareDrawingInf = ({ data, datum, i, layerInst, xPx, yPx }) => {\n const axes = layerInst.axes();\n const { shape: shapeAxis, color: colorAxis, size: sizeAxis } = axes;\n let shape = shapeAxis.getShape(datum.shape);\n let size = sizeAxis.getSize(datum.size);\n let color = colorAxis.getColor(datum.color);\n const layerEncoding = layerInst.config().encoding;\n const stroke = layerEncoding.stroke.value;\n const strokeWidth = layerEncoding['stroke-width'].value;\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n stroke,\n 'stroke-width': strokeWidth,\n size,\n shape,\n data: datum\n },\n data: datum\n }, i, data, layerInst);\n const { rowId, source } = datum;\n ({ shape, size, color } = resolvedEncodings);\n const style = {\n fill: color,\n stroke: resolvedEncodings.stroke,\n 'stroke-width': resolvedEncodings['stroke-width']\n };\n const { x, y } = resolvedEncodings;\n const pos = { x, y };\n return {\n enter: pos,\n update: pos,\n shape,\n source,\n rowId,\n style,\n data: datum.dataObj,\n meta: Object.assign({\n layerId: layerInst.id()\n }, getColorMetaInf(style, {\n strokePosition: layerEncoding.strokePosition.value\n })),\n size\n };\n};\n\nexport const pointTranslators = {\n [COORD_TYPES.CARTESIAN]: (data, config, layerInst) => {\n let points = [];\n const encoding = layerInst.config().encoding;\n const axes = layerInst.axes();\n const { x, y } = encoding;\n const xField = x.field;\n const yField = y.field;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = prepareDrawingInf({\n data,\n datum: d,\n i,\n layerInst,\n xPx,\n yPx\n });\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\nexport const getStrokeWidthByPosition = (position, radius) => {\n const strokeWidthWithOffsetMap = {\n center: -radius,\n inside: -(radius * Math.PI),\n outside: +(radius * Math.PI)\n };\n return strokeWidthWithOffsetMap[position];\n};\n","import {\n Voronoi,\n Scales,\n makeElement,\n getQualifiedClassName,\n selectElement,\n appendElement,\n getSymbol,\n pointWithinCircle\n} from 'muze-utils';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport {\n attachDataToVoronoi,\n getPlotMeasurement,\n getMarkId,\n getBoundBoxes\n} from '../../helpers';\nimport './styles.scss';\nimport { pointTranslators, getStrokeWidthByPosition } from './helper';\n\nexport const PointLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n this._overlayPath = {};\n this.formattedUids = [];\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = super.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n this._graphicElems = {};\n\n const schema = this.data().getSchema();\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size || 0));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n this.attachDataToVoronoi(this._points);\n return this;\n }\n\n attachDataToVoronoi (points) {\n attachDataToVoronoi(this._voronoi, points);\n }\n\n generateDataPoints (normalizedData, keys) {\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const nearestPointThreshold = this.config().nearestPointThreshold;\n const distanceLimit = Math.max(this._maxSize, nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const insideShape = pointWithinCircle({\n x: dimensions.x,\n y: dimensions.y,\n r: radius + nearestPointThreshold\n }, { x, y });\n if (insideShape) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n }\n return null;\n }\n\n addOverlayPath (refElement, data, style, strokePosition) {\n const container = refElement.parentElement;\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n pathElement = makeElement(container, 'path', [data.update], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n if (style.type === 'stroke-width') {\n const position = strokePosition;\n // get radius as per stroke position\n let radius = Math.sqrt(data.size / Math.PI);\n radius = getStrokeWidthByPosition(position, radius);\n\n const size = data.size + radius;\n if (typeof data.shape === 'string') {\n const path = getSymbol(data.shape).size(size);\n pathElement.attr('d', path);\n }\n }\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(refElement, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n }\n }\n\n getBoundBoxes () {\n return getBoundBoxes(this._points.flat());\n }\n\n applyElementStyles (elem, styles, styleObj) {\n styles.forEach((type) => {\n elem.select('path').style(type, styleObj[type]);\n });\n }\n};\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { POINT_LAYER } from '../../enums/constants';\nimport { PointLayerMixin } from './point-mixin';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\n */\nexport default class PointLayer extends mix(BaseLayer).with(PointLayerMixin) {\n static formalName () {\n return POINT_LAYER;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { layer, points, container, keyFn, className } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) {\n barEnterFn(elem, d);\n },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\n };\n\n return makeElement(container, 'g', points, null, {\n update: (group, d) => {\n makeElement(group.node(), 'rect', data => [data], null, updateFns, keyFn);\n group.attr('class', `${className}-${d.rowId}`);\n group.classed(d.className, true);\n }\n }, keyFn);\n};\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: {\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'center'\n },\n focusStroke: {\n className: 'focus-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n brushStroke: {\n className: 'brush-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n doubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n commonDoubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.3\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {},\n stroke: {\n value: '#000'\n },\n strokeWidth: {\n value: '0px'\n },\n strokePosition: {\n value: 'center'\n }\n }\n};\n","import { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport {\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === MeasureSubtype.CONTINUOUS || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n *\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\nexport const strokeWidthPositionMap = ({ width, position }) => {\n const offset = width / 2;\n const strokeWidthWithOffsetMap = {\n center: {\n M: { x: 0, y: 0 },\n L1: { x: 0, y: 0 },\n L2: { x: 0, y: 0 },\n L3: { x: 0, y: 0 }\n },\n inside: {\n M: { x: +offset, y: +offset },\n L1: { x: -offset, y: +offset },\n L2: { x: -offset, y: -offset },\n L3: { x: +offset, y: -offset }\n },\n outside: {\n M: { x: -offset, y: -offset },\n L1: { x: +offset, y: -offset },\n L2: { x: +offset, y: +offset },\n L3: { x: -offset, y: +offset }\n }\n };\n return strokeWidthWithOffsetMap[position];\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.measurement();\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n // const layerEncoding = layerInst.config().encoding;\n\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n const style = {\n fill: color,\n stroke: encoding.stroke.value,\n 'stroke-width': encoding.strokeWidth.value\n };\n const conf = {\n strokePosition: encoding.strokePosition.value\n };\n\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n data: d.dataObj,\n style,\n meta: Object.assign({\n layerId: context.id()\n }, getColorMetaInf(style, conf))\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n FieldType,\n Scales,\n getObjProp,\n makeElement,\n appendElement\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn, getDataFromEvent } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints, strokeWidthPositionMap } from './bar-helper';\n\nconst { MEASURE } = FieldType;\n\nexport const BarLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = Scales.band();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n this._overlayPath = {};\n }\n\n elemType () {\n return 'rect';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n this._graphicElems = {};\n const paths = Object.keys(this._overlayPath);\n paths.forEach(path => this._overlayPath[path].remove());\n this._overlayPath = {};\n\n const barContainer = makeElement(containerSelection, 'g', [1], 'muze-layer-bars', {}, null);\n makeElement(containerSelection, 'g', [1], 'muze-overlay-paths', {}, null);\n createElements({\n data: this._points,\n container: barContainer.node(),\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y, { event }) {\n if (!this.data()) {\n return null;\n }\n return this.getDataFromEvent(event);\n }\n\n getDataFromEvent (event) {\n return getDataFromEvent(this, event);\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n\n hasPlotSpan () {\n return true;\n }\n\n addOverlayPath (refElement, data, style, strokePosition, mountPoint) {\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n const pathGroup = makeElement(mountPoint, 'g', [1], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement = makeElement(pathGroup, 'path', [data], null, {}, d => `${d.update.x} ${data.rowId}`);\n\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n if (style.type === 'stroke-width') {\n const { L1, L2, L3, M } = strokeWidthPositionMap({\n width: parseInt(style.value, 10),\n position: strokePosition\n });\n\n pathElement.attr('d', d => `M ${d.update.x + M.x} ${d.update.y + M.y}\n L ${d.update.x + d.update.width + L1.x} ${d.update.y + L1.y}\n L ${d.update.x + d.update.width + L2.x} ${d.update.y + d.update.height + L2.y}\n L${d.update.x + L3.x} ${d.update.y + d.update.height + L3.y} Z`);\n }\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(mountPoint, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n\n // Apply the path shape get the correct path position\n currentPath.attr('d', d => `M ${d.update.x} ${d.update.y}\n L ${d.update.x + d.update.width} ${d.update.y}\n L ${d.update.x + d.update.width} ${d.update.y + d.update.height}\n L${d.update.x} ${d.update.y + d.update.height} Z`);\n }\n }\n\n getBoundBoxes () {\n const points = this._points.flat();\n\n return points.map((point) => {\n const { x, y, width, height } = point.update;\n const data = point.data;\n return {\n minX: x,\n maxX: x + width,\n minY: y,\n maxY: y + height,\n data\n };\n });\n }\n};\n\n","import { mix } from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { BAR_LAYER } from '../../enums/constants';\nimport { BarLayerMixin } from './bar-mixin';\nimport { BaseLayerMixin } from '../../base-layer/base-mixin';\nimport './styles.scss';\n\n/**\n * Bar layer creates rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\n */\nexport default class BarLayer extends mix(BaseLayer).with(BaseLayerMixin, BarLayerMixin) {\n static formalName () {\n return BAR_LAYER;\n }\n}\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n nearestPointThreshold: 10,\n interaction: {\n fade: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n }\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n\n","import {\n selectElement,\n Symbols,\n pathInterpolators,\n makeElement\n} from 'muze-utils';\n\nconst line = Symbols.line;\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className, interpolate, layer, transition } = params;\n const { disabled } = transition;\n\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && group.attr(attr[0], attr[1])));\n },\n update: (group, d) => {\n const pathElem = makeElement(group, 'path', [1]);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n group.attr('class', className);\n group.classed(d.className, true);\n\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n\n d.className && group.classed(d.className, true);\n pathElem.attr('d', linepath([[update.x, update.y], [x0, y0]]));\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n Object.entries(style).forEach(styleObj => group.style(styleObj[0], styleObj[1]));\n },\n exit: (exitGroup) => {\n exitGroup.remove();\n }\n }, keyFn);\n};\n","import { FieldType, makeElement, appendElement } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates, attachDataToVoronoi } from '../../helpers';\nimport { strokeWidthPositionMap } from './helper';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedVal.color\n };\n\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style,\n source: d.source,\n rowId: d.rowId,\n data: d,\n meta: { ...{ layerId: layerInst.id() }, ...getColorMetaInf(style) }\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { x: xAxis, y: yAxis } = axes;\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d.source;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedEncodings.color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style,\n source: row,\n rowId: d.rowId,\n data: d.dataObj,\n meta: { ...{ layerId: layerInst.id() }, ...getColorMetaInf(style) }\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport const TickLayerMixin = superclass => class extends superclass {\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'tick';\n }\n\n static drawFn () {\n return drawTicks;\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n attachDataToVoronoi (points) {\n attachDataToVoronoi(this._voronoi, points, (d) => {\n const { x, x0, y, y0 } = d.update;\n\n return {\n x: x + (x0 - x) / 2,\n y: y + (y0 - y) / 2\n };\n });\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n addOverlayPath (refElement, data, style, strokePosition) {\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n pathElement = makeElement(refElement, 'path', [data.update], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n let offsetM = { x: 0, y: 0 };\n let offsetL = { x: 0, y: 0 };\n\n if (style.type === 'stroke-width') {\n const { L, M } = strokeWidthPositionMap({\n width: parseInt(style.value, 10),\n position: strokePosition\n });\n offsetM = M;\n offsetL = L;\n }\n\n pathElement.attr('d', (d) => {\n if (d.update) {\n return `M ${d.update.x + offsetM.x} ${d.update.y + offsetM.y}\n L ${d.update.x0 + offsetL.x} ${d.update.y0 + offsetL.y}`;\n }\n return `M ${d.x + offsetM.x} ${d.y + offsetM.y}\n L ${d.x0 + offsetL.x} ${d.y0 + offsetL.y}`;\n });\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(refElement, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n }\n }\n};\n","export const strokeWidthPositionMap = ({ width, position = 'center' }) => {\n const offset = width ? width / 2 : 1;\n const strokeWidthWithOffsetMap = {\n center: {\n M: { x: 0, y: 0 },\n L: { x: 0, y: 0 }\n },\n inside: {\n M: { x: +offset, y: +offset },\n L: { x: -offset, y: +offset }\n },\n outside: {\n M: { x: -offset, y: -offset },\n L: { x: +offset, y: -offset }\n }\n };\n return strokeWidthWithOffsetMap[position];\n};\n","import { mix } from 'muze-utils';\nimport { PointLayerMixin } from '../point';\nimport { BaseLayerMixin, BaseLayer } from '../../base-layer';\nimport { TickLayerMixin } from './tick-mixin';\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends mix(BaseLayer).with(BaseLayerMixin, PointLayerMixin, TickLayerMixin) {\n static formalName () {\n return 'tick';\n }\n}\n","export const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef, ...params) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\n */\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import layerFactory from './layer-factory';\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default (layers = DEFAULT_LAYERS) => {\n const reg = Object.assign({}, layers);\n const regObj = {\n register: (def) => {\n const key = def.formalName();\n\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import { AreaLayer, AreaLayerMixin } from './layers/area';\nimport { ArcLayer, ArcLayerMixin } from './layers/arc';\nimport { LineLayer, LineLayerMixin } from './layers/line';\nimport { TextLayer, TextLayerMixin } from './layers/text';\nimport { PointLayer, PointLayerMixin } from './layers/point';\nimport { BarLayer, BarLayerMixin } from './layers/bar';\nimport { TickLayer, TickLayerMixin } from './layers/tick';\nimport { SimpleLayer } from './simple-layer';\nimport { BaseLayer, BaseLayerMixin } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport layerFactory from './layer-factory';\nimport layerRegistry from './layer-registry';\nimport { ENCODING } from './enums/constants';\nimport * as pointLayerHelpers from './layers/point/helper';\nimport * as commonHelpers from './helpers';\nimport * as enums from './enums';\n\nconst helpers = Object.assign(commonHelpers, {\n pointLayerHelpers\n});\n\nconst layerMixins = {\n BarLayerMixin,\n BaseLayerMixin,\n LineLayerMixin,\n AreaLayerMixin,\n PointLayerMixin,\n TextLayerMixin,\n TickLayerMixin,\n ArcLayerMixin\n};\n\nexport {\n BaseLayer,\n BarLayer,\n LineLayer,\n AreaLayer,\n PointLayer,\n ArcLayer,\n TextLayer,\n TickLayer,\n layerFactory,\n SimpleLayer,\n layerRegistry,\n LAYER_TYPES,\n ENCODING,\n helpers,\n enums,\n layerMixins\n};\n","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue,\n RTree\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) :\n (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n [X, Y, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n // const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = layers.sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]).filter(d => d !== undefined);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = getNearestValue(filterData, key);\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const isXandYMeasures = (context) => {\n const { x: xFields, y: yFields } = context.fields();\n const [xMeasures, yMeasures] = [xFields, yFields].map(fields => fields\n .every(field => field.type() === FieldType.MEASURE));\n return xMeasures && yMeasures;\n};\n\nconst getKey = (arr, row) => {\n let key = row[arr[0]];\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${row[arr[i]]}`;\n }\n return key;\n};\n\nexport const getValuesMap = (model, context) => {\n const idValuesMap = {};\n const valuesIdMap = {};\n const { data: dataArr, schema, uids } = model.getData();\n const fieldsConfig = model.getFieldsConfig();\n const fieldIndices = isXandYMeasures(context) ? schema.map((d, i) => i) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldsConfig[d].index);\n dataArr.forEach((row, i) => {\n const key = getKey(fieldIndices, row);\n valuesIdMap[key] = uids[i];\n idValuesMap[uids[i]] = row;\n });\n return { valuesIdMap, idValuesMap, fieldsConfig };\n};\n\nexport const getSelectionRejectionModel = (model, propModel, measures, propValuesMap) => {\n let rejectionModel;\n const { data, schema } = propModel.getData();\n const entryRowIds = [];\n const exitRowIds = [];\n\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n const { valuesIdMap } = propValuesMap;\n\n const rowIdsObj = {};\n const filteredSchema = measures ? schema.map((d, idx) => idx) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldMap[d].index);\n data.forEach((row) => {\n const key = getKey(filteredSchema, row);\n const id = valuesIdMap[key];\n if (key in valuesIdMap) {\n entryRowIds.push(id);\n rowIdsObj[id] = 1;\n }\n });\n rejectionModel = model.select((fields, i) => {\n if (!rowIdsObj[i]) {\n exitRowIds.push(i);\n return true;\n }\n return false;\n }, {\n saveChild: false\n });\n } else {\n rejectionModel = propModel;\n }\n\n return {\n model: [propModel, rejectionModel],\n entryRowIds,\n exitRowIds\n };\n};\n\nexport const createRTree = (context) => {\n const elements = [].concat(...context.layers().filter(layer => layer.config().interactive !== false)\n .map((layer) => {\n const points = layer.getBoundBoxes();\n return points;\n })).flat().filter(d => d !== null);\n\n const rtree = new RTree();\n rtree.load(elements);\n return rtree;\n};\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import SelectionSet from './selection-set';\n\nexport default SelectionSet;\n","import {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor ({ keys, fields }, _volatile) {\n this.completeSet = keys;\n this._set = {};\n this._uidMap = {};\n this._measureNames = {};\n this._dimVals = {};\n\n for (const key in keys) {\n this._set[key] = SELECTION_NULL;\n this._uidMap[key] = keys[key].uid;\n this._measureNames[key] = keys[key].measureNames;\n this._dimVals[key] = keys[key].dims;\n }\n\n this._volatile = _volatile;\n this._completeSetCount = Object.keys(keys).length;\n this._lockedSelection = {};\n this._fieldIndices = fields.reduce((acc, v, i) => {\n acc[v] = i;\n return acc;\n }, {});\n this._fields = fields;\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n if (i in set) {\n set[i] = SELECTION_NEW_ENTRY;\n }\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n if (i in set) {\n set[i] = SELECTION_OLD_ENTRY;\n }\n });\n\n return this;\n }\n\n /**\n * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n i in set && (set[i] = SELECTION_NEW_EXIT);\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets (config = {}) {\n const set = this._set;\n const uidMap = this._uidMap;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n mergedEnter: [],\n mergedExit: [],\n completeSet: []\n };\n const measureNames = this._measureNames;\n const dimVals = this._dimVals;\n const { keepDims = false, dimensions = this._fields } = config;\n const fieldIndices = this._fieldIndices;\n\n for (const key in set) {\n let val;\n const measureNamesArr = measureNames[key] || [];\n let dims = dimVals[key];\n\n if (keepDims) {\n if (measureNamesArr.length) {\n dims = dimensions.map(d => dims[fieldIndices[d]]);\n val = dims.length ? [...dims, `${measureNamesArr}`] : [uidMap[key], `${measureNamesArr}`];\n } else {\n val = dims.length ? [...dims] : [uidMap[key]];\n }\n } else {\n val = measureNamesArr.length ? [uidMap[key], measureNames[key], dims] : [uidMap[key]];\n }\n\n if (set[key] > 0) {\n [SELECTION_OLD_ENTRY, SELECTION_NEW_ENTRY].forEach((v, i) => {\n if (set[key] === v) {\n retObj.entrySet[i].push(val);\n }\n });\n if (set[key] === SELECTION_OLD_ENTRY || set[key] === SELECTION_NEW_ENTRY) {\n retObj.mergedEnter.push(val);\n }\n } else if (set[key] < 0) {\n [SELECTION_OLD_EXIT, SELECTION_NEW_EXIT].forEach((v, i) => {\n if (set[key] === v) {\n retObj.exitSet[i].push(val);\n }\n });\n if (set[key] === SELECTION_OLD_EXIT || set[key] === SELECTION_NEW_EXIT) {\n retObj.mergedExit.push(val);\n }\n }\n retObj.completeSet.push(val);\n }\n\n return retObj;\n }\n\n /**\n * Resets an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n i in set && (set[i] = SELECTION_NULL);\n });\n } else {\n for (const key in set) {\n set[key] = SELECTION_NULL;\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n *\n * @public\n *\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\n */\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldEntry () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_ENTRY && updateSet.push(key);\n }\n return updateSet;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n * @return {Array.} Array of unique ids\n */\n getOldExit () {\n const set = this._set;\n const updateSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_OLD_EXIT && updateSet.push(key);\n }\n\n return updateSet;\n }\n\n /**\n * Gets the array of ids which are in the exit set.\n *\n * @public\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\n */\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Swaps the add set and remove set in the selection set.\n * @return {SelectionSet} Instance of selection set.\n */\n toggle () {\n const set = this._set;\n\n for (const key in set) {\n if (set[key] === SELECTION_NEW_ENTRY) {\n set[key] = SELECTION_NEW_EXIT;\n } else if (set[key] === SELECTION_NEW_EXIT) {\n set[key] = SELECTION_NEW_ENTRY;\n } else if (set[key] === SELECTION_OLD_ENTRY) {\n set[key] = SELECTION_OLD_EXIT;\n } else {\n set[key] = SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getMergedEntrySet (raw) {\n const set = this._set;\n const mergedEnter = [];\n const uidMap = this._uidMap;\n const measureNames = this._measureNames;\n const dimVals = this._dimVals;\n\n for (const key in set) {\n const val = raw ? [...dimVals[key], `${measureNames[key]}`] :\n [uidMap[key], measureNames[key]];\n if (set[key] === SELECTION_NEW_ENTRY || set[key] === SELECTION_OLD_ENTRY) {\n mergedEnter.push(val);\n }\n }\n return mergedEnter;\n }\n\n getMergedExitSet (raw) {\n const set = this._set;\n const mergedExit = [];\n const uidMap = this._uidMap;\n const measureNames = this._measureNames;\n const dimVals = this._dimVals;\n\n for (const key in set) {\n const val = raw ? [...dimVals[key], `${measureNames[key]}`] :\n [uidMap[key], measureNames[key]];\n if (set[key] === SELECTION_NEW_EXIT || set[key] === SELECTION_OLD_EXIT) {\n mergedExit.push(val);\n }\n }\n return mergedExit;\n }\n}\n\nexport default SelectionSet;\n","import { clone, unique, intersect } from 'muze-utils';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const target = SideEffect.target();\n if (target === context.target() || target === 'all') {\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n }\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.fields.map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\nexport const unionSets = (firebolt, behaviours) => {\n let combinedSet = null;\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n const uidSet = {\n mergedEnter: [],\n mergedExit: []\n };\n\n behaviours.forEach((behaviour) => {\n const entryExitSet = firebolt._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet || {}, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const { model, uids } = entryExitSet[type];\n let existingModel = models[type];\n\n if (!existingModel) {\n existingModel = models[type] = model;\n uidSet[type] = uids;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n uidSet[type] = unique([...uidSet[type], ...uids]);\n models[type] = model.isEmpty() ? existingModel : existingModel.union(model);\n } else {\n existingModel = model;\n uidSet[type] = uids;\n }\n combinedSet[type].uids = uidSet[type];\n combinedSet[type].model = models[type];\n });\n }\n });\n\n return combinedSet;\n};\n\nexport const intersectSets = (firebolt, behaviours) => {\n let combinedSet = null;\n const models = {\n mergedEnter: null,\n mergedExit: null\n };\n const uidSet = {\n mergedEnter: [],\n mergedExit: []\n };\n\n behaviours.forEach((behaviour) => {\n const entryExitSet = firebolt._entryExitSet[behaviour];\n if (entryExitSet) {\n combinedSet = Object.assign(combinedSet || {}, clone(entryExitSet));\n ['mergedEnter', 'mergedExit'].forEach((type) => {\n const { model, uids } = entryExitSet[type];\n let existingModel = models[type];\n\n if (!existingModel) {\n existingModel = models[type] = model;\n uidSet[type] = uids;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n const commonSet = intersect(uidSet[type], uids, [id => id[0], id => id[0]]);\n uidSet[type] = [...commonSet];\n models[type] = model.isEmpty() ? existingModel : existingModel.union(model);\n }\n combinedSet[type].uids = unique(uidSet[type]);\n combinedSet[type].model = models[type];\n });\n }\n });\n\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\n selectElement,\n isSimpleObject,\n getDataModelFromRange,\n ReservedFields,\n FieldType,\n defaultValue\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n unionSets,\n getSideEffects,\n setSideEffectConfig\n} from './helper';\n\nconst cloneObj = (behaviourEffectMap) => {\n const keys = Object.keys(behaviourEffectMap);\n\n return keys.reduce((acc, key) => {\n const value = behaviourEffectMap[key];\n const cloned = value.map((d) => {\n let clonedVal = d;\n if (isSimpleObject(d)) {\n clonedVal = mergeRecursive({}, d);\n }\n return clonedVal;\n });\n acc[key] = cloned;\n return acc;\n }, {});\n};\n\nconst getKeysFromCriteria = (criteria, firebolt) => {\n if (criteria) {\n const data = firebolt.data();\n const { dimensionsMap, dimensions: dimArr } = firebolt._metaData;\n\n let values = [];\n if (isSimpleObject(criteria)) {\n const dm = getDataModelFromRange(data, criteria);\n const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(dm.getFieldsConfig()).length,\n def: {\n name: ReservedFields.ROW_ID,\n type: FieldType.DIMENSION\n }\n }\n });\n dm.getData({ withUid: true }).data.forEach((row) => {\n const dimKey = `${dimArr.map(d => row[fieldsConfig[d].index])}`;\n const measures = criteria[ReservedFields.MEASURE_NAMES] || dimensionsMap[dimKey] || [[]];\n measures.forEach((measureArr) => {\n values.push(`${[dimKey, ...measureArr]}`);\n });\n });\n } else {\n values = criteria.slice(1, criteria.length).map(d => `${d}`);\n }\n return values;\n }\n return null;\n};\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._sourceSelectionSet = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sideEffectPolicies = {};\n this._propagationBehaviourMap = {};\n this._behaviourPolicies = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._handlers = {};\n this._payloadGenerators = {};\n this._payloads = {};\n\n this.mapSideEffects(cloneObj(behaviourEffectMap));\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n effectNames = effectNames.map((effect) => {\n if (!isSimpleObject(effect)) {\n return {\n name: effect\n };\n }\n return effect;\n });\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n let combinedSet = this.mergeSelectionSets(behaviours);\n effects.forEach((effect) => {\n let options = {};\n let name;\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options || {};\n } else {\n name = effect;\n }\n const set = options.set;\n if (set) {\n combinedSet = this.mergeSelectionSets(set);\n }\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance && sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [combinedSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, combinedSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n const { setTransform } = options;\n selectionSet = setTransform ? setTransform(selectionSet, payload, sideEffect) : selectionSet;\n sideEffect.apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n payload = this.sanitizePayload(payload);\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n this._payloads[behaviour] = payload;\n\n if (action) {\n action.dispatch(payload);\n this._entryExitSet[behaviour] = action.entryExitSet();\n const shouldApplySideEffects = this.shouldApplySideEffects(propagationInfo);\n\n if (propagate) {\n this.propagate(behaviour, payload, action.propagationIdentifiers(), { sideEffects });\n }\n\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, this.getEntryExitSet(behaviour), payload);\n }\n }\n\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value, key = 'default') {\n const behaviourConditions = this._behaviourPolicies[behaviour] || (this._behaviourPolicies[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sideEffectPolicies[sideEffect] ||\n (this._sideEffectPolicies[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sideEffectPolicies[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._behaviourPolicies[behaviour][key];\n return this;\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n this.mapActionsAndBehaviour(key);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel, handler = this.onDataModelPropagation()) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', handler);\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n this._entryExitSet[key] = null;\n }\n }\n\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n target () {\n return 'all';\n }\n\n registerPhysicalActions (actions, context = this) {\n const initedActions = initializePhysicalActions(context, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n this.registerPhysicalActionHandlers();\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (!nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n return {\n model: propagationInf.data ? propagationInf.data : null,\n uids: criteria ? getKeysFromCriteria(criteria, this) : null\n };\n }\n\n getSelectionSets (action) {\n const sourceId = this.id();\n const propagationInf = this._propagationInf || {};\n const propagationSource = propagationInf.sourceId;\n let applicableSelectionSets = [];\n if (propagationSource !== sourceId) {\n applicableSelectionSets = [this._volatileSelectionSet[action]];\n }\n\n if (propagationSource) {\n applicableSelectionSets.push(this.selectionSet()[action]);\n }\n return applicableSelectionSets;\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n\n mergeSelectionSets (behaviours) {\n return unionSets(this, behaviours);\n }\n\n data () {\n return this.context.data();\n }\n\n triggerPhysicalAction (event, payload) {\n const handlers = this._handlers[event] || [];\n const genericHandlers = this._handlers['*'];\n\n const allHandlers = [...Object.values(handlers), ...Object.values(genericHandlers)];\n allHandlers.forEach((fn) => {\n fn(event, payload);\n });\n\n return this;\n }\n\n onPhysicalAction (event, fn, namespace) {\n !this._handlers[event] && (this._handlers[event] = {});\n this._handlers[event][namespace] = fn;\n\n return this;\n }\n\n registerPhysicalActionHandlers () {\n this.onPhysicalAction('*', (event, payload) => {\n const { behaviours } = this._actionBehaviourMap[event];\n behaviours.forEach(beh => this.dispatchBehaviour(beh, payload));\n });\n }\n\n id () {\n return this.context.id();\n }\n\n getRangeFromIdentifiers (...params) {\n return this.context.getRangeFromIdentifiers(...params);\n }\n\n sanitizePayload (payload) {\n return payload;\n }\n\n payloadGenerators (...params) {\n if (params.length) {\n Object.assign(this._payloadGenerators, params[0]);\n }\n return this._payloadGenerators;\n }\n\n getPayloadGeneratorFor (action) {\n const defaultFn = this._payloadGenerators.__default;\n const fn = this._payloadGenerators[action];\n\n return defaultValue(fn, defaultFn);\n }\n\n getPayload (action) {\n return this._payloads[action];\n }\n\n actions () {\n return this._actions;\n }\n}\n","import {\n isSimpleObject,\n DimensionSubtype,\n partition,\n ReservedFields,\n retrieveNearestGroupByReducers\n} from 'muze-utils';\nimport { getMergedSet, getSourceFields } from '../../helper';\n\nexport const getIdentifiersFromSet = (set, context, { fields }) => {\n const data = [[]];\n\n if (fields.length) {\n data[0] = fields;\n set.forEach(id => data.push(id));\n }\n return data;\n};\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\n */\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSets = firebolt.getSelectionSets(formalName);\n const {\n model: filteredDataModel,\n uids\n } = this.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n this._payload = payload;\n\n selectionSets.forEach((selectionSet) => {\n this.setSelectionSet(uids, selectionSet, {\n filteredDataModel,\n payload\n });\n\n selectionSet._volatile && this.propagationIdentifiers(selectionSet, payload);\n this.entryExitSet(selectionSet, filteredDataModel, payload);\n });\n }\n\n getAddSetFromCriteria (...params) {\n return this.firebolt.getAddSetFromCriteria(...params);\n }\n\n /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\n */\n setSelectionSet () {\n return this;\n }\n\n entryExitSet (...params) {\n if (params.length) {\n const [selectionSet, filteredDataModel, payload] = params;\n const {\n entrySet,\n exitSet,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n\n this._entryExitSet = {\n entrySet: [this.getSetInfo('oldEntry', entrySet[0], filteredDataModel),\n this.getSetInfo('newEntry', entrySet[1], filteredDataModel)],\n exitSet: [this.getSetInfo('oldEntry', exitSet[0], filteredDataModel),\n this.getSetInfo('newExit', exitSet[1], filteredDataModel)],\n mergedEnter: this.getSetInfo('mergedEnter', getMergedSet(entrySet), filteredDataModel,\n selectionSet._fields),\n mergedExit: this.getSetInfo('mergedExit', getMergedSet(exitSet), filteredDataModel,\n selectionSet._fields),\n completeSet: this.getSetInfo('complete', completeSet, filteredDataModel, selectionSet._fields),\n fields: getSourceFields(propagationInf, payload.criteria)\n };\n\n return this;\n }\n return this._entryExitSet;\n }\n\n getSetInfo (type, set, filteredDataModel, setFields) {\n let model = null;\n const data = this.firebolt.data();\n\n if (type === 'mergedEnter') {\n model = filteredDataModel || null;\n } else if (type === 'mergedExit') {\n if (filteredDataModel) {\n const setKeys = new Set(set.map(d => d[0]));\n model = data.select((fields, i) => setKeys.has(setFields.map(field =>\n (field === ReservedFields.ROW_ID ? i : fields[field].value))), {\n saveChild: false\n });\n }\n model = filteredDataModel || null;\n }\n const aggFns = retrieveNearestGroupByReducers(model);\n\n return {\n uids: set,\n length: set.length,\n model,\n fields: setFields,\n aggFns\n };\n }\n\n propagationIdentifiers (...params) {\n if (params.length) {\n let propData = null;\n const [selectionSet, payload] = params;\n const fieldsConfig = this.firebolt.data().getFieldsConfig();\n const { criteria } = payload;\n const propagationFields = this._propagationFields;\n\n if (selectionSet.resetted() || criteria === null) {\n propData = null;\n } else if (isSimpleObject(criteria)) {\n const fields = Object.keys(criteria);\n const [, otherFields] =\n partition(fields, (d => (fieldsConfig[d] ? fieldsConfig[d].def.subtype ===\n DimensionSubtype.CATEGORICAL : d === ReservedFields.MEASURE_NAMES)));\n const allFields = selectionSet._fields.filter(d => d === ReservedFields.ROW_ID ||\n fieldsConfig[d].def.subtype ===\n DimensionSubtype.CATEGORICAL\n );\n const { mergedEnter } = selectionSet.getSets({ keepDims: true, dimensions: allFields });\n propData = {\n fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : {\n name: d\n })),\n range: this.firebolt.getRangeFromIdentifiers({\n criteria,\n entrySet: mergedEnter,\n fields: otherFields\n }),\n identifiers: [[...allFields, ReservedFields.MEASURE_NAMES], ...mergedEnter]\n };\n } else {\n const { mergedEnter } = selectionSet.getSets({ keepDims: true,\n dimensions: propagationFields });\n const fields = propagationFields ? [...propagationFields, ReservedFields.MEASURE_NAMES] :\n criteria[0];\n\n propData = {\n fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : {\n name: d\n })),\n identifiers: [fields, ...mergedEnter]\n };\n }\n this._propagationIdentifiers = propData;\n return this;\n }\n return this._propagationIdentifiers;\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n propagateWith (...params) {\n this._propagationFields = params[0];\n\n return this;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keepDims: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.sourceId) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keepDims: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\nimport { SELECTION } from '../..';\nimport { getMergedSet } from '../../helper';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.sourceId) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keepDims: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets({ keepDims: true });\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n\n","import { COORD_TYPES } from 'muze-utils';\n\nconst dragCriteriaRetriever = {\n [COORD_TYPES.CARTESIAN]: (firebolt, sourceInfo, { startPos, endPos }) => {\n if (startPos.x === endPos.x && startPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n const ranges = firebolt.context.getRangeFromPositions({\n startPos,\n endPos\n });\n const dimensions = {};\n dimensions.x = [startPos.x, endPos.x];\n dimensions.y = [startPos.y, endPos.y];\n return {\n criteria: ranges,\n dimensions\n };\n },\n [COORD_TYPES.POLAR]: () => ({\n criteria: null\n })\n};\n\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (firebolt, config) => {\n const context = firebolt.context;\n const sourceInfo = context.getSourceInfo();\n const coordType = context.coord();\n return dragCriteriaRetriever[coordType](firebolt, sourceInfo, config);\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n} from 'muze-utils';\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, action, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n const newStartPos = Object.assign({}, startPos);\n const newEndPos = Object.assign({}, endPos);\n if (startPos.x > endPos.x) {\n newStartPos.x = endPos.x;\n newEndPos.x = startPos.x;\n }\n\n if (startPos.y > endPos.y) {\n const y = startPos.y;\n newStartPos.y = endPos.y;\n newEndPos.y = y;\n }\n const payload = getDragActionConfig(firebolt, {\n startPos: newStartPos,\n endPos: newEndPos\n });\n payload.dragging = true;\n payload.dragDiff = Math.abs(startPos.x - endPos.x) + Math.abs(startPos.y - endPos.y);\n firebolt.triggerPhysicalAction(action, payload);\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n if (startPos.x > endPos.x) {\n const x = startPos.x;\n startPos.x = endPos.x;\n endPos.x = x;\n }\n\n if (startPos.y > endPos.y) {\n const y = startPos.y;\n startPos.y = endPos.y;\n endPos.y = y;\n }\n\n const payload = getDragActionConfig(firebolt, {\n startPos,\n endPos\n });\n payload.dragEnd = true;\n firebolt.triggerPhysicalAction(action, payload);\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: true,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n getAllPoints: false,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n\n firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, payload);\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, {\n criteria: null\n });\n });\n};\n\nexport default hover;\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n firebolt.triggerPhysicalAction(ACTION_NAMES.CLICK, payload);\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport * as ACTION_NAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTION_NAMES.DRAG]: drag,\n [ACTION_NAMES.HOVER]: hover,\n [ACTION_NAMES.CLICK]: click,\n [ACTION_NAMES.LONGTOUCH]: longtouch,\n [ACTION_NAMES.TOUCHDRAG]: touchdrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl) => {\n attachDragEvent(targetEl, ACTION_NAMES.DRAG, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport * as ACTION_NAMES from '../../enums/actions';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n firebolt.triggerPhysicalAction(ACTION_NAMES.LONGTOUCH, payload);\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n firebolt.triggerPhysicalAction(ACTION_NAMES.LONGTOUCH, {\n criteria: null\n });\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\nconst FRAGMENTED_TOOLTIP = 'fragmented-tooltip';\nconst AXIS_LABEL_HIGHLIGHTER = 'axis-label-highlighter';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP,\n FRAGMENTED_TOOLTIP,\n AXIS_LABEL_HIGHLIGHTER\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\n */\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n this.sourceInfo(() => this.firebolt.context.getSourceInfo());\n this.layers(() => this.firebolt.context.layers());\n this.plotPointsFromIdentifiers((...args) => this.firebolt.context.getPlotPointsFromIdentifiers(...args));\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\n */\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n\n sourceInfo (...sourceInfo) {\n if (sourceInfo.length) {\n this._sourceInfo = sourceInfo[0];\n return this;\n }\n return this._sourceInfo();\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers();\n }\n\n plotPointsFromIdentifiers (...params) {\n if (params.length && params[0] instanceof Function) {\n this._plotPointsFromIdentifiers = params[0];\n return this;\n }\n return this._plotPointsFromIdentifiers(...params);\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\n applyInteractionStyle (set, config = {}, layers) {\n const { interactionType, apply, reset = false } = config;\n const allLayers = layers || this.firebolt.context.layers();\n allLayers.forEach((layer) => {\n const { interactive } = layer.config();\n if (interactive !== false) {\n const layerFields = layer.data().getFieldsConfig();\n const filteredUids = set.uids.filter(([, measures = []]) => measures.every(m => m in layerFields))\n .map(d => d[0]);\n const options = { apply, reset, styles: null };\n layer.applyInteractionStyle(interactionType, filteredUids, options);\n }\n });\n return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\n * ```\n */\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const { x: xDim, y: yDim } = dimensions;\n\n if (!criteria) return null;\n\n if (axes.x && axes.y) {\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n\n if (xRange && xRange.length) {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val = xRange[0];\n let x2Val = xRange[xRange.length - 1];\n\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n }\n\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n\n if (yRange && yRange.length) {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val = yRange[0];\n let y2Val = yRange[yRange.length - 1];\n\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n }\n\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction: 'both'\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\nimport { BEHAVIOURS } from '../..';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n },\n persistent: false\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x = 0;\n let y = 0;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n width = unitWidth;\n height = unitHeight;\n\n // Hide selection-box on dragEnd or when criteria is empty\n if (!payload.criteria || (payload.dragEnd && !config.persistent)) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = this.sourceInfo();\n const { dimension, direction } =\n getBoxDimensionsFromPayload(payload, sourceInf.axes, sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both') {\n x = Math.min(dimension.x1, dimension.x2);\n y = Math.min(dimension.y1, dimension.y2);\n width = Math.abs(dimension.x2 - dimension.x1);\n height = Math.abs(dimension.y2 - dimension.y1);\n }\n\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n firebolt.registerPhysicalBehaviouralMap({\n selectiondrag: {\n behaviours: [BEHAVIOURS.BRUSH]\n }\n });\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\nimport { ACTIONS } from '../..';\n\nexport const selectionBoxDrag = firebolt => (targetEl) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n firebolt.triggerPhysicalAction(ACTIONS.SELECTIONDRAG, payload);\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(firebolt, {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n });\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(firebolt, {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n });\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const NULL = 'null';\nexport const UNDEFINED = 'undefined';\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n parentClassName: 'tooltip-parent-container',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n spacing: 5,\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '4px 0 4px 0',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\nexport const TABLE_FORMAT = 'table';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { TABLE_FORMAT } from './constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n const { classPrefix } = config;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n const mountHtmlTooltip = makeElement(mount, 'div', [1], `${classPrefix}-tooltip-html-container`);\n mountHtmlTooltip.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === TABLE_FORMAT) {\n const table = makeElement(body, 'table', [1], `${classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, '', {\n update: (elem, elemData) => elem.attr('class', elemData.className)\n });\n const cells = makeElement(rows, 'span', d => d.data, `${classPrefix}-tooltip-content`);\n cells.attr('class', `${classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block' // 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n makeElement,\n getMaxPoint\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM,\n TOOLTIP_TOP } from './constants';\nimport { defaultConfig } from './default-config';\nimport { reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class',\n `${classPrefix}-${tooltipConf.defClassName} ${classPrefix}-${contentClass}\n ${tooltipConf.className}`);\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.parentClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n this.addClass(qualifiedClassName.join(' '));\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = `${classPrefix}-${contentClass}-${name}`;\n const specificClass = `${classPrefix}-${contentConfig.className}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className} ${specificClass}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n\n if (target) {\n const node = this._tooltipContainer.node();\n const tooltipPos = this._orientation;\n const outsidePlot = tooltipPos === TOOLTIP_LEFT || tooltipPos === TOOLTIP_RIGHT ?\n (y + node.offsetHeight) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth) < target.x || x > (target.x + target.width);\n\n if (outsidePlot) {\n let path;\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (tooltipPos === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (tooltipPos === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (tooltipPos === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n const orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const contentContainer = this._contentContainer.node();\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px')\n .style('width', '2000px')\n .style('height', '2000px');\n\n const offsetWidth = contentContainer.offsetWidth + 4;\n const offsetHeight = contentContainer.offsetHeight + 4;\n const config = this._config;\n const offset = this._offset;\n const spacing = config.spacing;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const bottomSpace = extent.height - (dim.y + dim.height + offset.y);\n const arrowSize = spacing;\n const tooltipHeight = offsetHeight + arrowSize;\n const tooltipWidth = offsetWidth + arrowSize;\n\n const spaces = [{\n position: 'top',\n value: topSpace - tooltipHeight\n }, {\n position: 'right',\n value: rightSpace - tooltipWidth\n }, {\n position: 'left',\n value: leftSpace - tooltipWidth\n }, {\n position: 'bottom',\n value: bottomSpace - tooltipHeight\n }];\n\n const positionHorizontal = (positionVal) => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionVal === 'right') {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionVal === 'left') {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n }\n\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n return {\n position,\n x,\n y\n };\n };\n\n const positionVertical = (positionVal) => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionVal === 'top') {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n return {\n position,\n x,\n y\n };\n };\n\n this._target = dim;\n\n const hMax = getMaxPoint(spaces.filter(d => d.position === 'left' || d.position === 'right'),\n 'value');\n const vMax = getMaxPoint(spaces.filter(d => d.position === 'top' || d.position === 'bottom'),\n 'value');\n if (!orientation) {\n if (hMax.value > 0) {\n const position = hMax.position;\n obj = positionHorizontal(position);\n } else {\n const position = vMax.position;\n obj = positionVertical(position);\n }\n } else if (orientation === 'horizontal') {\n const position = hMax.position;\n obj = positionHorizontal(position);\n } else {\n const position = vMax.position;\n obj = positionVertical(position);\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._tooltipContainer.style('height', `${offsetHeight}px`)\n .style('width', `${offsetWidth}px`);\n this._orientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","export const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect,\n ReservedFields\n} from 'muze-utils';\nimport { TABLE_FORMAT } from '@chartshq/muze-tooltip';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\nimport { BAR } from '../../../../visual-group/src/enums/constants';\nimport { NULL, UNDEFINED } from '../../enums/constants';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\nconst FIRST_VALUE_MARGIN = '10px';\nconst STACK = 'stack';\nconst SINGLE_DATA_MARGIN = 10;\nconst defNumberFormat = value => `${value % value.toFixed(0) === 0 ? value : value.toFixed(2)}`;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(defNumberFormat(value))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst isSingleValue = (dataLen, stackedSum) => dataLen === 1 && !stackedSum;\n\nconst getStackedKeyValue = (params) => {\n const { field, value, classPrefix } = params;\n return ({\n className: `${classPrefix}-tooltip-stacked-row`,\n data: [{\n value: field,\n className: `${classPrefix}-tooltip-stacked-row-key`\n }, {\n value: `${value}`,\n className: `${classPrefix}-tooltip-stacked-row-value`\n }]\n });\n};\n\nconst getKeyValue = (params) => {\n const { field, value, classPrefix, margin, isSelected, removeKey, stackedSum, isStackedBar } = params;\n let { stackedValue } = params;\n\n if (!removeKey) {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n const valueObj = {\n value,\n className: `${classPrefix}-tooltip-value`\n };\n\n if (stackedValue === NULL || stackedValue === UNDEFINED) {\n stackedValue = 0;\n }\n\n const stackedValueObj = {\n value: stackedSum ? `(${(stackedValue * 100 / stackedSum).toFixed(2)} %)` : undefined,\n className: `${classPrefix}-tooltip-stacked-percentage`\n };\n\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n valueObj.style = {\n 'margin-left': `${margin}px`\n };\n stackedValueObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n\n return ({\n className: isSelected ? `${classPrefix}-tooltip-row ${classPrefix}-tooltip-selected-row`\n : `${classPrefix}-tooltip-row`,\n data: stackedSum && isStackedBar ? [keyObj, stackedValueObj, valueObj] : [keyObj, valueObj]\n });\n }\n return ({\n data: [{\n className: '',\n value,\n style: {\n 'margin-left': FIRST_VALUE_MARGIN\n }\n }],\n className: `${classPrefix}-tooltip-first`\n });\n};\n\nexport const getStackedSum = (values, index) => values.reduce((a, b) => {\n if (b[index] instanceof InvalidAwareTypes) {\n return a + 0;\n }\n return a + b[index];\n}, 0);\n\nexport const isStackedChart = layers => layers.some(d => d.transformType() === STACK);\nexport const isStackedBarChart = layers => layers.some(d => d.transformType() === STACK && d.config().mark === BAR);\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const {\n fieldsConfig,\n dimensionMeasureMap,\n axes,\n config,\n fieldInf,\n dataLen,\n target,\n stackedSum,\n isStackedBar\n } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const REF_VALUES_INDEX = 1;\n const REF_KEYS_INDEX = 0;\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n size: sizeAxis.config().value,\n shape: shapeAxis.getShape(retinalFieldValue)\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (isSingleValue(dataLen, stackedSum)) {\n content.push(getKeyValue({\n field: displayName,\n value: formattedRetinalValue,\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push({ data: [icon, formattedRetinalValue] }));\n const selectedContext = target && target[REF_VALUES_INDEX][target[REF_KEYS_INDEX].indexOf(retField)];\n const isSelected = selectedContext === retinalFieldValue;\n\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const currentMeasureValue = valueArr[measureIndex];\n const value = formatterFn(currentMeasureValue);\n const keyValue = getKeyValue({\n field: hasMultipleMeasures ? `${dName}${separator}` : formattedRetinalValue,\n value,\n classPrefix,\n margin: hasMultipleMeasures ? margin : undefined,\n isSelected,\n stackedSum,\n stackedValue: currentMeasureValue instanceof InvalidAwareTypes\n ? currentMeasureValue.value()\n : currentMeasureValue.toFixed(2),\n isStackedBar\n });\n\n if (!hasMultipleMeasures) {\n keyValue.data = [icon, ...keyValue.data];\n }\n content.push(keyValue);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.retinalFields;\n const detailFields = context.detailFields || [];\n const { showStackSum = true } = context.config || {};\n const { selectedMeasures = [] } = context.payload;\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n const containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = TABLE_FORMAT;\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const isStacked = isStackedChart(context.layers);\n const isStackedBar = isStackedBarChart(context.layers);\n const filteredMeasures = !isSingleValue(dataLen, isStacked)\n ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n\n nestedDataObj = !('key' in nestedDataObj[0]) ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const { values, key } = nestedData[i];\n const field = getObjProp(schema, indices[index], 'name');\n const margin = dataLen === 1 || Object.keys(retinalFields).length === 0\n ? SINGLE_DATA_MARGIN : undefined;\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(key);\n const removeKey = !isSingleValue(dataLen, isStacked);\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: formattedValue,\n classPrefix,\n margin,\n isSelected: undefined,\n removeKey\n }));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n let stackedSum = 0;\n if (isStacked && showStackSum) {\n stackedSum = getStackedSum(\n values,\n fieldsConfig[measures[0].name].index\n );\n const nf = measures[0].numberFormat;\n content.push(getStackedKeyValue({\n field: `${'Total'}${separator}`,\n value: nf ? nf(stackedSum.toFixed(2)) : stackedSum.toFixed(2),\n classPrefix\n }));\n }\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen,\n target: context.payload.target,\n stackedSum,\n isStackedBar\n });\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n isSelected: selectedMeasures.indexOf(name) !== -1,\n value: fn(valueArr[fieldsConfig[name].index]),\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * Calculate aggregated values of measures from entry set and datamodel.\n *\n * @param {DataModel} dm DataModel instance\n * @param {EntrySet} entrySet Entry set\n */\nconst getAggregatedValues = (dm, entrySet) => {\n const fields = entrySet.fields;\n const aggFns = entrySet.aggFns;\n // Create a map of all the dimensions and the measures\n const dimsMap = entrySet.uids.reduce((acc, v) => {\n const dims = v[2];\n\n !acc[dims] && (acc[dims] = []);\n acc[dims].push(v[1]);\n return acc;\n }, {});\n const aggMeasures = Object.keys(dm.getFieldspace().getMeasure());\n const aggregatedValues = {};\n aggMeasures.forEach((measure) => {\n // Filter all the rows which has this measure and dimensions and apply aggregation.\n const groupedDm = dm.select((dmFields, id) => {\n const row = `${fields.map(field => (field === ReservedFields.ROW_ID ? id :\n dmFields[field].internalValue))}`;\n const measures = dimsMap[row];\n if (measures) {\n return measures.find(arr => arr.indexOf(measure) !== -1);\n }\n return false;\n }, {\n saveChild: false\n }).groupBy([''], {\n [measure]: aggFns[measure] === COUNT ? SUM : aggFns[measure]\n }, {\n saveChild: false\n });\n const fieldsConfig = groupedDm.getFieldsConfig();\n if (!groupedDm.isEmpty()) {\n aggregatedValues[measure] = groupedDm.getData().data[0][fieldsConfig[measure].index];\n }\n });\n return aggregatedValues;\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const { classPrefix } = config;\n const tooltipConf = context.config;\n const { showMultipleMeasures } = tooltipConf;\n const aggFns = selectionSet.mergedEnter.aggFns;\n const entryUids = selectionSet.mergedEnter.uids;\n const fieldsConf = dm.getFieldsConfig();\n const aggregatedValues = getAggregatedValues(dm, selectionSet.mergedEnter);\n const values = [{\n className: `${classPrefix}-tooltip-row`,\n data: [{\n value: `${entryUids.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected']\n }];\n let measures = Object.keys(aggregatedValues);\n if (!showMultipleMeasures) {\n measures = measures.slice(0, 1);\n }\n // Prepare the tooltip content\n measures.forEach((measure) => {\n const { numberFormat = defNumberFormat } = fieldsConf[measure].def;\n const value = aggregatedValues[measure];\n const rowValues = value instanceof InvalidAwareTypes ? [] : [`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}:`,\n {\n value: numberFormat(value),\n style: {\n 'font-weight': 'bold'\n },\n className: `${classPrefix}-tooltip-value`\n }];\n if (showMultipleMeasures) {\n values.push({\n className: `${classPrefix}-tooltip-row`,\n data: rowValues\n });\n } else {\n values[0].data.push(...rowValues);\n }\n });\n\n return values;\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { mergeRecursive, defaultValue } from 'muze-utils';\nimport { strategies } from './strategies';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n order: 1,\n dataTransform: (dm, fields) => (fields ? dm.project(fields, { saveChild: false }) : dm)\n },\n selectionSummary: {\n order: 0,\n dataTransform: dm => dm\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\n }\n\n apply (selectionSet, payload, options = {}) {\n const dataModel = selectionSet && selectionSet.mergedEnter.model;\n\n if ((payload.criteria === null || (dataModel && dataModel.isEmpty())) || selectionSet === null) {\n this.hide(options, null);\n return this;\n }\n\n const strategy = defaultValue(options.strategy, this._strategy);\n\n this.createTooltip(dataModel, Object.assign({}, {\n payload,\n selectionSet,\n strategy,\n options\n }), null, 0);\n\n return this;\n }\n\n static target () {\n return 'all';\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n const { orientation } = this.config();\n\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const tooltip = tooltips[key];\n const strategy = options.strategy || this._strategy;\n tooltip.content(strategy, null);\n if (!Object.keys(tooltip._contents).length) {\n tooltip.hide();\n } else {\n tooltip.positionRelativeTo(tooltip._target, {\n orientation\n });\n }\n }\n }\n }\n\n getPlotPointsFromIdentifiers (payload) {\n let target = payload.target;\n let targetFields = [];\n\n if (target) {\n targetFields = target[0] || [];\n const sourceFields = payload.sourceFields;\n const indices = [];\n for (let i = 0, len = targetFields.length; i < len; i++) {\n if (sourceFields.indexOf(targetFields[i]) !== -1) {\n indices.push(i);\n }\n }\n target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n }\n\n return super.plotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n }\n\n createTooltip (dataModel, props = {}, plotDim, key) {\n const drawingInf = this.drawingContext();\n const sourceInf = this.sourceInfo();\n const config = this.config();\n const {\n strategy,\n payload,\n selectionSet\n } = props;\n plotDim = defaultValue(plotDim, this.getPlotPointsFromIdentifiers(payload));\n plotDim = plotDim && plotDim[0];\n const pad = config.padding;\n const { showInPosition, position: tooltipPos } = payload;\n const { fields: projectFields, dataTransform } = config[strategy];\n\n const strategyFn = this._strategies[strategy];\n const dt = dataTransform(dataModel, projectFields, this);\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = this._tooltips[key] = this._tooltips[key] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n Object.assign(sourceInf, {\n payload,\n firebolt: this.firebolt,\n detailFields: [],\n timeDiffs: sourceInf.timeDiffs,\n valueParser: this.valueParser(),\n selectionSet,\n config: config[strategy]\n });\n\n tooltipInst.context(sourceInf);\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: config[strategy].order,\n className: config[strategy].className\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: config.orientation\n }\n );\n } else {\n tooltipInst.hide();\n }\n }\n}\n","import { FieldType } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { FRAGMENTED_TOOLTIP } from '../../enums/side-effects';\nimport Tooltip from '../tooltip';\n\nexport default class FragmentedTooltip extends Tooltip {\n static formalName () {\n return FRAGMENTED_TOOLTIP;\n }\n\n createTooltip (dataModel, props) {\n let totalHeight = 0;\n let totalWidth = 0;\n const config = this.config();\n const { strategy } = props;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n\n const tooltips = this._tooltips;\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const pad = config.padding;\n const dataModels = [];\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const boxes = [];\n const uids = dataModel.getUids();\n\n dataModels.push(...uids.map(d => dataModel.select((fieldsArr, i) => i === d, {\n saveChild: false\n })));\n\n const enter = {};\n for (let i = 0, len = dataModels.length; i < len; i++) {\n const dm = dataModels[i];\n const dimensions = dm.getData().schema.filter(d => d.type === FieldType.DIMENSION).map(d => d.name);\n const plotDim = context.getPlotPointsFromIdentifiers(dm.project(dimensions), { getBBox: true });\n\n super.createTooltip(dm, props, plotDim, i);\n const tooltipInst = this._tooltips[i];\n enter[i] = this._tooltips[i];\n\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n\n position && boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(strategy, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n\n boxes.length && spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","export const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n};\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { CROSSLINE } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return CROSSLINE;\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n const isEmptyDataModel = dataModel && dataModel.isEmpty();\n if (payload.criteria && isEmptyDataModel) {\n this.hide();\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n\n let layers = this.firebolt.context.layers();\n layers = layers.filter(layer => !!layer.config().crossline);\n\n if (layers.length) {\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...layers.map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n !isNaN(px) && elemData.push(dataPoint);\n }\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n\n static target () {\n return 'visual-unit';\n }\n}\n","import { difference, intersect } from 'muze-utils';\nimport { intersectSets } from '../../helper';\n\n/**\n * @private\n * @param {Object} set Points set\n * @param {Array.} selectedPointsId array of id of selected points\n * @return {Object} Returns the set with the selected points removed\n */\nexport const getFormattedSet = (set, selectedPointsId, intersection = false) => {\n const fn = intersection ? intersect : difference;\n const formattedSet = fn(set.uids, selectedPointsId,\n [d => d[0], d => d[0]]);\n return {\n ...set,\n ...{\n uids: formattedSet,\n length: formattedSet.length\n }\n };\n};\n\nexport const highlightSelectIntersection = (firebolt) => {\n const selectEntrySet = firebolt.getEntryExitSet('select');\n const highlightEntrySet = firebolt.getEntryExitSet('highlight');\n\n if (selectEntrySet && highlightEntrySet) {\n const intersectSet = intersectSets(firebolt, ['select', 'highlight']);\n return intersectSet;\n }\n\n return null;\n};\n","import { intersect, difference } from 'muze-utils';\nimport { getFormattedSet } from './helper';\nimport { BEHAVIOURS } from '../..';\n\nconst fadeFn = (set, context) => {\n const { formattedSet } = set;\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = formattedSet;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType: 'fade', apply: false });\n } else {\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n // Apply style only on the hovered layer\n if (layerName === 'area') {\n context.applyInteractionStyle(mergedEnter, { interactionType: 'fade', apply: true }, [layer]);\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: false }, [layer]);\n } else {\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: true }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'fade', apply: false }, [layer]);\n }\n });\n }\n};\n\nconst fadeOnBrushFn = (set, context, payload) => {\n const { formattedSet } = set;\n const {\n exitSet,\n mergedEnter,\n mergedExit,\n completeSet\n } = formattedSet;\n\n const { dragEnd } = payload;\n let interactionType = 'brushStroke';\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType, apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'doubleStroke', apply: false });\n } else {\n if (dragEnd) {\n interactionType = 'doubleStroke';\n // onDrag style\n context.applyInteractionStyle(completeSet, { interactionType: 'brushStroke', apply: false });\n }\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n // Apply style only on the hovered layer\n if (layerName === 'area') {\n if (dragEnd) {\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: false }, [layer]);\n mergedEnter.length &&\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]);\n }\n } else {\n // dragEnd style\n context.applyInteractionStyle(mergedExit, { interactionType, apply: false }, [layer]);\n if (!payload.dragEnd) {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]);\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]);\n }\n\n interactionType !== 'doubleStroke' &&\n context.applyInteractionStyle(mergedExit, { interactionType: 'doubleStroke', apply: false });\n context.applyInteractionStyle(mergedEnter, { interactionType, apply: true }, [layer]);\n }\n });\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n fadeOnBrush: fadeOnBrushFn,\n focus: (set, context) => {\n const { formattedSet } = set;\n const {\n entrySet,\n mergedEnter,\n mergedExit,\n completeSet\n } = formattedSet;\n const { firebolt } = context;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType: 'focus', apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'focusStroke', apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'commonDoubleStroke', apply: false });\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focusStroke', apply: false });\n context.applyInteractionStyle(entrySet, { interactionType: 'focusStroke', apply: true });\n\n const payload = firebolt.getPayload(BEHAVIOURS.HIGHLIGHT);\n const entryExitSet = firebolt.getEntryExitSet(BEHAVIOURS.HIGHLIGHT);\n const layers = firebolt.context.layers();\n\n if (payload.target && entryExitSet) {\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n if (layerName === 'area') {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]);\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false }, [layer]);\n }\n\n // get uids of only the currently highlighted point\n const actualPoint = layer.getUidsFromPayload(entryExitSet.mergedEnter, payload.target);\n\n const commonSet = intersect(mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n\n if (commonSet.length) {\n context.applyInteractionStyle({ uids: commonSet },\n { interactionType: 'commonDoubleStroke', apply: true },\n [layer]\n );\n } else {\n context.applyInteractionStyle({ uids: mergedExit.uids },\n { interactionType: 'commonDoubleStroke', apply: false },\n [layer]\n );\n }\n });\n }\n }\n },\n highlight: (set, context, payload, excludeSetIds) => {\n const { selectionSet } = set;\n\n if (!selectionSet.mergedEnter.length && !selectionSet.mergedExit.length) {\n // Remove focusStroke on selected but currently non-highlighted set\n context.applyInteractionStyle(selectionSet.completeSet, { interactionType: 'highlight', apply: false });\n context.applyInteractionStyle(selectionSet.completeSet,\n { interactionType: 'commonDoubleStroke', apply: false }\n );\n } else {\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n if (payload.target) {\n // get uids of only the currently highlighted point\n const actualPoint = layer.getUidsFromPayload(selectionSet.mergedEnter, payload.target);\n // get uids of only the currently highlighted point excluding the excludeSet ids\n const currentHighlightedSet = getFormattedSet(actualPoint, excludeSetIds);\n\n // Apply highlight on the currently hovered point\n context.applyInteractionStyle(currentHighlightedSet,\n { interactionType: 'highlight', apply: true },\n [layer]\n );\n\n context.applyInteractionStyle(selectionSet.mergedExit,\n { interactionType: 'highlight', apply: false },\n [layer]\n );\n\n const selectEntrySet = context.firebolt.getEntryExitSet('select');\n if (selectEntrySet) {\n const commonSet = intersect(selectEntrySet.mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n const diffSet = difference(selectEntrySet.mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n\n if (commonSet.length) {\n context.applyInteractionStyle({ uids: commonSet },\n { interactionType: 'commonDoubleStroke', apply: true },\n [layer]\n );\n }\n context.applyInteractionStyle({ uids: diffSet },\n { interactionType: 'commonDoubleStroke', apply: false },\n [layer]\n );\n }\n }\n });\n }\n },\n pseudoFocus: (set, context) => {\n const { formattedSet } = set;\n const {\n mergedEnter\n } = formattedSet;\n\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false });\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\nimport { getFormattedSet } from './helper';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return HIGHLIGHTER;\n }\n\n static target () {\n return 'visual-unit';\n }\n\n getExcludeSetIds (excludeSet = []) {\n // Get excludeSetIds if excludeSet is a function\n if (excludeSet instanceof Function) {\n return excludeSet(this.firebolt.getEntryExitSet);\n }\n // Get excludeSetIds if excludeSet is not a function\n return excludeSet.reduce((acc, behaviour) => {\n const selectedPoints = this.firebolt.getEntryExitSet(behaviour) || {};\n const selectedPointsIds = (selectedPoints.mergedEnter || {}).uids;\n if (selectedPointsIds) acc.push(...selectedPointsIds);\n return acc;\n }, []);\n }\n\n apply (selectionSet, payload, options = {}) {\n const currentStrategy = this._strategies[options.strategy || this._strategy];\n const excludeSetIds = this.getExcludeSetIds(options.excludeSet);\n\n // Get all sets except the excludeSet points\n const formattedSet = {\n ...selectionSet,\n completeSet: getFormattedSet(selectionSet.completeSet, excludeSetIds),\n entrySet: getFormattedSet(selectionSet.entrySet[1], excludeSetIds),\n exitSet: getFormattedSet(selectionSet.exitSet[1], excludeSetIds),\n mergedEnter: getFormattedSet(selectionSet.mergedEnter, excludeSetIds),\n mergedExit: getFormattedSet(selectionSet.mergedExit, excludeSetIds)\n };\n\n const totalSet = { selectionSet, formattedSet };\n\n currentStrategy(totalSet, this, payload, excludeSetIds);\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const context = this.firebolt.context;\n const entryModel = selectionSet.mergedEnter.model;\n if (payload.criteria === null) {\n context.clearCaching().resetData();\n } else {\n context.enableCaching().data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel, getObjProp, mergeRecursive, ReservedFields, dmMultipleSelection } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: {\n field: getObjProp(depLayerEncoding, 'color', 'field'),\n value: getObjProp(depLayerEncoding, 'color', 'value')\n },\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: () => sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const layerOwner = layerDef.def.name;\n const name = `${layerOwner}-${commonName}`;\n const defaultClassName = `${sideEffect.constructor.defaultConfig().className}`;\n\n layers.push({\n name: `${name}-upper`,\n mark: 'point',\n groupId: `${commonName}-upper`,\n className: `${defaultClassName}-upper`,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n\n if (mark === 'area') {\n layers.push({\n name: `${name}-lower`,\n mark: 'point',\n groupId: `${commonName}-lower`,\n className: `${defaultClassName}-lower`,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return ANCHORS;\n }\n\n addAnchorLayers () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 70;\n }\n\n // Default offset by which anchor size is changed\n getAnchorSizeOnInteraction ({ dragEnd }) {\n if (dragEnd) {\n return 40;\n }\n return 0;\n }\n\n apply (selectionSet, payload) {\n const dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n const context = this.firebolt.context;\n const upperAnchors = context.layers().filter(layer => layer.config().groupId === `${formalName}-upper`);\n const lowerAnchors = context.layers().filter(layer => layer.config().groupId === `${formalName}-lower`);\n\n const { target, action } = payload;\n let targetObj = null;\n if (target) {\n targetObj = target[1].reduce((acc, v, i) => {\n const field = target[0][i];\n if (field !== ReservedFields.MEASURE_NAMES) {\n acc[field] = v;\n }\n return acc;\n }, {});\n }\n\n [...upperAnchors, ...lowerAnchors].forEach((layer, index) => {\n const layerConfig = layer.config();\n const linkedLayer = context.getLayerByName(layerConfig.owner);\n const linkedLayerName = linkedLayer.constructor.formalName();\n const groupId = layerConfig.groupId;\n const isUpperAnchor = groupId === `${formalName}-upper`;\n let transformedData = [];\n let schema = [];\n\n [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel, index);\n\n // Render both upper and lower anchors for area plot if hovered over an anchor\n if (linkedLayerName === 'area' && target && action === 'highlight') {\n const filterFn = dmMultipleSelection(target, dataModel);\n const dmFromPayload = dataModel.select(filterFn, {});\n\n if (!isUpperAnchor) {\n [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dmFromPayload, index);\n }\n }\n\n const transformedDataModel = new DataModel(transformedData, schema);\n const anchorSizeConfig = {\n encoding: {\n size: {\n value: () => this.defaultSizeValue() + this.getAnchorSizeOnInteraction(payload)\n },\n 'stroke-width': {\n value: this.getAnchorStroke(payload, targetObj)\n }\n }\n };\n const newConfig = mergeRecursive(layerConfig, anchorSizeConfig);\n\n layer\n .data(transformedDataModel)\n .config(newConfig);\n\n return this;\n });\n }\n\n getAnchorStroke (payload, targetObj) {\n return (d) => {\n const dataObj = d.data.dataObj;\n const matchingData = targetObj ? Object.keys(targetObj).every((key) => {\n const val = dataObj[key];\n return val === targetObj[key];\n }) : false;\n return matchingData ? '1px' : '0px';\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return PERSISTENT_ANCHORS;\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n setAnchorLayerStyle (layers) {\n const anchorLayers = layers.filter(l => l.config().groupId === PERSISTENT_ANCHORS);\n anchorLayers.forEach((anchor) => {\n // Execute focusStroke interaction of anchor point layer\n const ids = anchor.data().getUids();\n const layerName = this.constructor.formalName();\n const defaultInteractionLayerEncoding = anchor.config().encoding.interaction;\n anchor.applyInteractionStyle(defaultInteractionLayerEncoding[layerName], ids, { apply: true });\n });\n }\n\n // offset value by which anchor size is changed\n // Applied only on select interaction\n getAnchorSizeonInteraction () {\n return 50;\n }\n\n getAnchorStroke () {\n return '2px';\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return BRUSH_ANCHORS;\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n setAnchorLayerStyle (layers) {\n const anchorLayers = layers.filter(l => l.config().groupId === BRUSH_ANCHORS);\n anchorLayers.forEach((anchor) => {\n // Execute focusStroke interaction of anchor point layer\n const ids = anchor.data().getUids();\n const layerName = this.constructor.formalName();\n const defaultInteractionLayerEncoding = anchor.config().encoding.interaction;\n anchor.applyInteractionStyle(defaultInteractionLayerEncoding[layerName], ids, { apply: true });\n });\n }\n\n getAnchorStroke (payload) {\n return payload.dragEnd ? '2px' : '1px';\n }\n}\n","import SurrogateSideEffect from '../surrogate';\nimport { AXIS_LABEL_HIGHLIGHTER } from '../../enums/side-effects';\nimport './styles.scss';\n\nexport default class AxisLabelHighLighter extends SurrogateSideEffect {\n static formalName () {\n return AXIS_LABEL_HIGHLIGHTER;\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet) {\n const context = this.firebolt.context;\n const dataModel = selectionSet && selectionSet.mergedEnter.model;\n const selectedData = dataModel && dataModel.getData().data;\n const selectedDataValues = selectedData && selectedData.length ? selectedData[0] : [];\n const { x = [], y = [] } = context.axes();\n [...x, ...y].forEach((axis) => {\n const fieldMeta = dataModel ? dataModel.getFieldsConfig()[axis.config().field] : undefined;\n const selData = selectedDataValues[fieldMeta && fieldMeta.index !== undefined\n ? fieldMeta.index : undefined];\n const { selectionSet: selectedElements, rejectionSet } = axis.getTicksBasedOnData(selData);\n selectedElements && selectedElements.selectAll('text').classed('muze-axis-ticks-highlight', true);\n rejectionSet.selectAll('text').classed('muze-axis-ticks-highlight', false);\n });\n }\n}\n","import { intersect } from 'muze-utils';\nimport * as BEHAVIOURS from './enums/behaviours';\nimport * as SIDE_EFFECTS from './enums/side-effects';\nimport { unionSets } from './helper';\n\nconst nullDataTooltipMap = {\n area: true,\n arc: false,\n line: true,\n text: false,\n point: false,\n bar: false,\n tick: false\n};\n\nconst applySideEffectOnEmptyTarget = (sideEffect, { target }) => {\n const layers = sideEffect.layers();\n const showTooltipOnEmptyTarget = layers.some((l) => {\n const layerName = l.constructor.formalName();\n return nullDataTooltipMap[layerName];\n });\n return showTooltipOnEmptyTarget || target;\n};\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fadeOnBrush'\n }\n }, 'brush-anchors'],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active) {\n return null;\n }\n if (applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return selectionSet;\n }\n return null;\n }\n }\n }, 'anchors', {\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary',\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active === true ||\n !applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return null;\n }\n const selectEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.SELECT);\n const brushEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.BRUSH);\n if (selectEntrySet || brushEntrySet) {\n const unionedSet = unionSets(sideEffect.firebolt, [BEHAVIOURS.SELECT, BEHAVIOURS.BRUSH]);\n const { uids } = unionedSet.mergedEnter;\n const { uids: highlightUids } = selectionSet.mergedEnter;\n\n if (intersect(uids, highlightUids, [id => id[0], id => id[0]]).length) {\n return unionedSet;\n }\n }\n\n return null;\n }\n }\n }, {\n name: SIDE_EFFECTS.AXIS_LABEL_HIGHLIGHTER,\n options: {\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active) {\n return null;\n }\n if (applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return selectionSet;\n }\n return null;\n }\n }\n }],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors', {\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary'\n }\n }],\n pseudoSelect: [{\n name: 'highlighter',\n options: {\n strategy: 'pseudoFocus'\n }\n }]\n};\n","import { componentRegistry } from 'muze-utils';\nimport * as behaviours from './actions/behavioural';\nimport { physicalActions } from './actions/physical';\nimport * as sideEffects from './side-effects';\n\nconst convertToObj = (comps) => {\n const obj = {};\n\n for (const key in comps) {\n const val = comps[key];\n\n obj[val.formalName()] = val;\n }\n return obj;\n};\n\nexport const registry = {\n behaviours: componentRegistry(convertToObj(behaviours)),\n physicalActions: componentRegistry(physicalActions),\n sideEffects: componentRegistry(convertToObj(sideEffects))\n};\n","import { ReservedFields, FieldType, difference, isSimpleObject } from 'muze-utils';\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n const dataObj = selectionDataModel.getData();\n const { includeMeasures = true, sourceIdentifiers } = propConfig;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const selectionDataFields = selectionDataModel.getFieldspace().fieldsObj();\n let criteria = null;\n if (sourceIdentifiers !== null) {\n criteria = schema.reduce((ranges, obj) => {\n const field = obj.name;\n const fieldObj = fieldMap[field];\n\n if (!fieldObj) {\n return ranges;\n }\n\n ranges[field] = selectionDataFields[field].domain();\n return ranges;\n }, {});\n const measureNamesIdx = sourceIdentifiers.identifiers[0]\n .findIndex(field => field === ReservedFields.MEASURE_NAMES);\n if (measureNamesIdx !== undefined && includeMeasures) {\n const measureNames = sourceIdentifiers.identifiers.slice(1, sourceIdentifiers.identifiers.length)\n .map(d => d[measureNamesIdx]);\n criteria[ReservedFields.MEASURE_NAMES] = measureNames.map(d => [d]);\n }\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig, facetByFields) => {\n const propPayload = propConfig.payload;\n let payload;\n if (isSimpleObject(propPayload.criteria)) {\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n } else {\n payload = payloadGenerator.__default(instance, selectionDataModel, propConfig, facetByFields);\n }\n\n return payload;\n },\n\n __default: (instance, selectionDataModel, propConfig, facetByFields = []) => {\n const { payload: propPayload, sourceIdentifiers, excludeSelectedMeasures } = propConfig;\n const dataObj = selectionDataModel.getData({ withUid: true });\n const payload = Object.assign({}, propPayload);\n const data = dataObj.data;\n const fieldsConfig = Object.assign({}, selectionDataModel.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(selectionDataModel.getFieldsConfig()).length,\n def: {\n type: FieldType.DIMENSION\n }\n }\n });\n const selectionSet = instance._selectionSet[propConfig.action];\n const selectionSetFields = selectionSet._fields;\n if (sourceIdentifiers) {\n const [facetFields = [], facetValues = []] = facetByFields;\n const facetIndices = facetFields.reduce((acc, v, i) => {\n acc[v] = i;\n return acc;\n }, {});\n const identifierIdxMap = sourceIdentifiers.fields.reduce((acc, v, i) => {\n acc[v.name] = i;\n return acc;\n }, {});\n const identifiers = sourceIdentifiers.identifiers.slice(1, sourceIdentifiers.identifiers.length);\n const sourceIdentifierFields = sourceIdentifiers.fields.filter(d => d.name in fieldsConfig ||\n d.name in facetIndices || d.name === ReservedFields.ROW_ID);\n\n const identifierMap = identifiers.reduce((acc, v) => {\n const key = sourceIdentifierFields.map(d => v[identifierIdxMap[d.name]]);\n const measureNamesIdx = identifierIdxMap[ReservedFields.MEASURE_NAMES];\n if (measureNamesIdx) {\n !acc[key] && (acc[key] = []);\n acc[key].push([v[measureNamesIdx]]);\n }\n return acc;\n }, {});\n\n const dataArr = [];\n for (let i = 0, len = data.length; i < len; i++) {\n const row = data[i];\n const dims = [];\n selectionSetFields.forEach((field) => {\n if (fieldsConfig[field] && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n const idx = fieldsConfig[field].index;\n dims.push(row[idx]);\n }\n });\n\n const vals = `${sourceIdentifierFields.map((d) => {\n if (d.name in fieldsConfig) {\n return row[fieldsConfig[d.name].index];\n } else if (d.name in facetIndices) {\n return facetValues[facetIndices[d.name]];\n }\n return null;\n }).filter(d => d !== null)}`;\n\n if (vals in identifierMap) {\n const measures = identifierMap[vals];\n const allMeasures = instance._metaData.dimensionsMap[dims];\n\n if (excludeSelectedMeasures) {\n const fn = v => `${v}`;\n const diffMeasures = difference(allMeasures, measures, [fn, fn]);\n diffMeasures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n } else {\n measures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n }\n } else {\n let measures = instance._metaData.dimensionsMap[dims];\n measures = measures && measures.length ? measures : [[]];\n measures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n }\n }\n\n payload.criteria = [[...selectionSetFields, ReservedFields.MEASURE_NAMES], ...dataArr];\n } else {\n payload.criteria = null;\n }\n\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : [];\n return payload;\n },\n pseudoSelect: (instance, selectionDataModel, propConfig, facetByFields = []) =>\n payloadGenerator.__default(instance, selectionDataModel, Object.assign({}, {\n excludeSelectedMeasures: true\n }, propConfig), facetByFields)\n};\n\nexport const getPayloadGenerator = (action, criteria) => {\n if (criteria instanceof Array || !payloadGenerator[action]) {\n return payloadGenerator.__default;\n }\n\n return payloadGenerator[action];\n};\n","import { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { FieldType, ReservedFields, defaultValue, isSimpleObject, getObjProp } from 'muze-utils';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const isSideEffectEnabled = (firebolt, { se, propagationInf }) => {\n const sideEffectPolicies = firebolt._sideEffectPolicies;\n const sideEffectCheckers = Object.values(sideEffectPolicies[se.name || se] || {});\n const { sourceIdentifiers, data: propagationData } = propagationInf;\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, firebolt, {\n sourceIdentifiers,\n propagationData\n })) : true;\n};\n\nconst getUniqueKeys = (data, dimensions, { layers, uids, keys = {}, dimensionsMap = {} }) => {\n data.forEach((row, i) => {\n const key = dimensions.length ? dimensions.map(d => row[d.index]) : [uids[i]];\n\n layers.forEach((layer) => {\n const measureNames = Object.keys(layer.data().getFieldspace().getMeasure());\n const mKey = `${[key, ...measureNames]}`;\n keys[mKey] = defaultValue(keys[mKey], {});\n keys[mKey] = {\n dims: key,\n measureNames,\n uid: uids[i]\n };\n dimensionsMap[key] = defaultValue(dimensionsMap[key], []);\n dimensionsMap[key].push(measureNames);\n });\n });\n\n return {\n keys,\n dimensionsMap\n };\n};\n\nexport const prepareSelectionSetMap = ({ data, uids, dimensions }, layers, maps = {}) => {\n const obj = getUniqueKeys(data, dimensions, {\n layers,\n uids,\n keys: maps.keys,\n dimensionsMap: maps.dimensionsMap\n });\n\n return {\n keys: obj.keys,\n dimensionsMap: obj.dimensionsMap\n };\n};\n\nexport const prepareSelectionSetData = (dataModel, unit) => {\n const { data, uids } = dataModel.getData();\n const dimensions = Object.values(dataModel.getFieldsConfig()).filter(d => d.def.type === FieldType.DIMENSION);\n const layers = unit.layers();\n const { keys, dimensionsMap } = prepareSelectionSetMap({ data, uids, dimensions }, layers);\n const dimensionFields = dimensions.length ? dimensions.map(d => d.def.name) : [ReservedFields.ROW_ID];\n const hasMeasures = Object.keys(dataModel.getFieldspace().getMeasure()).length;\n const measureName = hasMeasures ? [ReservedFields.MEASURE_NAMES] : [];\n\n return {\n keys,\n dimensions: dimensionFields,\n dimensionsMap,\n allFields: [...dimensionFields, ...measureName]\n };\n};\n\nexport const sanitizePayloadCriteria = (data, propFields, { dm, dimensionsMap, dimsMapGetter }) => {\n const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(dm.getFieldsConfig()).length,\n def: {\n name: ReservedFields.ROW_ID,\n type: FieldType.DIMENSION\n }\n }\n });\n if (data === null) {\n return null;\n }\n\n if (isSimpleObject(data)) {\n return Object.keys(data).reduce((acc, v) => {\n if (v in fieldsConfig || v === ReservedFields.MEASURE_NAMES) {\n acc[v] = data[v];\n }\n return acc;\n }, {});\n }\n\n const criteriaFields = data[0];\n const fields = criteriaFields.length ? criteriaFields.map((d, i) => ({\n name: d,\n index: i\n })) : [];\n\n const fieldIndexMap = fields.reduce((acc, v, i) => {\n acc[v.name] = i;\n return acc;\n }, {});\n\n propFields = propFields || fields.map(d => d.name);\n const dataWithFacets = [\n propFields\n ];\n\n const measureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES);\n const propDims = fields.filter(d => d.name in fieldsConfig).map(d => d.name);\n\n const dimsMap = dimsMapGetter(propDims, fieldsConfig);\n\n for (let i = 1, len = data.length; i < len; i++) {\n const row = data[i];\n const dimKey = propDims.map(field => row[fieldIndexMap[field]]);\n const origRow = dimsMap[dimKey];\n if (origRow) {\n origRow.forEach((rowVal) => {\n const newRowVal = [];\n propFields.forEach((field) => {\n if (field in fieldIndexMap) {\n const idx = fieldIndexMap[field];\n newRowVal.push(row[idx]);\n } else {\n const idx = getObjProp(fieldsConfig[field], 'index');\n idx !== undefined && newRowVal.push(rowVal[idx]);\n }\n });\n if (!measureNameField) {\n const measuresArr = dimensionsMap[newRowVal].length ? dimensionsMap[newRowVal] : [[]];\n measuresArr.forEach((measures) => {\n dataWithFacets.push([...newRowVal, ...measures]);\n });\n } else {\n dataWithFacets.push(newRowVal);\n }\n });\n }\n }\n return dataWithFacets;\n};\n\nexport const dispatchSecondaryActions = (firebolt, { action, propagationData, config, propagationInf }) => {\n const context = firebolt.context;\n\n const secondaryActions = firebolt._connectedBehaviours[action] || [];\n\n secondaryActions.forEach((secAction) => {\n const payloadGeneratorFn = firebolt.getPayloadGeneratorFor(secAction);\n const generatedPayload = payloadGeneratorFn(firebolt, propagationData, config,\n context.facetByFields());\n firebolt.dispatchBehaviour(secAction, generatedPayload, propagationInf);\n });\n};\n\nexport const createMapByDimensions = (context, dm) => {\n let cacheMap = context._cacheMap = {};\n return (propDims, fieldsConfig) => {\n cacheMap = context._cacheMap;\n if (!cacheMap[propDims]) {\n cacheMap[propDims] = dm.getData({ withUid: true }).data.reduce((acc, row) => {\n const key = propDims.map(d => row[fieldsConfig[d].index]);\n acc[key] || (acc[key] = []);\n acc[key].push(row);\n return acc;\n }, {});\n }\n return cacheMap[propDims];\n };\n};\n","import { FieldType, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { payloadGenerator } from './payload-generator';\nimport {\n isSideEffectEnabled,\n sanitizePayloadCriteria,\n dispatchSecondaryActions,\n createMapByDimensions\n} from './helper';\n\nconst sideEffectPolicy = (propPayload, firebolt, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fields = sourceIdentifiers.fields;\n const sourceIdentifierFields = Object.keys(fields).filter(field =>\n field.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData.getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === firebolt.sourceCanvas();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n const {\n TOOLTIP,\n HIGHLIGHTER,\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS\n } = SIDE_EFFECTS;\n this._handlers = {};\n this._propagationIdentifiers = {};\n this._connectedBehaviours = {};\n this.payloadGenerators(payloadGenerator);\n this.sideEffects().tooltip.disable();\n const disabledSideEffects = [TOOLTIP, HIGHLIGHTER, ANCHORS, BRUSH_ANCHORS, PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n return isSideEffectEnabled(this, { se, propagationInf });\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propInf) {\n return propInf.propagate === false && propInf.applySideEffect !== false;\n }\n\n sanitizePayload (payload) {\n const { criteria } = payload;\n const { allFields: fields, dimensionsMap } = this._metaData;\n\n return Object.assign({}, payload,\n {\n criteria: sanitizePayloadCriteria(criteria, fields, {\n dm: this.data(),\n dimensionsMap,\n dimsMapGetter: this._dimsMapGetter\n })\n });\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const propagationData = data;\n\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = this.getPayloadGeneratorFor(action);\n const payload = payloadFn(this, propagationData, config, context.facetByFields());\n const behaviourPolicies = this._behaviourPolicies;\n const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, this, {\n sourceIdentifiers,\n propagationData\n }));\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data: propagationData,\n propPayload,\n sourceIdentifiers,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n\n this.dispatchBehaviour(action, payload, propagationInf);\n\n dispatchSecondaryActions(this, {\n action,\n propagationInf,\n propagationData,\n config\n });\n }\n };\n }\n\n target () {\n return 'visual-unit';\n }\n\n createSelectionSet (...params) {\n super.createSelectionSet(...params);\n\n this._dimsMapGetter = createMapByDimensions(this, this.data());\n\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n\n propagationIdentifiers (action, identifiers) {\n if (identifiers) {\n this._propagationIdentifiers = identifiers;\n }\n return this._propagationIdentifiers[action];\n }\n\n registerPhysicalActionHandlers () {\n return this;\n }\n\n id () {\n return this.context.id();\n }\n\n getPropagationSource () {\n return this.context.cachedData()[0];\n }\n\n sourceCanvas () {\n return this.context.parentAlias();\n }\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n","import { VolatileBehaviour } from '@chartshq/muze-firebolt';\nimport { BRUSH } from '../../enums/behaviours';\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class UnitBrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BRUSH;\n }\n\n dispatch (...params) {\n this.active = params[0].dragging;\n this.start = params[0].dragStart;\n return super.dispatch(...params);\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const PSEUDO_SELECT = 'pseudoSelect';\n\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === GRID_BAND ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === GRID_BAND && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_BAND) {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\n\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import {\n STATE_NAMESPACES,\n temporalFields,\n getObjProp,\n defaultValue,\n isSimpleObject\n} from 'muze-utils';\nimport { FRAGMENTED } from '@chartshq/muze-firebolt/src/enums/constants';\nimport { TOOLTIP, FRAGMENTED_TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\nimport { prepareSelectionSetData } from './firebolt/helper';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n const { keys, dimensionsMap, dimensions, allFields } = prepareSelectionSetData(context.data(), context);\n firebolt._metaData = {\n dimensionsMap,\n dimensions,\n allFields\n };\n firebolt.createSelectionSet({ keys, fields: dimensions });\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n const firebolt = context.firebolt();\n const { interaction } = config;\n firebolt.config(interaction);\n const { mode } = interaction.tooltip;\n if (mode === FRAGMENTED) {\n const map = firebolt._behaviourEffectMap;\n for (const key in map) {\n const sideEffects = map[key];\n\n map[key] = sideEffects.map((val) => {\n let name = val;\n if (isSimpleObject(val)) {\n name = val.name;\n }\n if (name === TOOLTIP) {\n return FRAGMENTED_TOOLTIP;\n }\n return val;\n });\n }\n }\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\n }\n }\n];\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {\n onset: (context, facets) => {\n const facetKeys = facets[0].reduce((acc, v, i) => {\n acc[`${v}`] = facets[1][i];\n return acc;\n }, {});\n context.facetFieldsMap(facetKeys);\n }\n },\n facetFieldsMap: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n minOuterRadius: 10,\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef, getValuesMap } from './helper';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null,\n meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n context._cachedValuesMap = ((model) => {\n let valuesMap = null;\n return () => {\n if (valuesMap) {\n return valuesMap;\n }\n valuesMap = getValuesMap(model, context);\n return valuesMap;\n };\n })(data);\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { VolatileBehaviour } from '@chartshq/muze-firebolt';\nimport { PSEUDO_SELECT } from '../../enums/behaviours';\n\nexport default class PseudoSelectBehaviour extends VolatileBehaviour {\n static formalName () {\n return PSEUDO_SELECT;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport UnitBrushBehaviour from './firebolt/behaviours/brush';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange,\n unionDomainFromLayers,\n createRTree\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\nimport { REACTIVE_PROPS } from './enums';\nimport { PSEUDO_SELECT } from './enums/behaviours';\nimport PseudoSelectBehaviour from './firebolt/behaviours/pseudo-select';\n\nconst FORMAL_NAME = 'VisualUnit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, this.constructor.getterSetters());\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((this.localOptions())).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getterSetters () {\n return PROPS;\n }\n\n static localOptions () {\n return localOptions;\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: (context) => {\n const domain = context.calculateDomainFromData();\n context.dataDomain(domain);\n }\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n context._rtree = createRTree(context);\n\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, this.constructor.localOptions(), store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n this.createFireboltInstance();\n\n return this;\n }\n return this._store;\n }\n\n createFireboltInstance () {\n const { interactions } = this.registry();\n const { fireboltDeps } = this._dependencies;\n const Cls = this.getFireboltCls();\n\n this.firebolt(new Cls(this, {\n physical: Object.assign({}, interactions.physicalActions.get(), fireboltDeps.physicalActions),\n behavioural: Object.assign({}, interactions.behaviours.get(), {\n [UnitBrushBehaviour.formalName()]: UnitBrushBehaviour,\n [PSEUDO_SELECT]: PseudoSelectBehaviour\n }, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: this.getActionBehaviourMap()\n }, Object.assign({}, interactions.sideEffects.get(), fireboltDeps.sideEffects), this.getBehaviourEffectMap()));\n\n return this;\n }\n\n getFireboltCls () {\n return UnitFireBolt;\n }\n\n getBehaviourEffectMap () {\n return behaviourEffectMap;\n }\n\n getActionBehaviourMap () {\n return actionBehaviourMap;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n this.createRootContainers(container);\n\n setAxisRange(this);\n this.renderLayers();\n const node = this._rootSvg.node();\n const { sideEffectClassName, classPrefix } = this.config();\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n createRootContainers (container) {\n const config = this.config();\n const { className, defClassName } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n return this;\n }\n\n renderLayers () {\n const width = this.width();\n const height = this.height();\n const node = this._rootSvg.node();\n\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: layers, action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel, hasBarLayer) {\n if (!identifiers) return null;\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode, hasBarLayer);\n }\n\n /**\n * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes(),\n retinalFields: this.retinalFields(),\n layers: this.layers(),\n timeDiffs: this.timeDiffsByField()\n };\n }\n\n dataDomain (...params) {\n const { namespace } = this.metaInf();\n const store = this.store();\n const prop = `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${REACTIVE_PROPS.DOMAIN}`;\n if (params.length) {\n const domain = params[0];\n store.commit(prop, domain, namespace);\n }\n return store.get(prop, namespace);\n }\n\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n dimValue[0].push(ReservedFields.MEASURE_NAMES);\n pointObj.id = dimValue;\n const layers = this.layers();\n const pointInf = this.getMarkInfFromLayers(x, y, { ...config, dimValue });\n layers.forEach((layer) => {\n const measures = layer.data().getSchema()\n .filter(d => d.type === FieldType.MEASURE).map(d => d.name);\n for (let i = 1, len = dimValue.length; i < len; i++) {\n dimValue[i].push(measures.join());\n }\n });\n pointObj.target = pointInf && pointInf.id ? pointInf.id : null;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, { ...config, dimValue }) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n calculateDomainFromData () {\n const domain = unionDomainFromLayers(this.layers(), this.fields(), this._layerAxisIndex,\n this.data().getFieldsConfig());\n return domain;\n }\n\n getValueFromId (id, fields, fieldsConfig) {\n const { idValuesMap } = this._cachedValuesMap();\n const row = idValuesMap[id];\n const filteredRow = fields.map(d => (d === ReservedFields.ROW_ID ? id : row[fieldsConfig[d].index]));\n\n return filteredRow;\n }\n\n getRangeFromIdentifiers ({ criteria, fields }) {\n return fields.reduce((acc, v) => {\n acc[v] = criteria[v];\n return acc;\n }, {});\n }\n\n getRangeFromPositions ({ startPos, endPos }) {\n const { x, y } = this.fields();\n const axes = this.axes();\n const xField = x[0];\n const yField = y[0];\n const xFieldType = x[0].type();\n const yFieldType = y[0].type();\n const dimensions = Object.keys(this.data().getFieldspace().getDimension());\n\n if (xFieldType === FieldType.MEASURE && yFieldType === FieldType.MEASURE) {\n const dom = {\n x: axes.x[0].invertExtent(startPos.x, endPos.x).sort((a, b) => a - b),\n y: axes.y[0].invertExtent(startPos.y, endPos.y).sort((a, b) => a - b)\n };\n const range = {};\n if (`${xField}` === `${yField}`) {\n const xdom = dom.x;\n const ydom = dom.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n range[xField] = [];\n } else {\n range[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n } else {\n range[xField] = dom.x;\n range[yField] = dom.y;\n }\n return range;\n } else if (xFieldType === FieldType.DIMENSION || yFieldType === FieldType.DIMENSION) {\n const points = this._rtree.search({\n minX: startPos.x,\n minY: startPos.y,\n maxX: endPos.x,\n maxY: endPos.y\n });\n\n const criteria = [[]];\n dimensions.forEach((field) => {\n criteria[0].push(`${field}`);\n });\n\n points.forEach((point) => {\n const data = point.data;\n const vals = [];\n dimensions.forEach((field) => {\n vals.push(data[field]);\n });\n criteria.push(vals);\n });\n return criteria;\n }\n return null;\n }\n}\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n *\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n *\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\nexport const BORDER_WIDTH = {\n default: 2,\n facet: 1\n};\n","import {\n DARK,\n NONE,\n LEFT,\n RIGHT,\n NORMAL,\n TOP,\n DARKER,\n BOTTOM\n} from '../enums/constants';\n\nconst handleBlankCell = (data) => {\n data.config().externalClassname.push(`${NONE}-${LEFT}`);\n data.config().externalClassname.push(`${NONE}-${RIGHT}`);\n};\n\nexport const sanitiseHeaderMatrix = (matrices, header) => {\n if (header) {\n for (let i = 0; i < matrices.length; i++) {\n if (i !== 0) {\n matrices[i].config({\n externalClassname: [`${DARK}`]\n });\n } else {\n matrices[i].config({\n externalClassname: [`${NONE}-${LEFT}`, `${DARK}`]\n });\n }\n }\n } else {\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [`${DARK}`]\n });\n }\n }\n }\n};\n\nexport const sanitiseGeomMatrix = (matrices, arr = {}) => {\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [`${NORMAL}`]\n });\n\n if (i === 0) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${TOP}`);\n } else if (i === matrices.length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n }\n\n if (j === matrices[i].length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARK}-${RIGHT}`);\n }\n\n if (arr[i]) {\n matrices[i - 1][j].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n }\n }\n};\n\nexport const sanitiseFacetValues = (matrices, type, blankCell) => {\n const normal = type === `${RIGHT}` ? `${DARK}` : `${NORMAL}`;\n const length = matrices.length;\n let latestSource = matrices[0][0].source();\n const lastSource = matrices[matrices.length - 1][0].source();\n const arr = {};\n\n // initialise the classname\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [normal]\n });\n }\n\n // seperate wrt the corner most facet\n if (matrices[i][0].source() !== latestSource) {\n arr[i] = i;\n latestSource = matrices[i][0].source();\n }\n }\n\n // add custom classname\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n if (j === 0) {\n matrices[i][0].config().externalClassname.push(`${NONE}-${type}`);\n if (matrices[i][j].source() === lastSource) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n } else {\n matrices[i][0].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n if (matrices[i][j] instanceof blankCell) {\n matrices[i][j].config().externalClassname.push(`${NONE}-${TOP}`);\n matrices[i][j].config().externalClassname.push(`${NONE}-${BOTTOM}`);\n }\n } else if (j !== matrices[i].length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARK}-${type}`);\n }\n\n if (i === 0) {\n matrices[0][j].config().externalClassname.push(`${DARKER}-${TOP}`);\n } else if (i === length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n }\n\n if (arr[i]) {\n matrices[i - 1][j].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n\n if (matrices[i][j] instanceof blankCell) {\n handleBlankCell(matrices[i][j], blankCell);\n }\n }\n }\n return arr;\n};\n\nexport const sanitiseBorderMatrix = (matrices, blankCell) => {\n const { leftMatrix, rightMatrix, topMatrix, bottomMatrix } = matrices;\n let bottomBorderObj = {};\n if (rightMatrix.length) {\n bottomBorderObj = sanitiseFacetValues(rightMatrix, `${RIGHT}`, blankCell);\n }\n if (leftMatrix.length) {\n bottomBorderObj = sanitiseFacetValues(leftMatrix, `${LEFT}`, blankCell);\n }\n topMatrix.length && sanitiseHeaderMatrix(topMatrix);\n bottomMatrix.length && sanitiseHeaderMatrix(bottomMatrix);\n return bottomBorderObj;\n};\n","import { Store, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport { sanitiseHeaderMatrix } from './cell-border-applier';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, ...params) => `${axisName}-axis-${params.join('-')}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n *\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\nexport const hasOneField = (fields) => {\n let hasField = false;\n const keys = Object.keys(fields);\n hasField = keys.some(d => fields[d].length > 0);\n return hasField;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n *\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n labelManager\n }).source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n sanitiseHeaderMatrix(headers, true);\n return headers;\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n *\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.name() === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n *\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {};\n borders.top = false;\n borders.bottom = false;\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {};\n borders.left = false;\n borders.right = false;\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false };\n let showColBorders = { left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig) => {\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n const fields = [].concat(...encodingArr.map(enc => Object.values(enc).map(d => (typeof d === 'object' ?\n d.field : d))));\n return [...new Set(fields.filter(d => d))];\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n\n/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n facetNames.push(name);\n\n const facetSortConfig = sortConfig[name];\n\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n } else {\n sortInfo.push([name, null]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).getData({ sort: sortInfo }).data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","export const PROPS = {\n layers: {},\n data: {},\n globalConfig: {}\n};\n","import { ERROR_MSG, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom, getFieldsFromSuppliedLayers, hasOneField } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\nimport { PROPS } from './props';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n constructor () {\n generateGetterSetters(this, PROPS);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n *\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n\n getProjectionFields (layers) {\n return getFieldsFromSuppliedLayers(layers);\n }\n\n hasMandatoryFields (fields) {\n return hasOneField(fields);\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { DataModel, mergeRecursive } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\nimport { BORDER_WIDTH } from '../enums/defaults';\nimport { FACET } from '../enums/constants';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\nconst setDefaultConfigForFacet = (facetInfo, projectionInfo, config) => {\n let conf = {};\n\n if (facetInfo.allFacets.length || projectionInfo.indices.length > 1) {\n const { facetsUserConfig, border } = config;\n const { isBorderPresent, isGridLinePresent } = facetsUserConfig;\n const gridLinesShowLength = Object.keys(isGridLinePresent).length;\n let borderWidth = border.width;\n let gridLines = {};\n\n if (!isBorderPresent) {\n borderWidth = BORDER_WIDTH[FACET];\n }\n if (gridLinesShowLength <= 0) {\n gridLines = {\n x: {\n show: false\n }\n };\n }\n conf = {\n border: {\n width: borderWidth\n },\n gridLines\n };\n }\n return conf;\n};\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator Callback executed after datamodels are prepared after sel/proj\n* @return {Object} set of matrices with the corresponding row and column keys\n*/\nexport const getMatrixModel = (dataModel, fieldInfo, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const defaultConfig = setDefaultConfigForFacet(facetInfo, projectionInfo, globalConfig);\n globalConfig = mergeRecursive(globalConfig, defaultConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\nimport { sanitiseBorderMatrix, sanitiseGeomMatrix } from './cell-border-applier';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n *\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const sortedFields = config.sort;\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n // Sort datamodel if user has sorted a field\n const sortConfig = Object.keys(sortedFields).map(field => [field, sortedFields[field]]);\n if (sortConfig.length) {\n datamodel = datamodel.sort(sortConfig, { saveChild: true });\n }\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return `${e}-${id}`;\n }, '')).map((currObj, axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n (label) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facet,\n encoders,\n resolver\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj,\n colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n\n const fields = getFieldsFromSuppliedLayers(suppliedLayers).filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const allFields = extractFields(facetsAndProjections, fields);\n\n groupedModel = dataModel.project(allFields);\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const newFieldsConfig = groupedModel.getFieldsConfig();\n const dimensions = allFields.filter(field =>\n getObjProp(newFieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n resolver.transformedData(groupedModel);\n return groupedModel;\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (resolverConfig) => {\n let placeholderInfo = {};\n const {\n datamodel,\n encoders,\n resolver,\n globalConfig,\n selection,\n transform,\n componentRegistry,\n groupBy,\n labelManager,\n fieldMap,\n layerConfig,\n registry,\n normalizedRows,\n normalizedColumns,\n otherEncodings,\n facetsAndProjections,\n simpleEncoder,\n config\n } = resolverConfig;\n\n const { rowFacets, colFacets, colProjections, rowProjections } = facetsAndProjections;\n const isProjection = rowProjections.length > 0 || colProjections.length > 0;\n const isFacet = rowFacets.length > 0 || colFacets.length > 0;\n\n if (isFacet) {\n globalConfig.isFacet = true;\n }\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.cells.GeomCell),\n AxisCell: resolver.getCellDef(registry.cells.AxisCell),\n BlankCell: resolver.getCellDef(registry.cells.BlankCell),\n TextCell: resolver.getCellDef(registry.cells.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: simpleEncoder,\n newCacheMap,\n detailFields: config.detail,\n retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\n simpleEncoder.data(groupedModel);\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n if (isFacet || isProjection) {\n const arr = sanitiseBorderMatrix({\n leftMatrix: rows[0],\n rightMatrix: rows[1],\n topMatrix: columns[0],\n bottomMatrix: columns[1]\n }, registry.cells.BlankCell);\n valueMatrixInfo.matrix = sanitiseGeomMatrix(valueMatrixInfo.matrix, arr);\n }\n\n placeholderInfo = {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n return placeholderInfo;\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {},\n transformedData: {},\n store: {}\n};\n","import { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\nimport { RESOLVER_PROPS } from './resolver-props';\n\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n this._placeholderInfo = {};\n generateGetterSetters(this, this.constructor.getterSetters());\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n static getterSetters () {\n return RESOLVER_PROPS;\n }\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n optionalProjections (config, layerConfig, schema) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n const encoder = this.encoder();\n optionalProjections.push(...encoder.getProjectionFields(layerConfig, schema));\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry().cells;\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set(),\n radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias,\n coord\n } = config;\n const {\n layerRegistry,\n interactions\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n const { VisualUnit } = this.registry();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n interactions\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setRetinalAxisDomain (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.getRetinalAxes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n createRetinalAxes (fieldsConfig, config, encoders) {\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n\n this.axes(retinalAxes);\n\n this.updateVisualUnit(config);\n\n return this;\n }\n\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const {\n showHeaders,\n classPrefix\n } = config;\n const { TextCell, BlankCell } = this.registry().cells;\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager })\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n updateVisualUnit (retinalConfig) {\n const retinalAxes = this.getRetinalAxes();\n\n const { lifeCycleManager } = this.dependencies();\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(retinalConfig);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n getMatrices (resolverConfig) {\n this._placeholderInfo = computeMatrices(resolverConfig);\n\n return this._placeholderInfo;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","import { MeasureSubtype, DimensionSubtype, FieldType } from 'muze-utils';\n\nimport { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [FieldType.DIMENSION]: ScaleType.BAND,\n [DimensionSubtype.CATEGORICAL]: ScaleType.BAND,\n [DimensionSubtype.TEMPORAL]: ScaleType.TIME,\n [FieldType.MEASURE]: ScaleType.LINEAR,\n [MeasureSubtype.CONTINUOUS]: ScaleType.LINEAR,\n [DimensionSubtype.BINNED]: ScaleType.BAND\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return [\n [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n }\n });\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n *\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n *\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n\nexport const getSortingConfig = (context, currentFieldName, axesConfig) => {\n const config = context.config();\n const dataModel = context.data();\n\n let lastSortConfig = null;\n if (Object.keys(config.sort).length !== 0) {\n return config.sort[currentFieldName];\n }\n\n const operations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n\n while (lastSortConfig = operations.pop()) {\n if (lastSortConfig.op === 'sort') break;\n }\n if (lastSortConfig &&\n lastSortConfig.criteria.length &&\n lastSortConfig.criteria[0][0] === currentFieldName) {\n return lastSortConfig.criteria[0][1];\n }\n return axesConfig().defaultSort;\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig,\n getSortingConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const { resolver, facetFields, geomCell } = context;\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.dataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = getSortingConfig(context, currentFieldName, axes[0].config);\n if (sortingOrder && domains[axisType][key] instanceof Array) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n const domain = retriveDomainFromData(groupedModel, field);\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n\n hasMandatoryFields (fields) {\n const { colProjections, rowProjections } = fields;\n const colFields = super.hasMandatoryFields({ colProjections });\n const rowFields = super.hasMandatoryFields({ rowProjections });\n return colFields && rowFields;\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.dataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.groupedModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: GROUP_BY_FUNCTIONS.SUM\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n hasMandatoryFields (fields) {\n const { optionalProjections } = fields;\n return super.hasMandatoryFields({ optionalProjections });\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n *\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n\n return axes;\n }\n}\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr || []);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n\n data () {\n\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps, InvalidAwareTypes } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\nimport { ROWS, COLUMNS, DATA } from '../enums/constants';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nconst hasValue = (val) => {\n let hasOneValue = false;\n for (let i = 0; i < val.length && !hasOneValue; i++) {\n for (let j = 0; j < val[i].length; j++) {\n if (!(val[i][j] instanceof InvalidAwareTypes)) {\n hasOneValue = true;\n break;\n }\n }\n }\n return hasOneValue;\n};\n\nexport const updateChecker = (context, props) => props.every((option) => {\n const val = context[option]();\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n case DATA:\n return val && !val.isEmpty() && hasValue(val.getData().data);\n\n default:\n return true;\n }\n});\n\nexport const initializeFields = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n // Get the resolver for the matrices\n const resolver = context.resolver();\n\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = context.createEncoderInstance();\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n\n return {\n rows,\n columns,\n color,\n datamodel,\n size,\n detail,\n layers,\n transform,\n config,\n shape,\n resolver,\n matrixConfig,\n retinalConfig,\n encoders,\n fields\n };\n};\n\nexport const createMatrices = (context, sanitizedConfig) => {\n const { groupConfig, resolverConfig } = sanitizedConfig;\n const {\n config,\n resolver,\n matrixConfig,\n encoders,\n retinalConfig,\n fields\n } = groupConfig;\n\n const placeholderInfo = resolver.getMatrices(resolverConfig);\n\n context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setRetinalAxisDomain(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n\n resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n\nexport const initializeResolverFields = (context, config) => {\n const {\n datamodel,\n encoders,\n resolver,\n componentRegistry\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig, datamodel.getSchema());\n const facetsAndProjections = resolver.getAllFields();\n const { simpleEncoder } = encoders;\n const shouldRender = simpleEncoder.hasMandatoryFields(facetsAndProjections);\n return {\n datamodel,\n encoders,\n resolver,\n globalConfig,\n selection,\n transform,\n componentRegistry,\n groupBy,\n labelManager,\n fieldMap,\n layerConfig,\n registry,\n normalizedRows,\n normalizedColumns,\n otherEncodings,\n facetsAndProjections,\n simpleEncoder,\n shouldRender,\n config\n };\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n const { VisualUnit, layerRegistry } = context.registry();\n const { base: BaseLayer } = layerRegistry;\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry({\n cells: value.cellRegistry,\n VisualUnit: value.VisualUnit\n });\n }\n return value;\n }\n },\n selection: {},\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup,\n getEncoder\n} from '../group-helper';\nimport {\n createUnitState,\n initializeGlobalState,\n setMatrixInstances,\n createMatrices,\n createLayerState,\n initializeResolverFields,\n initializeFields,\n updateChecker\n} from './helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y,\n ROWS,\n COLUMNS,\n DATA\n} from '../enums/constants';\n\n/**\n * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units.\n *\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n components,\n componentSubRegistry,\n interactions\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, this.constructor.getterSetters());\n generateGetterSetters(this, this.constructor.localOptions());\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.createMatrixResolver();\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layers.get(),\n cellRegistry: componentSubRegistry.cells.get(),\n VisualUnit: components.VisualUnit,\n interactions\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n static formalName () {\n return 'VisualGroup';\n }\n\n static localOptions () {\n return localOptions;\n }\n static getterSetters () {\n return PROPS;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\n */\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices (sanitizedConfig) {\n createMatrices(this, sanitizedConfig);\n }\n\n getMandatoryFields () {\n const updateProps = updateChecker(this, [ROWS, COLUMNS, DATA]);\n let sanitizedValue = {\n groupConfig: {},\n resolverConfig: {},\n shouldRender: false\n };\n if (updateProps) {\n const localFields = initializeFields(this);\n const {\n datamodel,\n encoders,\n resolver,\n matrixConfig\n } = localFields;\n const context = {\n datamodel,\n componentRegistry: this.registry(),\n encoders,\n resolver\n };\n const resolverFields = initializeResolverFields(context, matrixConfig);\n sanitizedValue = {\n groupConfig: localFields,\n resolverConfig: resolverFields,\n shouldRender: resolverFields.shouldRender\n };\n }\n return sanitizedValue;\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\n }\n\n createEncoderInstance () {\n const layers = this.layers();\n\n return getEncoder(layers);\n }\n\n createMatrixResolver () {\n this.resolver(new MatrixResolver(this._dependencies));\n\n return this;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt._propagationInf;\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n\n if (propagationInf.sourceId) {\n selectionSet.reset();\n selectionSet.add(addSet);\n } else {\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets(true);\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\nexport const Marker = 'marker';\n\n","import { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\n\nexport const propagate = (firebolt, action, identifiers) => {\n const context = firebolt.context;\n const data = context.metaData();\n\n const propPayload = {};\n propPayload.action = propagationBehaviourMap[action] || action;\n // @TODO: Change fade propagationSideEffect for area layer\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n\n const propConfig = {\n sourceId: firebolt.id(),\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : identifiers,\n isMutableAction,\n action: propPayload.action\n };\n\n data.propagate(identifiers, propConfig, true);\n};\n\nexport const payloadGenerator = {\n __default: (selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel.getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel.isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : [];\n return payload;\n },\n brush: (dm, propConfig) => {\n const { criteria } = propConfig;\n return {\n criteria: criteria ? criteria.range : criteria\n };\n }\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const MAXWIDTH = 'max-width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const VERTICAL_BUFFER = 10;\nexport const HORIZONTAL_BUFFER = 2;\nexport const DEFAULTICONSIZE = { // approximately the (size needed) * Math.PI value\n circle: 64,\n square: 45.8,\n default: 42.8\n};\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\nexport const DEFAULT = 'default';\n\nexport const POSITION_ALIGNMENT_MAP = {\n [LEFT]: VERTICAL,\n [RIGHT]: VERTICAL,\n [TOP]: HORIZONTAL,\n [BOTTOM]: HORIZONTAL\n};\n\nexport const OPPOSITE_POSITION = {\n [LEFT]: RIGHT,\n [RIGHT]: LEFT\n};\n\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate, payloadGenerator } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\nimport { HIGHLIGHT } from '../enums/behaviours';\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria;\n if (values instanceof Array) {\n values = values.slice(1, criteria.length);\n uniqueIds = [...new Set([].concat(...values))];\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const payloadFn = payloadGenerator[config.action] || payloadGenerator.__default;\n const payload = payloadFn(data, config);\n const { propagationSourceId } = config;\n const propagationInf = {\n propagate: false,\n data,\n sourceId: propagationSourceId\n };\n const isActionSourceSame = config.sourceId === this.id();\n if (!isActionSourceSame && config.action === HIGHLIGHT) {\n // @todo make it configurable\n this.dispatchBehaviour(HIGHLIGHT, payload, propagationInf);\n }\n };\n }\n\n data () {\n return this.context.metaData();\n }\n\n id () {\n return `legend-${this.context._id}`;\n }\n\n sourceCanvas () {\n return this.context.canvasAlias();\n }\n\n shouldApplySideEffects () {\n return true;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: null\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","import { getEvent } from 'muze-utils';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n firebolt.triggerPhysicalAction('hover', payload);\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n const event = getEvent();\n firebolt.triggerPhysicalAction('hover', {\n criteria: null\n });\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { getSymbol, mergeRecursive } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n marginHorizontal: 3,\n paddingRight: 4,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n buffer: {\n [ALIGN.HORIZONTAL]: 10,\n [ALIGN.VERTICAL]: 10\n },\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: (val, i, data, context) => context.valueParser()(val)\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(192,192,192,0.6)',\n type: 'square'\n }\n }\n // stops: 5\n};\n\nconst tempConfig = mergeRecursive({}, DEFAULT_CONFIG);\n\nconst ITEM_FORMATTER = {\n item: {\n text: {\n formatter: val => `${val[0]} - ${val[1]}`\n }\n }\n};\n\nexport const STEP_DEFAULT_CONFIG = mergeRecursive(tempConfig, ITEM_FORMATTER);\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n\nexport const LEGEND_MARKER_PROPS = {\n size: 8,\n ROTATE_HORIZONTAL: 180,\n ROTATE_VERTICAL: 90,\n shape: 'triangle'\n};\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport { LEGEND_MARKER_PROPS } from '../../../legend/defaults';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._graphicElems = {\n rect: null\n };\n }\n\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n const { criteria } = payload;\n const { rect } = this._graphicElems;\n\n if (criteria === null) {\n rect && rect.remove();\n return this;\n }\n\n const domain = criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1],\n `${config.classPrefix}-selection-box-group`);\n\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = LEGEND_MARKER_PROPS.size + 4;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = LEGEND_MARKER_PROPS.size + 4;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n this._graphicElems.rect = selBox;\n return this;\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n const uids = set.uids.map(d => d[0]);\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { makeElement, getSymbol } from 'muze-utils';\nimport { Marker } from '../../../enums/side-effects';\nimport { CLASSPREFIX, HORIZONTAL } from '../../../enums/constants';\nimport { LEGEND_MARKER_PROPS } from '../../../legend/defaults';\nimport './styles.scss';\n\nconst SYMBOL_PADDING = (Math.sqrt(3) * 3);\nconst AXIS_STROKE = 1;\nconst MARKER_BUFFER = 10;\n\nconst createTextCell = (className, labelManagerRef, cells) => {\n const { TextCell } = cells;\n const cell = new TextCell(\n {\n type: 'text',\n className: `${className}-text`\n }, {\n labelManager: labelManagerRef()\n }).config({ maxLines: 1 });\n cell._minTickDiff = { height: 0, width: 0 };\n\n return cell;\n};\n\nconst getRelativePosition = (canvas, legendContainer) => ({\n top: legendContainer.getBoundingClientRect().top - canvas.getBoundingClientRect().top,\n left: legendContainer.getBoundingClientRect().left - canvas.getBoundingClientRect().left\n});\nexport default class LegendMarker extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._graphicElements = {\n markerElement: null,\n legendmarkerTextContainer: null,\n legendmarkerText: null\n };\n }\n\n static formalName () {\n return Marker;\n }\n\n /**\n * It returns the default configuration needed by legend-marker.\n * @return {Object} Default configuration of the legend-marker.\n */\n static defaultConfig () {\n return {\n className: 'legend-marker',\n classPrefix: CLASSPREFIX,\n size: LEGEND_MARKER_PROPS.size,\n shape: LEGEND_MARKER_PROPS.shape\n };\n }\n\n apply (selectionSet, payload) {\n const className = `${this.config().classPrefix}-${this.config().className}`;\n if (payload.criteria && payload.criteria.length === 2) {\n const physicalAction = function () {\n // Register physical action on marker gere\n };\n const firebolt = this.firebolt;\n const labelManager = firebolt.context.labelManager;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n\n const range = payload.criteria[0] ? axis.getScaleValue(payload.criteria[1]) : 0;\n\n const legendGradContainer = context.getDrawingContext().svgContainer;\n\n const isFractional = payload.criteria[1][0] % 1 !== 0;\n\n const lableConfig = {\n top: 0,\n left: 0,\n labelText: isFractional ? payload.criteria[1][0].toFixed(2) : payload.criteria[1][0]\n };\n\n const { top, left } = getRelativePosition(context._canvasMount, legendGradContainer.node());\n const { oriTextHeight, oriTextWidth } = labelManager().getSmartText(lableConfig.labelText);\n let x;\n let y;\n let rotateAngle;\n\n const { size, shape } = config;\n if (context.config().align === HORIZONTAL) {\n x = range - (Math.sqrt(size / SYMBOL_PADDING)) + AXIS_STROKE;\n y = 5;\n rotateAngle = LEGEND_MARKER_PROPS.ROTATE_HORIZONTAL;\n lableConfig.top = top + y - 3 * MARKER_BUFFER;\n lableConfig.left = x + left - (oriTextWidth / 2) - (MARKER_BUFFER / 2);\n } else {\n y = range + Math.sqrt(size / (2 * SYMBOL_PADDING)) - AXIS_STROKE;\n x = 5;\n rotateAngle = LEGEND_MARKER_PROPS.ROTATE_VERTICAL;\n lableConfig.top = top + y - (3 * MARKER_BUFFER - 2) + (oriTextHeight / 2);\n lableConfig.left = x + left - oriTextWidth - MARKER_BUFFER;\n }\n\n const legendmarkerGroup = makeElement(legendGradContainer,\n 'g',\n [1],\n `${config.classPrefix}-${config.className}-group`);\n\n if (!this._graphicElements.markerElement) {\n this._graphicElements.markerElement = makeElement(legendmarkerGroup,\n 'path', [{ value: null }], className, { enter: physicalAction });\n }\n\n if (!this._graphicElements.legendmarkerTextContainer) {\n this._graphicElements.legendmarkerTextContainer = makeElement(\n context._canvasMount,\n 'div',\n [1],\n `${className}-text-container`);\n this._graphicElements.legendmarkerText = makeElement(\n this._graphicElements.legendmarkerTextContainer,\n 'div',\n [1],\n `${className}-text`);\n }\n const textElement = createTextCell(className, labelManager, context._cells);\n this._graphicElements.markerElement\n .data([{ value: payload.criteria }])\n .attr('transform', `translate(${x},${y}) rotate(${rotateAngle})`)\n .attr('d', getSymbol(shape).size(size * size)())\n .classed(`${className}-show`, true)\n .classed(`${className}-hide`, false);\n textElement.source(lableConfig.labelText);\n textElement.render(this._graphicElements.legendmarkerText.node());\n this._graphicElements.legendmarkerText\n .attr('style', `top: ${lableConfig.top}px; left:${lableConfig.left}px`)\n .classed(`${className}-show`, true)\n .classed(`${className}-hide`, false);\n } else if (this._graphicElements.markerElement && this._graphicElements.legendmarkerText) {\n this._graphicElements.markerElement\n .data([{ value: null }])\n .classed(`${className}-show`, false)\n .classed(`${className}-hide`, true);\n this._graphicElements.legendmarkerText\n .classed(`${className}-show`, false)\n .classed(`${className}-hide`, true);\n }\n }\n\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {\n onset: (context, value) => context.firebolt().attachPropagationListener(value)\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n },\n labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { makeElement, FieldType, getReadableTicks } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n MAXWIDTH,\n CENTER,\n HORIZONTAL,\n POSITION_ALIGNMENT_MAP\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n return getReadableTicks(domain, steps);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const { orientation } = config.item.text;\n let textAlign = LEFT;\n const { alignment, maxWidth, width, height, border, padding } = measurement;\n\n if (orientation === TOP || orientation === BOTTOM || alignment === HORIZONTAL) {\n textAlign = CENTER;\n }\n const titleWidth = Math.min(maxWidth, width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}px`)\n .style(HEIGHT, `${height}px`)\n .style('border-bottom', `${border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${titleWidth}px`)\n .style(MAXWIDTH, `${maxWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${padding}px`)\n .text(title.text)\n .style('text-align', textAlign)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const formattedData = formatter(value, index, context.metaData(), context);\n const { height, width } = labelManager.getOriSize(formattedData);\n space[index] = { height, width };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n *\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth);\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n // iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + iconSpaces[i].width + 2 * effPadding;\n } else {\n labelSpaces[i].width = iconSpaces[i].width;\n itemSpaces[i].width = iconSpaces[i].width;\n labelSpaces[i].width = iconSpaces[i].width;\n }\n totalWidth += itemSpaces[i].width;\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelWidth + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n\nexport const prepareSelectionSetData = (data, fieldName, dm) => {\n const fieldType = dm.getFieldsConfig()[fieldName].def.type;\n if (fieldType === FieldType.DIMENSION) {\n return {\n keys: data.reduce((acc, d) => {\n acc[d.rawVal] = {\n uid: d.id,\n dims: [d.rawVal]\n\n };\n return acc;\n }, {}),\n fields: [fieldName]\n };\n }\n return {\n keys: data.reduce((acc, d) => {\n acc[d.id] = {\n uid: d.id,\n dims: [d.id]\n };\n return acc;\n }, {}),\n fields: [fieldName]\n };\n};\n\nexport const calculateTitleWidth = (measures, titleWidth, config) => {\n const { maxItemSpaces, margin, itemSpaces } = measures;\n const { position, buffer } = config;\n const alignment = POSITION_ALIGNMENT_MAP[position];\n let width = 0;\n\n if (alignment === HORIZONTAL) {\n const localBuffer = buffer[alignment];\n width = itemSpaces.reduce((acc, cur) => acc + cur.width + localBuffer, 0);\n } else if (maxItemSpaces.width < titleWidth) {\n width = titleWidth + 2 * margin;\n } else {\n width = maxItemSpaces.width;\n }\n return width;\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH, RIGHT, LEFT, TOP, BOTTOM, POSITION_ALIGNMENT_MAP } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport {\n getItemMeasures,\n titleCreator,\n computeItemSpaces,\n prepareSelectionSetData,\n calculateTitleWidth\n} from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n const { interactions } = dependencies.registry;\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, interactions.behaviours.get(), legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this, VALUE, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale());\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, maxWidth } = this.measurement();\n\n const width = calculateTitleWidth(\n this.measurement(),\n this._labelManager.getOriSize(this._title.text).width,\n this.config()\n );\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\n border,\n padding,\n borderStyle,\n borderColor,\n alignment: POSITION_ALIGNMENT_MAP[this.config().position]\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor,\n position\n } = this.config();\n const {\n border,\n marginHorizontal,\n maxHeight,\n height,\n width,\n maxWidth\n } = this.measurement();\n let {\n margin\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n margin = marginHorizontal;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n margin = marginHorizontal;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\n }\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n\n const widthBox = calculateTitleWidth(\n this.measurement(),\n this._labelManager.getOriSize(this._title.text).width,\n this.config()\n );\n\n const titleWidth = Math.min(maxWidth, widthBox);\n width < titleWidth ? selectElement(this.mount()).style('width', `${titleWidth}px`) : null;\n // set height and width\n legendContainer.style('width', `${titleWidth}px`)\n .style('height', `${Math.min(maxHeight, height)}px`)\n .style(`${marginPosition}`, `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(prepareSelectionSetData(this.data(), this.fieldName(), this.metaData()));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.rawVal]];\n }\n\n getValueFromId (id, fields = []) {\n const data = this.data();\n if (fields.length) {\n id = Number(id);\n return [data.find(d => id === d.id).rawVal];\n }\n\n return [];\n }\n\n getRangeFromIdentifiers ({ fields, entrySet }) {\n const data = this.data();\n const idRangeMap = data.reduce((acc, v) => {\n acc[v.id] = v;\n return acc;\n }, {});\n\n return fields.reduce((acc, v) => {\n acc[v] = entrySet.reduce((ranges, id) => {\n if (id in idRangeMap) {\n ranges.push(idRangeMap[id].range);\n }\n return ranges;\n }, []);\n return acc;\n }, {});\n }\n\n setParentInfo (info) {\n this._canvasMount = info.canvasRoot;\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n itemSpaces,\n width\n } = measurement;\n const {\n buffer\n } = config;\n return {\n row: {\n width: `${width + itemSpaces.length * buffer[HORIZONTAL] || 1}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width + buffer[HORIZONTAL]}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n DEFAULTICONSIZE,\n VERTICAL_BUFFER,\n HORIZONTAL_BUFFER,\n HORIZONTAL,\n VERTICAL,\n DEFAULT,\n TOP,\n BOTTOM,\n OPPOSITE_POSITION\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n *\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n *\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n\n const { align } = context.config().align;\n\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n\n if (measureType === 'width' && !stepColorCheck && align === VERTICAL) {\n return `${maxIconWidth}px`;\n } else if (align === HORIZONTAL) {\n return `${maxIconWidth}px`;\n }\n return `${iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const shape = d[1] || defaultIcon;\n const defaultIconSize = DEFAULTICONSIZE[shape] || DEFAULTICONSIZE[DEFAULT];\n const size = d[3] || defaultIconSize * Math.PI;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n padding,\n color,\n iconWidth,\n align\n } = context;\n\n let { maxIconWidth } = context;\n\n if (align === HORIZONTAL) {\n maxIconWidth = iconWidth + 2 * padding;\n }\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${Math.ceil(maxIconWidth)}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n const transalate = maxIconWidth / 2 - padding;\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, icon)\n .attr('transform', `translate(${transalate} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color)\n .attr('stroke', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix,\n shape,\n align\n } = context.config();\n const {\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n const marginHorizontalBuffer = HORIZONTAL_BUFFER;\n const marginVerticalBuffer = textOrientation === TOP || textOrientation === BOTTOM ? 0 : VERTICAL_BUFFER;\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = context.metaData();\n const position = OPPOSITE_POSITION[textOrientation] || LEFT;\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\n .style(`padding-${position}`, '0px')\n .style(`margin-${position}`, `${align === HORIZONTAL ? marginHorizontalBuffer : marginVerticalBuffer}px`);\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon(shape, selectElement(this), d, {\n classPrefix,\n // iconWidth,\n iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color,\n align\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = context.metaData();\n const data = context.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n const formattedData = formatter([data[d[6]].range[0], data[d[6]].range[1]], i, dataArr, context);\n selectElement(this).text(formattedData);\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal,\n getReadableTicks,\n InvalidAwareTypes\n} from 'muze-utils';\nimport SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn, steps } = getScaleInfo(scale);\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n let domainForLegend = [];\n if (scaleType === SIZE && type === FieldType.MEASURE) {\n domainForLegend = steps instanceof Array ? steps : getReadableTicks(domain, domain.length);\n } else if (subtype === DimensionSubtype.TEMPORAL) {\n domainForLegend = [...new Set(field.data())];\n } else {\n domainForLegend = [...new Set(domain)];\n }\n\n const len = domainForLegend.length;\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.MEASURE) {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, i === len - 1 ? nextVal.toFixed(0) : nextVal.toFixed(0) - 1];\n } else {\n let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend.sort((a, b) => {\n const domainValue =\n !(a.value instanceof InvalidAwareTypes || a.value instanceof InvalidAwareTypes)\n ? a.value.localeCompare(b.value)\n : 1;\n return domainValue;\n });\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n\n legendContainer.selectAll('div')\n .filter((datum, i, allSelections) => !allSelections[i].classList.contains(`${classPrefix}-legend-body`))\n .style('float', LEFT);\n\n firebolt.mapActionsAndBehaviour();\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN, LEGEND_MARKER_PROPS } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n *\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n *\n */\nexport const makeLinearGradient = (container, data, domain, id) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', `linear-gradient-${id}`)\n .attr('x1', '0%')\n .attr('y2', '0%');\n\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false,\n labels: {\n rotation: null\n }\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n *\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data, id) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain, id);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.source().config({\n tickFormat: (val, i) => context.config().item.text.formatter(val, i, context.metaData(), context)\n });\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n axis.source().render();\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data, context._id);\n const labelDim = context.axis().source().getAxisDimensions().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (margin * 2 + border * 2));\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} ${LEGEND_MARKER_PROPS.size + 4})`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(${LEGEND_MARKER_PROPS.size + 4} ${labelDim.height / 2})`);\n renderAxis(context, legendContainer, gradHeight - 2 * padding - 1, gradWidth - item.icon.width - padding * 2);\n\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height + LEGEND_MARKER_PROPS.size + 4}px`,\n width: `${gradientDimensions.width + LEGEND_MARKER_PROPS.size + 4}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: `url(#linear-gradient-${context._id})`\n });\n legendGradSvg.attr('height', gradientDimensions.height + LEGEND_MARKER_PROPS.size + 4);\n legendGradSvg.attr('width', gradientDimensions.width + LEGEND_MARKER_PROPS.size + 4);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData, getInterpolatedArrayData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { HIGHLIGHT } from '../enums/behaviours';\nimport { Marker } from '../enums/side-effects';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](ele),\n value: +value.toFixed(1),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n *\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.mapSideEffects({\n [HIGHLIGHT]: [Marker]\n });\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n\n getRangeFromIdentifiers ({ fields, criteria }) {\n return fields.reduce((range, v) => {\n range[v] = criteria[v];\n return range;\n }, {});\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getItemMeasures\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, HORIZONTAL } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\nimport { STEP_DEFAULT_CONFIG, DEFAULT_MEASUREMENT } from './defaults';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static defaultConfig () {\n STEP_DEFAULT_CONFIG.buffer[HORIZONTAL] = 0;\n return STEP_DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n const isFraction = ele => ele % 1 !== 0;\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainLeg[0] = domain[0];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainLeg.push(domain[1]);\n }\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n } else {\n domainLeg = getInterpolatedData(domain, steps, scaleParams);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n let range;\n if (i < domainLeg.length - 1) {\n const left = isFraction(ele) ? ele.toFixed(1) : ele;\n\n const numRight = +domainLeg[i + 1];\n const right = isFraction(numRight) ? numRight.toFixed(1) : numRight;\n\n value = `${left} - ${right}`;\n range = [left, right];\n } else if (domainLeg.length === 1) {\n value = isFraction(ele) ? ele.toFixed(1) : ele;\n\n const numRight = +domainLeg[i + 1];\n const right = isFraction(numRight) ? numRight.toFixed(1) : numRight;\n range = [value, right];\n }\n\n return {\n [scaleType]: scaleType === SIZE\n ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](ele),\n value,\n id: i + 1,\n range\n };\n }).filter(d => d.value !== null);\n\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const {\n item\n } = this.config();\n const stepItemBuffer = DEFAULT_MEASUREMENT.padding * 2;\n return getItemMeasures(this, 'range', item.text.formatter, stepItemBuffer);\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n return legendContainer;\n }\n\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\nexport const MUZE_PREFIX = 'muze';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const ICON_SHAPES = {\n SQUARE: 'square',\n CIRCLE: 'circle'\n};\n\nexport const IS_POINT_MAP = {\n true: ICON_SHAPES.CIRCLE,\n false: ICON_SHAPES.SQUARE\n};\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const POINT = 'point';\nexport const MESSAGE = 'message';\nexport const ERROR_MESSAGE = 'Insufficient data or incorrect configurations';\nexport const COMMON_INTERACTION = 'common';\nexport const INDIVIDUAL_INTERACTION = 'individual';\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n *\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive, CommonProps } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n },\n sideEffects: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\n */\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`,\n baseFontLimit: 16,\n upperFontLimit: 24,\n baseSizeLimit: 100,\n upperSizeLimit: 300,\n fractionImage: 0.8,\n fractionChild: 0.7\n};\n\nexport const CANVAS = 'canvas';\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module LocalOptions\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([title, titleConfig]) => {\n let t = title;\n if (typeof title === 'string' || !title) {\n t = () => title;\n }\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return [t, mergeRecursive(defConfig, titleConfig)];\n }\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([subtitle, subtitleConfig]) => {\n let sub = subtitle;\n if (typeof subtitle === 'string' || !subtitle) {\n sub = () => subtitle;\n }\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return [sub, mergeRecursive(defConfig, subtitleConfig)];\n }\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","import { COMMON_INTERACTION } from './constants';\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffects: {\n tooltip: COMMON_INTERACTION\n },\n behaviours: {\n highlight: COMMON_INTERACTION,\n select: COMMON_INTERACTION,\n brush: COMMON_INTERACTION\n },\n tooltip: {\n\n }\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n },\n invalidValues: {},\n sort: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\n }\n}\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser, FieldType } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { BEHAVIOURS } from '@chartshq/muze-firebolt';\nimport { payloadGenerator } from '@chartshq/visual-unit';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID, LEGEND }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixFacetConfig = (config) => {\n if (config) {\n let isBorderPresent = false;\n const isGridLinePresent = {};\n\n if (config.border && config.border.width) {\n isBorderPresent = true;\n }\n if (config.gridLines) {\n isGridLinePresent.x = !!config.gridLines.x;\n isGridLinePresent.y = !!config.gridLines.y;\n }\n const facetsUserConfig = {\n isBorderPresent,\n isGridLinePresent\n };\n return {\n facetsUserConfig,\n isFacet: false\n };\n }\n return {};\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const legend = layoutManager.getComponent(LEGEND);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n if (legend) {\n legend.setComponentInfo({ rootNode: parentContainer });\n }\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n\n const sanitizedData = visualGroup.getMandatoryFields();\n if (sanitizedData.shouldRender) {\n visualGroup.createMatrices(sanitizedData);\n } else {\n visualGroup.remove();\n }\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n dispatchProps(context);\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nconst applyPropagationPolicy = (firebolt, { behaviours, sideEffects }) => {\n for (const key in behaviours) {\n firebolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n firebolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n};\n\nconst isMeasure = fields => fields.every(field => field.type() === FieldType.MEASURE);\n\nconst isSplom = (fields) => {\n const { rowProjections, colProjections } = fields;\n const colProj = colProjections.flat();\n const rowProj = rowProjections.flat();\n\n if (isMeasure(colProj) && isMeasure(rowProj)) {\n return true;\n }\n return false;\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const splom = isSplom(visualGroup.resolver().getAllFields());\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n applyPropagationPolicy(unitFireBolt, { behaviours, sideEffects });\n if (splom) {\n unitFireBolt.payloadGenerators({\n [BEHAVIOURS.BRUSH]: (inst, dm, propConfig, facetFields) => payloadGenerator.brush(inst, dm,\n { ...propConfig, ...{ includeMeasures: false } }, facetFields)\n });\n unitFireBolt.sideEffects().selectionBox.config({\n persistent: true\n });\n } else {\n unitFireBolt.payloadGenerators({\n [BEHAVIOURS.BRUSH]: payloadGenerator.brush\n });\n unitFireBolt.sideEffects().selectionBox.config({\n persistent: false\n });\n }\n });\n applyPropagationPolicy(firebolt, { behaviours, sideEffects });\n }\n};\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nexport const setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig, fixFacetConfig } from './canvas/helper';\nimport { DEFAULT_CONFIG } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: [null, null],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n takesMultipleParams: true,\n sanitization: ([config, auxConfig = {}], oldConfig) => {\n // Stores additional config, if passed\n const { reset = false } = auxConfig;\n let oldConf = {};\n\n // handle the default cases for facet, as it is different to other charts\n const facetDefaultConfig = fixFacetConfig(config);\n config = mergeRecursive(config, facetDefaultConfig);\n\n if (!reset) {\n oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n }\n\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n\n return fixScrollBarConfig(newConf);\n }\n\n }\n }\n};\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n *\n * @memberof GenericLayout\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n this._config.border.width = Math.max(0, this._config.border.width);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n *\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n *\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistributeSpaces(width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableMatrices () {\n return this.viewableMatrix;\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const columnMeasures = [width, width];\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, j);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\n };\n};\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n","/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\n\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage,\n priority\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n\n context.rowMatrix(new RowMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.row,\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new ColumnMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = (isFacet, showHeaders) => ({\n [`${TOP}-${LEFT}`]: isFacet && showHeaders ? LEFT : NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: isFacet && showHeaders ? RIGHT : NO_BORDERS,\n [`${CENTER}-${LEFT}`]: isFacet ? `${CENTER}${LEFT}` : ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: isFacet ? `${CENTER}${RIGHT}` : ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n});\n\nconst applySpecificBorder = (params) => {\n const { type, borderWidth, borderStyle, cells, isFacet, color } = params;\n if (!isFacet) {\n cells.style(`border-${type}`, `${borderWidth}px ${borderStyle} ${color}`);\n } else {\n cells.style(`border-${type}-width`, `${borderWidth}px`);\n cells.style(`border-${type}-style`, `${borderStyle}`);\n }\n};\n\nconst specificBorderApplier = (params) => {\n const { borderTypes, showBorders, cells, borderInfo, name, isFacet } = params;\n const {\n color,\n style,\n width\n } = borderInfo;\n borderTypes.forEach((borderType) => {\n applySpecificBorder({\n cells,\n color: showBorders[borderType] ? color : BLANK_BORDERS,\n type: borderType,\n borderWidth: width,\n borderStyle: style,\n name,\n isFacet\n });\n });\n};\n\nconst borderApplier = (cells, borderInfo, name, isFacet) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n [ROW]: () => specificBorderApplier({\n borderTypes: [TOP, BOTTOM],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [COLUMN]: () => specificBorderApplier({\n borderTypes: [LEFT, RIGHT],\n showBorders: showColBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [CENTER]: () => specificBorderApplier({\n borderTypes: [LEFT, RIGHT, TOP, BOTTOM],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [LEFT]: () => specificBorderApplier({\n borderTypes: [LEFT],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [RIGHT]: () => specificBorderApplier({\n borderTypes: [RIGHT],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [`${CENTER}${LEFT}`]: () => specificBorderApplier({\n borderTypes: [LEFT, TOP, BOTTOM],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [`${CENTER}${RIGHT}`]: () => specificBorderApplier({\n borderTypes: [RIGHT, TOP, BOTTOM],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n })\n };\n};\n\nexport const applyBorders = (params) => {\n const { cells, border, row, column, isFacet, showHeaders } = params;\n const name = `${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`;\n const borderApplierFn = borderApplier(cells, border, name, isFacet);\n const borderMapVal = borderMap(isFacet, showHeaders)[name];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\n };\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n\nexport const PADDING = 'padding';\nexport const HEADER_PADDING = 'headerPadding';\nexport const TITLE_PADDING = 'titlePadding';\n\nexport const TITLE = 'title';\nexport const SUBTITLE = 'subtitle';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\nimport { SIMPLE_CELL } from './constants';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n static formalName () {\n return SIMPLE_CELL;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\n }\n\n}\n\nexport default SimpleCell;\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null,\n [CONSTANTS.PADDING]: {\n [CONSTANTS.LEFT]: 8,\n [CONSTANTS.RIGHT]: 8,\n [CONSTANTS.TOP]: 10,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.HEADER_PADDING]: {\n [CONSTANTS.LEFT]: 8,\n [CONSTANTS.RIGHT]: 5,\n [CONSTANTS.TOP]: 2,\n [CONSTANTS.BOTTOM]: 5\n },\n [CONSTANTS.TITLE_PADDING]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n }\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL, BOTTOM, TOP } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\nimport * as CONSTANTS from './constants';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n static formalName () {\n return CONSTANTS.AXIS_CELL;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n let actualWidth = 0;\n let actualHeight = 0;\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show,\n orientation\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\nimport * as CONSTANTS from './constants';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n static formalName () {\n return CONSTANTS.BLANK_CELL;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n\n getMinMeasures () {\n return 0;\n }\n }\nexport default BlankCell;\n","import {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n HEADER,\n TITLE,\n SUBTITLE\n} from './enums/constants';\n\nexport const setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\n\nexport const isTitleSubtitle = (subType) => {\n let returnVal = false;\n if (subType === `${TITLE}` || subType === `${SUBTITLE}`) {\n returnVal = true;\n }\n return returnVal;\n};\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nexport const computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n const { height: smHeight, width: smWidth } = smartSpace;\n space.width = smWidth;\n space.height = smHeight;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n const { subType, headerPadding } = context.config();\n if (!isTitleSubtitle(subType)) {\n space.width += headerPadding[LEFT] + headerPadding[RIGHT];\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\nexport const setPadding = (measures) => {\n const { elem, className, headerPadding, padding, type, titlePadding } = measures;\n let localPadding;\n if (isTitleSubtitle(className)) {\n localPadding = titlePadding;\n } else if (type === HEADER) {\n localPadding = headerPadding;\n } else {\n localPadding = padding;\n }\n [TOP, BOTTOM, LEFT, RIGHT].forEach((position) => {\n elem.style(`padding-${position}`, `${localPadding[position]}px`);\n });\n return elem;\n};\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\nimport * as CONSTANTS from './constants';\nimport {\n setSmartText,\n computeTextSpace,\n setPadding\n} from './text-cell-helper';\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n static formalName () {\n return CONSTANTS.TEXT_CELL;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n const space = computeTextSpace(this);\n this.logicalSpace(space);\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n setSmartText(this);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation,\n padding,\n type,\n headerPadding,\n className,\n titlePadding\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n let elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n\n [TOP, BOTTOM, LEFT, RIGHT].forEach((position) => {\n container.style(`margin-${position}`, `${margin[position]}px`);\n });\n\n elem = setPadding({ elem, className, headerPadding, padding, type, titlePadding });\n if (this._className === 'muze-grid-headers') {\n elem.style('text-align', textAlign);\n }\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport * as CONSTANTS from './constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n static formalName () {\n return CONSTANTS.GEOM_CELL;\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel()\n .width(width).height(height - this.getCaptionSpace().height)\n .unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n register: (def) => {\n const key = def.formalName();\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`,\n subType: cellType\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING,\n BORDER, MARGIN, SIZE, COLOR, IS_POINT_MAP, POINT\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n *\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field && scale) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n * @param {*} mark mark of the layers in the canvas\n * @param {*} scaleType type of the scale to draw the legend ie shape, size or color\n *\n */\nexport const legendIconShapeMapper = (layers, scaleType) => {\n const layerMarks = layers.map(el => el.mark);\n const shape = IS_POINT_MAP[(scaleType === COLOR || scaleType === SIZE)\n && layerMarks.includes(POINT)];\n return shape;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n const { invalidValues } = canvas.config();\n const interactionRegistry = canvas.registry().interactions;\n const parser = getValueParser(invalidValues);\n\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n },\n registry: {\n interactions: interactionRegistry\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n\n const mark = canvas.composition().visualGroup.resolver().matrixLayers()[0][0];\n config.shape = legendIconShapeMapper(mark, scaleType);\n\n legend.scale(scale)\n .valueParser(parser)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n *\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n *\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n\n setComponentInfo () {\n throw Error('setComponentInfo is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`);\n // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`);\n mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .style('width', d => `${d.legend.measurement().width}px`)\n .each(function (d) { d.legend.mount(this); });\n }\n }\n\n draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n setComponentInfo (params) {\n const { rootNode } = params;\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n leg.setParentInfo({ canvasRoot: rootNode });\n });\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\nimport '../../border-applier.scss';\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n const { classPrefix, row, column, dimensions, border, isFacet, showHeaders } = this.params.config;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders({ cells, border, row, column, isFacet, showHeaders });\n }\n\n renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td',\n (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {\n update: (elem, cell) => {\n const { externalClassname } = cell.placeholder.config();\n externalClassname && externalClassname.map(d => elem.classed(`${className}-${d}`, true));\n }\n }, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n }\n\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n const { isFacet, showHeaders } = this.params.component.config();\n matrixConfig.isFacet = isFacet;\n matrixConfig.showHeaders = showHeaders;\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const { isFacet, showHeaders } = this.params.component.config();\n matrixConfig.isFacet = isFacet;\n matrixConfig.showHeaders = showHeaders;\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { incorrectMessageIcon } from './message-icon';\nimport { MESSAGE_CONFIG } from '../defaults';\n\nconst formatFontSize = (width, height) => {\n const { baseFontLimit, upperFontLimit, baseSizeLimit, upperSizeLimit } = MESSAGE_CONFIG;\n const fractionFont = (upperSizeLimit - baseSizeLimit) / (upperFontLimit - baseFontLimit);\n let fontSize = upperFontLimit;\n const dim = width < height && width !== 0 ? width : height;\n\n if (dim === 0) {\n fontSize = 0;\n } else if (dim <= baseSizeLimit) {\n fontSize = baseFontLimit;\n } else if (dim > baseSizeLimit && dim < upperSizeLimit) {\n fontSize = baseFontLimit + (upperSizeLimit - dim) / fractionFont;\n }\n return fontSize;\n};\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const childHeight = height > MESSAGE_CONFIG.baseSizeLimit ? MESSAGE_CONFIG.fractionChild * height : 0;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const childNode = makeElement(node, 'div', [1], `${className}-child`);\n const imageNode = makeElement(childNode, 'div', [1], `${className}-child-img`);\n const messageNode = makeElement(childNode, 'div', [1], `${className}-child-message`);\n\n applyStyle(childNode, { width, height: `${childHeight}px` });\n applyStyle(imageNode, { width, height: `${childHeight * MESSAGE_CONFIG.fractionImage}px` });\n\n imageNode.html(incorrectMessageIcon);\n\n const textElement = makeElement(messageNode, 'text', [1]);\n applyStyle(messageNode, { 'font-size': `${formatFontSize(width, height)}px` });\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n const { target, className } = params.config;\n this.component = params.component;\n this.params = params;\n this.target(target);\n this.className(className);\n this.position(params.config.position);\n return this;\n }\n}\n","export const incorrectMessageIcon = `\n\n\nGroup 23\n Created with Sketch.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n ERROR_MESSAGE,\n HORIZONTAL_CENTER\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n// Mapping of header alignment values\nconst headerAlignmentMap = {\n [LEFT]: LEFT,\n [RIGHT]: RIGHT,\n [CENTER]: HORIZONTAL_CENTER\n};\n\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: headerAlignmentMap[headerConfig.align],\n className: configType.className\n });\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, renderDetails, renderGrid) => {\n const { components, measurement } = renderDetails;\n const headerValues = Object.values(components.headers);\n let sum = 0;\n let messageWrapper = null;\n\n for (const val of headerValues) {\n sum += val.logicalSpace().height;\n }\n\n if (!renderGrid) {\n const defaultDimensions = { height: measurement.canvasHeight - sum, width: measurement.canvasWidth };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: ERROR_MESSAGE,\n classPrefix: MESSAGE_CONFIG,\n position: TOP\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent.updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n *\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import { isSimpleObject, ReservedFields, FieldType } from 'muze-utils';\nimport { getSideEffects, BEHAVIOURS } from '@chartshq/muze-firebolt';\nimport { PSEUDO_SELECT } from '@chartshq/visual-unit/src/enums/behaviours';\nimport { COMMON_INTERACTION } from '../../constants';\n\nexport const addFacetDataAndMeasureNames = (data, facetData, measureNames) => {\n if (data === null) {\n return data;\n }\n\n const facets = Object.keys(facetData);\n const facetVals = Object.values(facetData);\n\n if (isSimpleObject(data)) {\n return Object.assign({}, Object.keys(facetData).reduce((acc, v) => {\n acc[v] = [facetData[v]];\n return acc;\n }, {}), data, {\n [ReservedFields.MEASURE_NAMES]: measureNames\n });\n }\n const criteriaFields = data[0];\n const hasMeasureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES);\n const fieldsWithFacets = [...facets, ...criteriaFields,\n ...(hasMeasureNameField ? [] : [ReservedFields.MEASURE_NAMES])];\n\n const dataWithFacets = [\n fieldsWithFacets\n ];\n\n for (let i = 1, len = data.length; i < len; i++) {\n let measureNameArr = [];\n if (!hasMeasureNameField && measureNames) {\n measureNameArr = measureNames;\n }\n const row = [...facetVals, ...data[i], ...measureNameArr];\n dataWithFacets.push(row);\n }\n return dataWithFacets;\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n const { payload, identifiers, sourceUnitId, sourceCanvasId, propagationDataSource } = config;\n const dataModel = propagationDataSource;\n const sideEfffects = instance._sideEffectDefinitions;\n const behaviourEffectMap = instance._behaviourEffectMap;\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n payload.sourceUnit = sourceUnitId;\n payload.action = action;\n payload.sourceCanvas = sourceCanvasId;\n\n const groupId = sourceCanvasId;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n (effects ? effects.some(d => sideEfffects[d.name || d].mutates()) : false) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n let isMutableAction = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n const propConfig = {\n payload,\n action,\n criteria: identifiers,\n isMutableAction,\n groupId,\n sourceId: config.sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.sourceCanvas() : true)\n };\n\n dataModel.propagate(identifiers, propConfig, true);\n\n if (action !== propagationBehaviour) {\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n dataModel.propagate(identifiers, Object.assign({}, propConfig, {\n isMutableAction,\n applyOnSource: false,\n action: propagationBehaviour,\n sourceId: isMutableAction ? groupId : sourceUnitId,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.sourceCanvas()\n }), true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n\nconst isDimension = fields => fields.some(field => field.type() === FieldType.DIMENSION);\n\nexport const isCrosstab = (fields) => {\n const { rowFacets, colFacets, rowProjections, colProjections } = fields;\n if (rowFacets.length || colFacets.length) {\n return true;\n }\n const colProj = colProjections.flat();\n const rowProj = rowProjections.flat();\n\n if ((isDimension(colProj) || isDimension(rowProj)) && (colProj.length > 1 || rowProj.length > 1)) {\n return true;\n }\n return false;\n};\n\nexport const addSelectedMeasuresInPayload = (firebolt, unit, payload) => {\n const groupFields = firebolt.context.composition().visualGroup.resolver().getAllFields();\n if (isCrosstab(groupFields)) {\n const { x, y } = unit.fields();\n let measureFields;\n\n if (x.length && y.length) {\n if (x[0].type() === FieldType.MEASURE) {\n measureFields = [`${x[0]}`];\n } else if (y[0].type() === FieldType.MEASURE) {\n measureFields = [`${y[0]}`];\n }\n payload.selectedMeasures = measureFields;\n }\n }\n};\n\nexport const dispatchBehaviours = (firebolt, { payload, unit, behaviours }) => {\n const { interaction: { behaviours: behaviourConfs = {} } } = firebolt.context.config();\n const unitFirebolt = unit.firebolt();\n\n behaviours.forEach((action) => {\n const mode = behaviourConfs[action];\n let targetFirebolt = unitFirebolt;\n if (mode === COMMON_INTERACTION) {\n targetFirebolt = firebolt;\n }\n\n const actions = targetFirebolt._actions.behavioural;\n payload.criteria = addFacetDataAndMeasureNames(payload.criteria, unit.facetFieldsMap(),\n unit.layers().map(layer => Object.keys(layer.data().getFieldspace().getMeasure())));\n\n targetFirebolt.dispatchBehaviour(action, payload, {\n propagate: false,\n applySideEffect: false\n });\n\n const identifiers = actions[action].propagationIdentifiers();\n\n firebolt.propagate(action, payload, identifiers, {\n sideEffects: getSideEffects(action, targetFirebolt._behaviourEffectMap),\n sourceUnitId: unit.id(),\n sourceId: targetFirebolt.id(),\n propagationDataSource: targetFirebolt.getPropagationSource()\n });\n });\n};\n\nexport const resetSelectAction = (firebolt, { unit, payload, behaviours }) => {\n if (behaviours[0] === BEHAVIOURS.BRUSH && payload.dragging && payload.dragDiff < 5) {\n dispatchBehaviours(firebolt, {\n behaviours: [BEHAVIOURS.SELECT],\n payload: {\n criteria: null\n },\n unit\n });\n }\n};\n\nexport const attachBehaviours = (group) => {\n const allFields = group.resolver().getAllFields();\n const valueMatrix = group.matrixInstance().value;\n const crosstab = isCrosstab(allFields);\n\n valueMatrix.each((cell) => {\n const unit = cell.valueOf();\n const firebolt = unit.firebolt();\n const behaviours = crosstab ? [PSEUDO_SELECT] : [];\n firebolt._connectedBehaviours[BEHAVIOURS.SELECT] = behaviours;\n });\n};\n","import {\n FieldType,\n mergeRecursive,\n CommonProps,\n ReservedFields\n} from 'muze-utils';\nimport { Firebolt, getSideEffects } from '@chartshq/muze-firebolt';\nimport { createMapByDimensions } from '@chartshq/visual-unit/src/firebolt/helper';\nimport {\n payloadGenerator,\n isSideEffectEnabled,\n sanitizePayloadCriteria,\n prepareSelectionSetMap\n} from '@chartshq/visual-unit';\nimport { TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects';\nimport { FRAGMENTED } from '@chartshq/muze-firebolt/src/enums/constants';\nimport { applyInteractionPolicy } from '../helper';\nimport {\n propagateValues,\n isCrosstab,\n addSelectedMeasuresInPayload,\n resetSelectAction,\n dispatchBehaviours,\n attachBehaviours\n} from './helper';\nimport { COMMON_INTERACTION } from '../../constants';\n\nconst setSideEffectConfig = (firebolt) => {\n const tooltipSideEffect = firebolt.sideEffects().tooltip;\n const allFields = firebolt.context.composition().visualGroup.resolver().getAllFields();\n\n if (isCrosstab(allFields)) {\n tooltipSideEffect.config({\n selectionSummary: {\n order: 1,\n className: 'tooltip-content-container-selectionSummary-crosstab',\n showMultipleMeasures: true\n },\n highlightSummary: {\n order: 0,\n className: 'tooltip-content-container-highlightSummary-crosstab'\n }\n });\n } else {\n tooltipSideEffect.config({\n selectionSummary: {\n order: 0,\n className: 'tooltip-content-container-selectionSummary-default',\n showMultipleMeasures: false\n },\n highlightSummary: {\n order: 1,\n className: 'tooltip-content-container-highlightSummary-default'\n }\n });\n }\n};\n\nconst prepareSelectionSetData = (group, dataModel) => {\n const valueMatrix = group.matrixInstance().value;\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.values(fieldsConfig).filter(d => d.def.type === FieldType.DIMENSION);\n const hasMeasures = Object.keys(dataModel.getFieldspace().getMeasure()).length;\n const measureName = hasMeasures ? [ReservedFields.MEASURE_NAMES] : [];\n const keys = {};\n const dimensionsMap = {};\n const unitDimsMap = {};\n\n valueMatrix.each((cell) => {\n const unit = cell.source();\n const dm = unit.data();\n const unitDims = dm.getSchema().filter(field => field.type === FieldType.DIMENSION).map(field => field.name);\n const facetFields = Object.keys(unit.facetFieldsMap());\n\n unitDimsMap[unitDims] = {\n inst: unit,\n dims: [...facetFields, ...unitDims]\n };\n });\n\n const groupDataMap = {};\n\n dataModel.getData().data.forEach((row) => {\n for (const key in unitDimsMap) {\n const { dims } = unitDimsMap[key];\n const dimKey = dims.map(dim => row[fieldsConfig[dim].index]);\n groupDataMap[dimKey] = row;\n }\n });\n\n valueMatrix.each((cell) => {\n const unit = cell.source();\n const dm = unit.data();\n const layers = unit.layers();\n const unitDims = dm.getSchema().filter(field => field.type === FieldType.DIMENSION).map(field => field.name);\n const facetMap = unit.facetFieldsMap();\n const facetFields = Object.keys(facetMap);\n const unitFieldsConfig = dm.getFieldsConfig();\n const linkedRows = [];\n\n dm.getData().data.forEach((row) => {\n const dimKey = [...facetFields.map(field => facetMap[field]), ...unitDims.map(d =>\n row[unitFieldsConfig[d].index])];\n const linkedRow = groupDataMap[dimKey];\n\n if (linkedRow) {\n linkedRows.push(linkedRow);\n }\n });\n\n prepareSelectionSetMap({\n data: linkedRows,\n uids: dm.getUids(),\n dimensions\n }, layers, {\n keys,\n dimensionsMap\n });\n });\n\n const dimensionFields = dimensions.length ? [...dimensions.map(d => d.def.name)] :\n [ReservedFields.ROW_ID];\n\n return {\n keys,\n dimensionsMap,\n dimensions: dimensionFields,\n allFields: [...dimensionFields, ...measureName]\n };\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, firebolt) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = firebolt.sourceCanvas();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n '*': (propagationPayload, firebolt) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = firebolt.sourceCanvas();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n },\n selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.payloadGenerators(payloadGenerator);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\n }\n\n static defaultInteractionPolicy () {\n return () => {};\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n const context = this.context;\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n\n applyInteractionPolicy(this);\n const throwback = context._throwback;\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n this.config(this.context.config().interaction);\n applyInteractionPolicy(this);\n const group = this.context.composition().visualGroup;\n if (group) {\n setSideEffectConfig(this);\n\n const { keys, dimensions, dimensionsMap, allFields } = prepareSelectionSetData(group,\n group.getGroupByData());\n this._metaData = {\n dimensionsMap,\n dimensions,\n allFields\n };\n this.createSelectionSet({ keys, fields: dimensions });\n group.getGroupByData().on('propagation', (data, config) => {\n this.handleDataModelPropagation(data, config);\n });\n // Dispatch pseudo select behaviour for highlighting measures with common dimensions in crosstab\n attachBehaviours(group);\n }\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n handleDataModelPropagation (data, config) {\n const group = this.context.composition().visualGroup;\n const valueMatrix = group.matrixInstance().value;\n const units = group.resolver().units();\n const propagationData = data;\n // @todo refactor this code\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n const { interaction: { behaviours: behaviourConfs = {} } } = this.context.config();\n const mode = behaviourConfs[action];\n if (mode !== COMMON_INTERACTION) {\n return this;\n }\n\n const payloadFn = this.getPayloadGeneratorFor(action);\n const payload = payloadFn(this, propagationData, config);\n\n const behaviourPolicies = this._behaviourPolicies;\n const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, this, {\n sourceIdentifiers,\n propagationData\n }));\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled;\n }\n\n if (enabled) {\n const propagationInf = {\n propagate: false,\n data: propagationData,\n propPayload,\n sourceIdentifiers,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(action, behaviourEffectMap);\n const sideEffectInstances = this.sideEffects();\n const { instance: unit = units[0][0] } =\n valueMatrix.findPlaceHolderById(propPayload.sourceUnit) || {};\n\n sideEffects.forEach(({ effects }) => {\n effects.forEach((effect) => {\n const name = effect.name;\n const inst = sideEffectInstances[name];\n\n if (inst) {\n inst.sourceInfo(() => unit.getSourceInfo());\n inst.layers(() => unit.layers());\n inst.plotPointsFromIdentifiers((...params) =>\n unit.getPlotPointsFromIdentifiers(...params));\n inst.drawingContext(() => unit.getDrawingContext());\n inst.valueParser(unit.valueParser());\n }\n });\n });\n\n if (propPayload.sourceUnit) {\n addSelectedMeasuresInPayload(this, unit, payload);\n }\n\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n\n return this;\n }\n\n target () {\n return 'visual-group';\n }\n\n mapActionsAndBehaviour () {\n const unitMatrix = this.context.composition().visualGroup.matrixInstance().value;\n\n unitMatrix.each((unit) => {\n const firebolt = unit.source().firebolt();\n firebolt.mapActionsAndBehaviour();\n });\n\n this.registerPhysicalActionHandlers();\n }\n\n registerPhysicalActionHandlers () {\n const unitMatrix = this.context.composition().visualGroup.matrixInstance().value;\n\n unitMatrix.each((cell) => {\n const unit = cell.source();\n const firebolt = unit.firebolt();\n\n firebolt.onPhysicalAction('*', (event, payload) => {\n this.handlePhysicalAction(event, payload, unit);\n }, this.context.constructor.formalName());\n });\n\n return this;\n }\n\n handlePhysicalAction (event, payload, unit) {\n const firebolt = unit.firebolt();\n const { behaviours } = firebolt._actionBehaviourMap[event];\n dispatchBehaviours(this, { behaviours, payload, unit });\n // Reset select action when dragging is done. Remove this when brush and select will be unioned\n resetSelectAction(this, { behaviours, payload, unit });\n }\n\n sanitizePayload (payload) {\n const { criteria } = payload;\n const { allFields: fields, dimensionsMap } = this._metaData;\n\n return Object.assign({}, payload,\n {\n criteria: sanitizePayloadCriteria(criteria, fields, {\n dm: this.data(),\n dimensionsMap,\n dimsMapGetter: this._dimsMapGetter\n })\n });\n }\n\n createSelectionSet (...params) {\n super.createSelectionSet(...params);\n\n this._dimsMapGetter = createMapByDimensions(this, this.data());\n\n return this;\n }\n\n id () {\n return this.context.alias();\n }\n\n shouldApplySideEffects (propInf) {\n return propInf.applySideEffect !== false;\n }\n\n data () {\n return this.context.composition().visualGroup.getGroupByData();\n }\n\n getRangeFromIdentifiers ({ criteria, fields }) {\n return fields.reduce((acc, v) => {\n acc[v] = criteria[v];\n return acc;\n }, {});\n }\n\n propagate (behaviour, payload, identifiers, auxConfig = {}) {\n propagateValues(this, behaviour, Object.assign({\n payload,\n identifiers,\n propagationFields: this._propagationFields,\n sourceId: this.id(),\n sourceCanvasId: this.id(),\n propagationDataSource: this.data()\n }, auxConfig));\n }\n\n getPropagationSource () {\n return this.data();\n }\n\n sourceCanvas () {\n return this.context.alias();\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n if (payload.sideEffects) {\n return [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }];\n }\n const { mode } = this.context.config().interaction.tooltip;\n propagationInf.propPayload = propagationInf.propPayload || payload;\n sideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n if (se.name === TOOLTIP && mode === FRAGMENTED) {\n return false;\n }\n return isSideEffectEnabled(this, { se, propagationInf });\n });\n d.effects = mappedEffects;\n });\n return sideEffects;\n }\n}\n","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport UnitBrushBehaviour from '@chartshq/visual-unit/src/firebolt/behaviours/brush';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null,\n propagationInfo: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, {\n brush: UnitBrushBehaviour\n }),\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with canvas.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const param = params[0];\n const components = Object.assign({}, param.components);\n const componentSubRegistry = Object.assign({}, param.componentSubRegistry);\n const interactionRegistry = Object.assign({}, param.interactions);\n\n this._registry = { components, componentSubRegistry, interactions: interactionRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n *\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n\n this.firebolt().mapActionsAndBehaviour();\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\nimport { registry as interactionRegistry } from '@chartshq/muze-firebolt';\n\nexport const COMPONENTS = {\n [VisualGroup.formalName()]: VisualGroup,\n [VisualUnit.formalName()]: VisualUnit\n};\n\nexport const SUBREGISTRIES = {\n cells: cellRegistry,\n layers: layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\nconst componentRegistry = (components = COMPONENTS) => {\n const reg = Object.assign({}, components);\n\n return {\n register: (cls) => {\n const key = cls.formalName();\n reg[key] = cls;\n return componentRegistry;\n },\n get: () => reg\n };\n};\n\nexport const registry = {\n components: componentRegistry(COMPONENTS),\n cells: cellRegistry(),\n layers: layerRegistry(),\n interactions: interactionRegistry\n};\n","import * as utils from 'muze-utils';\n\nimport { VisualUnit, helpers as unitHelpers, enums as unitEnums, UnitFireBolt } from '@chartshq/visual-unit';\nimport { VisualGroup, Encoders, encoderHelpers, groupUtils, enums as groupEnums } from '@chartshq/visual-group';\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect,\n Firebolt\n} from '@chartshq/muze-firebolt';\nimport {\n layerFactory,\n BaseLayer,\n LineLayer,\n TextLayer,\n TickLayer,\n PointLayer,\n helpers,\n enums,\n SimpleLayer,\n AreaLayer,\n ArcLayer,\n layerMixins\n} from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { registry as globalRegistry, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\nconst {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n Store\n} = utils;\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = globalRegistry.components;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n overrideRegistry.forEach((def) => {\n registry.register(def);\n });\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, globalRegistry.components.get());\n const componentSubRegistryDef = Object.assign({}, SUBREGISTRIES);\n\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop](globalRegistry[prop].get());\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry,\n interactions: globalRegistry.interactions\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n overrideRegistry.forEach((def) => {\n const prop = def.formalName();\n if (prop in defaultRegistry) {\n components[prop] = def;\n }\n });\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry, cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry, layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nmuze.registry = globalRegistry;\n\nmuze.Components = {\n VisualLayer: {\n layers: {\n BaseLayer,\n LineLayer,\n TextLayer,\n TickLayer,\n PointLayer,\n SimpleLayer,\n AreaLayer,\n ArcLayer\n },\n helpers,\n enums,\n layerMixins\n },\n VisualUnit: {\n constructor: VisualUnit,\n helpers: unitHelpers,\n enums: unitEnums,\n UnitFireBolt\n },\n VisualGroup: {\n constructor: VisualGroup,\n Encoders,\n encoderHelpers,\n groupUtils,\n enums: groupEnums\n },\n Canvas: {\n constructor: Canvas\n },\n Firebolt: {\n constructor: Firebolt\n }\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = utils;\nmuze.Model = new Store().model.constructor;\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://muze/webpack/universalModuleDefinition","webpack://muze/webpack/bootstrap","webpack://muze/DataModel/webpack/universalModuleDefinition","webpack://muze/DataModel/webpack/bootstrap","webpack://muze/DataModel/src/index.js","webpack://muze/DataModel/src/enums/data-format.js","webpack://muze/DataModel/src/enums/dimension-subtype.js","webpack://muze/DataModel/src/enums/measure-subtype.js","webpack://muze/DataModel/src/enums/field-type.js","webpack://muze/DataModel/src/enums/filtering-mode.js","webpack://muze/DataModel/src/enums/group-by-functions.js","webpack://muze/DataModel/src/utils/date-time-formatter.js","webpack://muze/DataModel/src/utils/column-major.js","webpack://muze/DataModel/src/utils/extend2.js","webpack://muze/DataModel/src/utils/helper.js","webpack://muze/DataModel/src/field-store.js","webpack://muze/DataModel/src/value.js","webpack://muze/DataModel/src/operator/row-diffset-iterator.js","webpack://muze/DataModel/src/invalid-aware-types.js","webpack://muze/DataModel/src/constants/index.js","webpack://muze/DataModel/src/operator/get-common-schema.js","webpack://muze/DataModel/src/operator/cross-product.js","webpack://muze/DataModel/src/operator/merge-sort.js","webpack://muze/DataModel/src/operator/sort.js","webpack://muze/DataModel/src/operator/data-builder.js","webpack://muze/DataModel/src/operator/difference.js","webpack://muze/DataModel/src/operator/group-by-function.js","webpack://muze/DataModel/src/utils/reducer-store.js","webpack://muze/DataModel/src/operator/natural-join-filter-function.js","webpack://muze/DataModel/src/operator/union.js","webpack://muze/DataModel/src/operator/outer-join.js","webpack://muze/DataModel/src/fields/partial-field/index.js","webpack://muze/DataModel/src/fields/field/index.js","webpack://muze/DataModel/src/fields/dimension/index.js","webpack://muze/DataModel/src/fields/measure/index.js","webpack://muze/DataModel/src/fields/parsers/field-parser/index.js","webpack://muze/DataModel/src/fields/parsers/categorical-parser/index.js","webpack://muze/DataModel/src/fields/categorical/index.js","webpack://muze/DataModel/src/fields/parsers/temporal-parser/index.js","webpack://muze/DataModel/src/fields/helper.js","webpack://muze/DataModel/src/fields/temporal/index.js","webpack://muze/DataModel/src/fields/parsers/binned-parser/index.js","webpack://muze/DataModel/src/fields/binned/index.js","webpack://muze/DataModel/src/fields/parsers/continuous-parser/index.js","webpack://muze/DataModel/src/fields/continuous/index.js","webpack://muze/DataModel/src/fields/parsers/id-parser.js","webpack://muze/DataModel/src/fields/id/index.js","webpack://muze/DataModel/src/fields/field-registry.js","webpack://muze/DataModel/src/field-creator.js","webpack://muze/DataModel/src/default-config.js","webpack://muze/DataModel/src/converter/model/dataConverter.js","webpack://muze/DataModel/node_modules/d3-dsv/src/dsv.js","webpack://muze/DataModel/src/converter/utils/dsv-arr.js","webpack://muze/DataModel/src/converter/utils/dsv-str.js","webpack://muze/DataModel/src/converter/defaultConverters/dsvStringConverter.js","webpack://muze/DataModel/src/converter/utils/flat-json.js","webpack://muze/DataModel/src/converter/defaultConverters/jsonConverter.js","webpack://muze/DataModel/src/converter/defaultConverters/dsvArrayConverter.js","webpack://muze/DataModel/src/converter/defaultConverters/autoConverter.js","webpack://muze/DataModel/src/converter/utils/auto-resolver.js","webpack://muze/DataModel/src/converter/dataConverterStore.js","webpack://muze/DataModel/src/helper.js","webpack://muze/DataModel/src/relation.js","webpack://muze/DataModel/src/datamodel.js","webpack://muze/DataModel/src/operator/group-by.js","webpack://muze/DataModel/src/operator/bucket-creator.js","webpack://muze/DataModel/src/stats/index.js","webpack://muze/DataModel/src/export.js","webpack://muze/DataModel/src/operator/compose.js","webpack://muze/DataModel/src/operator/pure-operators.js","webpack://muze/DataModel/src/operator/natural-join.js","webpack://muze/(webpack)/buildin/module.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/SmartlabelManager.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/lib.js","webpack://muze/hyperdis/webpack/universalModuleDefinition","webpack://muze/hyperdis/webpack/bootstrap","webpack://muze/hyperdis/src/utils/set.js","webpack://muze/hyperdis/src/utils/index.js","webpack://muze/hyperdis/src/graph-node.js","webpack://muze/hyperdis/src/electric-node.js","webpack://muze/hyperdis/src/graph.js","webpack://muze/hyperdis/src/model.js","webpack://muze/hyperdis/src/index.js","webpack://muze/./packages/muze/src/index.js","webpack://muze/./packages/muze-utils/node_modules/fusioncharts-smartlabel/lib/container-manager.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisector.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/bisect.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/range.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/ticks.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/threshold/sturges.js","webpack://muze/./packages/muze-utils/node_modules/d3-array/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/map.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/nest.js","webpack://muze/./packages/muze-utils/node_modules/d3-collection/src/set.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/ordinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/band.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/define.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basis.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/color.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/rgb.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/numberArray.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/basisClosed.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/date.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/round.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/number.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/continuous.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatSpecifier.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatDecimal.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatPrefixAuto.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/exponent.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTrim.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatRounded.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatTypes.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatGroup.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/formatNumerals.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionRound.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/tickFormat.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionPrefix.js","webpack://muze/./packages/muze-utils/node_modules/d3-format/src/precisionFixed.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/nice.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/log.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/pow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantile.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/quantize.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/threshold.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/interval.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/year.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/month.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/week.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/day.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/hour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/minute.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/second.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/millisecond.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcWeek.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcDay.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcYear.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/locale.js","webpack://muze/./packages/muze-utils/node_modules/d3-time-format/src/defaultLocale.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/time.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMonth.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcHour.js","webpack://muze/./packages/muze-utils/node_modules/d3-time/src/utcMinute.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category10.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20b.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/category20c.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-color/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale/src/sequential.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/colors.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/ramp.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://muze/./packages/muze-utils/node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://muze/./packages/muze-utils/src/enums/namespace.js","webpack://muze/./packages/muze-utils/src/quick-select.js","webpack://muze/./packages/muze-utils/src/r-tree.js","webpack://muze/./packages/muze-utils/src/enums/reserved-fields.js","webpack://muze/./packages/muze-utils/src/enums/common-props.js","webpack://muze/./packages/muze-utils/src/enums/constants.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-axis/src/axis.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/math.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/cross.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/diamond.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/square.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/star.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/wye.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol/triangle.js","webpack://muze/./packages/muze-utils/node_modules/d3-path/src/path.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/ascending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/order/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/none.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/array.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/stack.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/step.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/cardinal.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/curve/catmullRom.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/line.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/descending.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/identity.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/arc.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/hsl.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/piecewise.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/cubic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/bounce.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/elastic.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/back.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/poly.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/RedBlackTree.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Edge.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Cell.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Beach.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/Diagram.js","webpack://muze/./packages/muze-utils/node_modules/d3-voronoi/src/voronoi.js","webpack://muze/./packages/muze-utils/src/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/DataSystem/dataSelect.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.js","webpack://muze/./packages/muze-utils/src/common-utils.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/linear.js","webpack://muze/./packages/muze-utils/node_modules/d3-ease/src/circle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/diverging.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/expand.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/offset/wiggle.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/area.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/pie.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selector.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selectorAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/matcher.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sparse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/enter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/data.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/sort.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/call.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespaces.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/namespace.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/window.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/classed.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/html.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/raise.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/lower.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/creator.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/insert.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/clone.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/exit.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/join.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/order.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/nodes.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/node.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/size.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/empty.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/each.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/property.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/append.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/selection/datum.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/point.js","webpack://muze/./packages/muze-utils/node_modules/d3-dispatch/src/dispatch.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/sourceEvent.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/mouse.js","webpack://muze/./packages/muze-utils/node_modules/d3-selection/src/touch.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/noevent.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/nodrag.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/constant.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/event.js","webpack://muze/./packages/muze-utils/node_modules/d3-drag/src/drag.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timer.js","webpack://muze/./packages/muze-utils/node_modules/d3-timer/src/timeout.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/schedule.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/interrupt.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/decompose.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/tween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/interpolate.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/remove.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selection.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/style.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/textTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/select.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/selectAll.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/filter.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/merge.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/on.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attr.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/attrTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/styleTween.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/text.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/delay.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/duration.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/ease.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/transition/end.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/transition.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/index.js","webpack://muze/./packages/muze-utils/node_modules/d3-transition/src/selection/interrupt.js","webpack://muze/./packages/muze-utils/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/store.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/event-list.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/lifecycle-manager.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/index.js","webpack://muze/./packages/muze-utils/src/lifecycle-manager/helper.js","webpack://muze/./packages/muze-utils/src/index.js","webpack://muze/./packages/visual-layer/src/enums/constants.js","webpack://muze/./packages/visual-layer/src/simple-layer/simple-layer.js","webpack://muze/./packages/visual-layer/src/enums/props.js","webpack://muze/./packages/visual-layer/src/base-layer/props.js","webpack://muze/./packages/muze-axis/src/enums/axis-orientation.js","webpack://muze/./packages/muze-axis/src/enums/scale-type.js","webpack://muze/./packages/muze-axis/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/scale-creator.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/default-config.js","webpack://muze/./packages/muze-axis/src/axis-renderer.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/skip-ticks.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/space-setter.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/helper.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/props.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/simple-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/linear.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/log.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/interpolators/pow.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/continous-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/band-axis.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/time-axis.js","webpack://muze/./packages/muze-axis/src/color-axis/color-maps.js","webpack://muze/./packages/muze-axis/src/color-axis/defaults.js","webpack://muze/./packages/muze-axis/src/color-axis/props.js","webpack://muze/./packages/muze-axis/src/helper.js","webpack://muze/./packages/muze-axis/src/color-axis/color-strategy.js","webpack://muze/./packages/muze-axis/src/color-axis/color-axis.js","webpack://muze/./packages/muze-axis/src/size-axis/defaults.js","webpack://muze/./packages/muze-axis/src/size-axis/size-strategy.js","webpack://muze/./packages/muze-axis/src/size-axis/props.js","webpack://muze/./packages/muze-axis/src/size-axis/size-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/defaults.js","webpack://muze/./packages/muze-axis/src/shape-axis/props.js","webpack://muze/./packages/muze-axis/src/shape-axis/shape-axis.js","webpack://muze/./packages/muze-axis/src/shape-axis/helper.js","webpack://muze/./packages/muze-axis/src/polar-axis/props.js","webpack://muze/./packages/muze-axis/src/polar-axis/angle-axis.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/polar-axis/radius-axis.js","webpack://muze/./packages/muze-axis/src/data-type-scale-map.js","webpack://muze/./packages/transform/src/group-transform/index.js","webpack://muze/./packages/transform/src/identity-transform/index.js","webpack://muze/./packages/transform/src/transform-factory/index.js","webpack://muze/./packages/transform/src/enums/transform-type.js","webpack://muze/./packages/transform/src/stack-transform/index.js","webpack://muze/./packages/visual-layer/src/helpers/index.js","webpack://muze/./packages/visual-layer/src/base-layer/local-options.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.js","webpack://muze/./packages/visual-layer/src/base-layer/helper.js","webpack://muze/./packages/visual-layer/src/base-layer/base-mixin.js","webpack://muze/./packages/visual-layer/src/base-layer/base-layer.js","webpack://muze/./packages/visual-layer/src/layers/line/renderer.js","webpack://muze/./packages/visual-layer/src/layers/line/default-config.js","webpack://muze/./packages/visual-layer/src/layers/line/line-mixin.js","webpack://muze/./packages/visual-layer/src/layers/area/default-config.js","webpack://muze/./packages/visual-layer/src/layers/area/renderer.js","webpack://muze/./packages/visual-layer/src/layers/area/area-mixin.js","webpack://muze/./packages/visual-layer/src/layers/area/area.js","webpack://muze/./packages/visual-layer/src/layers/arc/default-config.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-mixin.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc-helper.js","webpack://muze/./packages/visual-layer/src/layers/arc/arc.js","webpack://muze/./packages/visual-layer/src/layers/line/line.js","webpack://muze/./packages/visual-layer/src/layers/text/renderer.js","webpack://muze/./packages/visual-layer/src/layers/text/default-config.js","webpack://muze/./packages/visual-layer/src/layers/text/text-mixin.js","webpack://muze/./packages/visual-layer/src/layers/text/text.js","webpack://muze/./packages/visual-layer/src/layers/point/renderer.js","webpack://muze/./packages/visual-layer/src/layers/point/default-config.js","webpack://muze/./packages/visual-layer/src/layers/point/helper.js","webpack://muze/./packages/visual-layer/src/layers/point/point-mixin.js","webpack://muze/./packages/visual-layer/src/layers/point/point.js","webpack://muze/./packages/visual-layer/src/layers/bar/renderer.js","webpack://muze/./packages/visual-layer/src/layers/bar/default-config.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-helper.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar-mixin.js","webpack://muze/./packages/visual-layer/src/layers/bar/bar.js","webpack://muze/./packages/visual-layer/src/layers/tick/default-config.js","webpack://muze/./packages/visual-layer/src/layers/tick/renderer.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick-mixin.js","webpack://muze/./packages/visual-layer/src/layers/tick/helper.js","webpack://muze/./packages/visual-layer/src/layers/tick/tick.js","webpack://muze/./packages/visual-layer/src/enums/layer-types.js","webpack://muze/./packages/visual-layer/src/layer-factory/layer-factory.js","webpack://muze/./packages/visual-layer/src/layer-factory/index.js","webpack://muze/./packages/visual-layer/src/defaults.js","webpack://muze/./packages/visual-layer/src/layer-registry.js","webpack://muze/./packages/visual-layer/src/index.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/muze-firebolt/src/enums/actions.js","webpack://muze/./packages/muze-firebolt/src/enums/selection.js","webpack://muze/./packages/muze-firebolt/src/selection-set/index.js","webpack://muze/./packages/muze-firebolt/src/selection-set/selection-set.js","webpack://muze/./packages/muze-firebolt/src/helper/index.js","webpack://muze/./packages/muze-firebolt/src/firebolt.js","webpack://muze/./packages/muze-firebolt/src/entry-exit-set.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/generic.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/volatile.js","webpack://muze/./packages/muze-firebolt/src/enums/behaviours.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/highlight.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/brush.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/filter.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/persistent.js","webpack://muze/./packages/muze-firebolt/src/actions/behavioural/select.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-action-config.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/drag-event.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/hover.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/helpers/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/selection-box-drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/click.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/index.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/drag.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/longtouch.js","webpack://muze/./packages/muze-firebolt/src/actions/physical/touch-drag.js","webpack://muze/./packages/muze-firebolt/src/enums/side-effects.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/props.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.js","webpack://muze/./packages/muze-firebolt/src/side-effects/surrogate.js","webpack://muze/./packages/muze-firebolt/src/side-effects/spawnable.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/index.js","webpack://muze/./packages/muze-firebolt/src/enums/constants.js","webpack://muze/./packages/muze-tooltip/src/default-config.js","webpack://muze/./packages/muze-tooltip/src/constants.js","webpack://muze/./packages/muze-tooltip/src/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-tooltip/src/helper.js","webpack://muze/./packages/muze-firebolt/src/enums/tooltip-strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/strategies.js","webpack://muze/./packages/muze-firebolt/src/side-effects/helper/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/fragmented-tooltip/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/helper.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/strategy.js","webpack://muze/./packages/muze-firebolt/src/side-effects/plot-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/filter/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/persistent-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/brush-anchors.js","webpack://muze/./packages/muze-firebolt/src/side-effects/axis-labels-highlighter/index.js","webpack://muze/./packages/muze-firebolt/src/behaviour-effect-map.js","webpack://muze/./packages/muze-firebolt/src/registry.js","webpack://muze/./packages/visual-unit/src/firebolt/payload-generator.js","webpack://muze/./packages/visual-unit/src/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/firebolt/index.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/firebolt/behaviours/brush.js","webpack://muze/./packages/visual-unit/src/enums/behaviours.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/props.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/firebolt/behaviours/pseudo-select.js","webpack://muze/./packages/visual-unit/src/visual-unit.js","webpack://muze/./packages/visual-group/src/variable/variable.js","webpack://muze/./packages/visual-group/src/variable/composed-vars.js","webpack://muze/./packages/visual-group/src/variable/simple-var.js","webpack://muze/./packages/visual-group/src/encoder/field-sanitizer.js","webpack://muze/./packages/visual-group/src/enums/defaults.js","webpack://muze/./packages/visual-group/src/group-helper/cell-border-applier.js","webpack://muze/./packages/visual-group/src/group-helper/group-utils.js","webpack://muze/./packages/visual-group/src/encoder/props.js","webpack://muze/./packages/visual-group/src/encoder/visual-encoder.js","webpack://muze/./packages/visual-group/src/enums/scale-maps.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/resolver-props.js","webpack://muze/./packages/visual-group/src/group-helper/matrix-resolver.js","webpack://muze/./packages/visual-group/src/data-type-scale-map.js","webpack://muze/./packages/visual-group/src/encoder/encoder-helper.js","webpack://muze/./packages/visual-group/src/encoder/cartesian-encoder.js","webpack://muze/./packages/visual-group/src/encoder/polar-encoder.js","webpack://muze/./packages/visual-group/src/encoder/retinal-encoder.js","webpack://muze/./packages/visual-group/src/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-group/src/visual-group/value-matrix.js","webpack://muze/./packages/visual-group/src/visual-group/helper.js","webpack://muze/./packages/visual-group/src/visual-group/change-listener.js","webpack://muze/./packages/visual-group/src/visual-group/props.js","webpack://muze/./packages/visual-group/src/visual-group/visual-group.js","webpack://muze/./packages/muze-legend/src/firebolt/behavioural/select.js","webpack://muze/./packages/muze-legend/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/muze-legend/src/firebolt/behaviour-effect-map.js","webpack://muze/./packages/muze-legend/src/enums/behaviours.js","webpack://muze/./packages/muze-legend/src/enums/side-effects.js","webpack://muze/./packages/muze-legend/src/firebolt/helper.js","webpack://muze/./packages/muze-legend/src/enums/constants.js","webpack://muze/./packages/muze-legend/src/firebolt/legend-firebolt.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/drag.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/hover.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/click.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/index.js","webpack://muze/./packages/muze-legend/src/enums/actions.js","webpack://muze/./packages/muze-legend/src/firebolt/physical/selection-box-drag.js","webpack://muze/./packages/muze-legend/src/legend/defaults.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/strategies.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-highlighter/index.js","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/legend-marker/index.js","webpack://muze/./packages/muze-legend/src/legend/props.js","webpack://muze/./packages/muze-legend/src/legend/legend-helper.js","webpack://muze/./packages/muze-legend/src/legend/simple-legend.js","webpack://muze/./packages/muze-legend/src/legend/position-config.js","webpack://muze/./packages/muze-legend/src/legend/renderer.js","webpack://muze/./packages/muze-legend/src/legend/discrete-legend.js","webpack://muze/./packages/muze-legend/src/legend/gradient-helper.js","webpack://muze/./packages/muze-legend/src/legend/gradient-legend.js","webpack://muze/./packages/muze-legend/src/legend/step-legend.js","webpack://muze/./packages/muze/src/constants.js","webpack://muze/./packages/muze/src/operators.js","webpack://muze/./packages/muze/src/action-model.js","webpack://muze/./packages/muze/src/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/layoutComponent.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/dummy-component.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/layout/src/tree-layout/constants/defaults.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/definitionModel.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/helper/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/tree/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/layout-model/index.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/tree-layout/utils/index.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-point.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-parser.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/helper.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/html-data.js","webpack://muze/./packages/layout/src/tree-layout/renderers/renderer.js","webpack://muze/./packages/layout/src/tree-layout/renderers/html-renderer.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/layout-def.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/index.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.js","webpack://muze/./packages/layout/src/utils/index.js","webpack://muze/./packages/layout/src/visual-matrix/props.js","webpack://muze/./packages/layout/src/visual-matrix/default-config.js","webpack://muze/./packages/layout/src/visual-matrix/visual-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/row-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/column-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/view-info-getter.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/layout/src/grid-layout/border-helper.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.js","webpack://muze/./packages/muze/src/transaction-support.js","webpack://muze/./packages/muze/src/canvas/component-resolver.js","webpack://muze/./packages/visual-cell/src/enums/constants.js","webpack://muze/./packages/visual-cell/src/enums/cell-type.js","webpack://muze/./packages/visual-cell/src/simple-cell.js","webpack://muze/./packages/visual-cell/src/constants.js","webpack://muze/./packages/visual-cell/src/enums/defaults.js","webpack://muze/./packages/visual-cell/src/props.js","webpack://muze/./packages/visual-cell/src/axis-cell.js","webpack://muze/./packages/visual-cell/src/blank-cell.js","webpack://muze/./packages/visual-cell/src/text-cell-helper.js","webpack://muze/./packages/visual-cell/src/text-cell.js","webpack://muze/./packages/visual-cell/src/geom-cell.js","webpack://muze/./packages/visual-cell/src/defaults.js","webpack://muze/./packages/visual-cell/src/cell-registry.js","webpack://muze/./packages/muze/src/canvas/title-maker.js","webpack://muze/./packages/muze/src/canvas/legend-maker.js","webpack://muze/./packages/muze/src/canvas/components/muze-chart-component.js","webpack://muze/./packages/muze/src/canvas/components/headerComponent.js","webpack://muze/./packages/muze/src/canvas/components/legendComponent.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/helper.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/props.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-component.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/horizontal-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/vertical-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/matrix-component.js","webpack://muze/./packages/muze/src/canvas/components/grid-component.js","webpack://muze/./packages/muze/src/enums/constants.js","webpack://muze/./packages/muze/src/canvas/components/message-component.js","webpack://muze/./packages/muze/src/canvas/components/message-icon.js","webpack://muze/./packages/muze/src/canvas/component-wrapper-maker.js","webpack://muze/./packages/muze/src/canvas/scroll-manager.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/firebolt/helper.js","webpack://muze/./packages/muze/src/canvas/firebolt/group-firebolt.js","webpack://muze/./packages/muze/src/canvas/firebolt/index.js","webpack://muze/./packages/muze/src/canvas/app-state.js","webpack://muze/./packages/muze/src/canvas/canvas.js","webpack://muze/./packages/muze/src/default-registry.js","webpack://muze/./packages/muze/src/muze.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","_typeof","DataModel","require","DataFormat","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","DimensionSubtype","CATEGORICAL","TEMPORAL","BINNED","ID","MeasureSubtype","CONTINUOUS","FieldType","MEASURE","DIMENSION","FilteringMode","NORMAL","INVERSE","ALL","GROUP_BY_FUNCTIONS","SUM","AVG","MIN","MAX","FIRST","LAST","COUNT","STD","convertToNativeDate","date","Date","pad","DateTimeFormatter","format","this","dtParams","nativeDate","RegExp","escape","text","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","defVal","val","parsedVal","isFinite","parseInt","defaultRangeParser","range","nVal","toLowerCase","length","getTokenDefinitions","daysDef","short","long","monthsDef","H","index","extract","parser","formatter","getHours","toString","hours","P","M","getMinutes","S","getSeconds","K","getMilliseconds","a","join","day","getDay","A","e","getDate","b","month","getMonth","B","y","result","substring","presentDate","presentYear","Math","trunc","getFullYear","year","Y","getTokenFormalNames","definitions","HOUR_12","AMPM_UPPERCASE","AMPM_LOWERCASE","SHORT_DAY","LONG_DAY","DAY_OF_MONTH","DAY_OF_MONTH_CONSTANT_WIDTH","SHORT_MONTH","LONG_MONTH","MONTH_OF_YEAR","SHORT_YEAR","LONG_YEAR","tokenResolver","defaultResolver","arg","targetParam","arguments","hourFormat24","hourFormat12","ampmLower","ampmUpper","amOrpm","isPM","findTokens","tokenPrefix","tokenLiterals","keys","occurrence","forwardChar","indexOf","push","token","formatAs","nDate","formattedStr","String","formattedVal","parse","dateTimeStamp","options","extractTokenValue","dtParamSeq","noBreak","dtParamArr","args","resolverKey","resolverParams","resolverFn","param","resolvedVal","splice","apply","checkIfOnlyYear","unshift","tokenObj","lastOccurrenceIndex","occObj","occIndex","targetText","regexFormat","tokenArr","map","obj","occurrenceLength","extractValues","match","shift","getNativeDate","Number","len","v","store","fields","Array","forEach","fieldIndex","from","objectToStrFn","checkCyclicRef","parentArr","bIndex","extend2","obj1","obj2","skipUndef","merge","tgtArr","srcArr","item","srcVal","tgtVal","str","cRef","isArray","getUniqueId","getTime","round","random","isArrEqual","arr1","arr2","formatNumber","detectDataFormat","data","fieldStore","createNamespace","fieldArr","idField","dataId","fieldsObj","_cachedFieldsObj","field","getMeasure","measureFields","_cachedMeasure","schema","type","getDimension","dimensionFields","_cachedDimension","Value","rawValue","formattedValue","getNumberFormattedVal","defineProperties","_value","configurable","writable","_formattedValue","_internalValue","rowDiffsetIterator","rowDiffset","callback","split","diffStr","diffStsArr","start","end","InvalidAwareTypes","config","assign","_invalidAwareValsMap","invalidAwareVals","NULL","NA","NIL","invalid","nil","null","undefined","ROW_ID","DM_DERIVATIVES","SELECT","PROJECT","GROUPBY","COMPOSE","CAL_VAR","BIN","SORT","JOINS","getCommonSchema","fs1","fs2","retArr","fs1Arr","defaultFilterFn","crossProduct","dm1","dm2","filterFn","replaceCommonSchema","jointype","applicableFilterFn","dm1FieldStore","getFieldspace","dm2FieldStore","dm1FieldStoreName","dm2FieldStoreName","commonSchemaList","Error","tmpSchema","_rowDiffset","rowAdded","rowPosition","ii","tuple","userArg","partialField","formattedData","dm1Fields","prepareJoinData","dm2Fields","detachedRoot","tupleObj","cellVal","iii","defSortFn","a1","b1","mergeSort","arr","sortFn","sort","lo","hi","mid","floor","mainArr","auxArr","resolveStrSortOrder","fDetails","strSortOrder","sortOrder","dataType","sortType","retFunc","groupData","hashMap","Map","groupedData","datum","fieldVal","has","set","createSortingFnArg","groupedDatum","targetFields","targetFieldDetails","label","reduce","acc","next","idx","applyStandardSort","sortingDetails","fieldName","sortMeta","fieldInSchema","sortingFn","slice","f","dataBuilder","colIdentifier","idData","retObj","uids","addUid","columnWise","reqSorting","tmpDataArr","colName","subtype","insertInd","dataObj","filter","sDetial","groupSortingIdx","findIndex","standardSortingDetails","groupSortingDetails","applyGroupSort","depColumns","detail","sortedGroupMap","makeGroupMapAndSort","targetCol","currRow","fVal","u","iterator","done","nMap","row","nextMap","pop","tmpData","difference","hashTable","schemaNameArr","dm1FieldStoreFieldObj","dm2FieldStoreFieldObj","_colIdentifier","prepareDataHelper","dm","addData","hashData","schemaName","getFilteredValues","sum","filteredNumber","curr","avg","totalSum","isNaN","fnList","filteredValues","min","max","sqrt","mean","pow","num","defaultReducerName","ReducerStore","defReducer","entries","reducer","__unregister","Function","reducerStore","naturalJoinFilter","commonSchemaArr","retainTuple","internalValue","union","leftOuterJoin","dataModel1","dataModel2","rightOuterJoin","PartialField","_sanitize","Field","description","displayName","_params","_context","build","Dimension","_cachedDomain","calculateDataDomain","Measure","unit","defAggFn","numberFormat","FieldParser","CategoricalParser","isInvalid","getInvalidType","trim","Categorical","hash","Set","domain","add","TemporalParser","_dtf","calculateContinuousDomain","POSITIVE_INFINITY","NEGATIVE_INFINITY","Temporal","__proto__","getPrototypeOf","_cachedMinDiff","sortedData","arrLn","minDiff","prevDatum","nextDatum","processedCount","dataFormat","parsedDatum","BinnedParser","matched","parseFloat","Binned","binsArr","bins","ContinuousParser","Continuous","IdValue","wt","valArr","_val","_hash","_valArr","gt","IdParser","values","FieldTypeRegistry","_fieldType","dimension","fieldRegistry","registerFieldType","createFields","dataColumn","headers","headersObj","header","BUILDER","Pt","DataConverter","_type","EOL","EOF","objectConverter","columns","JSON","stringify","inferColumns","rows","columnSet","column","width","Bt","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","N","I","eof","eol","j","preformatBody","formatValue","formatRow","formatDate","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","test","convert","concat","formatBody","formatRows","DSVArr","schemaFields","unitSchema","firstRowHeader","columnMajor","headerMap","h","schemaField","headIndex","DSVStr","fieldSeparator","dsv","d3Dsv","DSVStringConverter","FlatJSON","insertionIndex","schemaFieldsName","JSONConverter","DSVArrayConverter","AutoDataConverter","Auto","converters","DataConverterStore","_getDefaultConverters","converter","converterStore","resp","persistDerivations","sourceDm","model","operation","persistCurrentDerivation","criteriaFn","_derivation","cn","op","meta","criteria","persistAncestorDerivation","newDm","_ancestorDerivation","selectModeMap","diffIndex","calcDiff","generateRowDiffset","lastInsertedValue","li","selectRowDiffsetIterator","checker","newRowDiffSet","rejRowDiffSet","on","shouldSelect","shouldReject","checkerResult","rejectRowDiffset","selectHelper","clonedDm","selectFn","cachedStore","cloneProvider","cachedValueObjects","_partialFieldspace","_cachedValueObjects","keyFn","rowId","domainChecker","some","dom","boundsChecker","filterPropagationModel","propModels","fns","filterByDim","filterByMeasure","clone","clonedModel","cloneWithAllFields","partialFieldspace","getPartialFieldspace","__calculateFieldspace","calculateFieldsConfig","modelFieldsConfig","getFieldsConfig","identifiers","fieldNames","indices","dLen","def","valuesMap","g","ids","id","rangeKeys","hasData","present","getKey","fn","every","isWithinDomain","fieldType","propModel","select","saveChild","addDiffsetToClonedDm","selectConfig","cloneWithProject","projField","allFields","cloned","projectionSet","actualProjField","sanitizeUnitSchema","sanitizeAndValidateSchema","updateData","relation","defaultConfig","dataHeader","fieldNameAs","as","idIndex","rowLength","fill","nameSpace","valueObjects","rawFieldsData","formattedFieldsData","idFieldData","rawData","_","_dataFormat","applyExistingOperationOnModel","dataModel","selectionModel","getDerivations","derivation","params","groupByString","getRootGroupByModel","_parent","find","propagateToAllDataModels","rootModels","propagationInf","propagationNameSpace","propagateToSource","propagationSourceId","sourceId","addGroupedModel","conf","crit","groupedModel","criterias","actionCriterias","mutableActions","filteredCriteria","entry","excludeModels","sourceActionCriterias","actionInf","actionConf","applyOnSource","action","models","path","getPathToRootModel","propagationSource","rootModel","propConfig","sourceIdentifiers","inf","propagationModel","filteredModel","reverse","handlePropagation","propagateIdentifiers","propModelInf","_children","child","matchingCriteria","getNormalizedProFields","fieldConfig","normalizedProjField","constructor","search","Relation","Hn","source","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","updateFields","fieldStoreName","collID","partialFieldMap","newFields","coll","joinWith","unionWith","differenceWith","defConfig","cloneConfig","extraCloneDm","setOfRowDiffsets","setParent","_fieldConfig","fieldObj","removeChild","sibling","parent","Wn","Xn","_onPropagation","order","withUid","getAllFields","dataGenerated","fmtFieldIdx","elem","fIdx","fmtFn","datumIdx","fieldsArr","reducers","newDataModel","groupBy","sFieldArr","dimensions","Oe","reducerObj","measures","defaultReducer","measureName","reducerFn","resolve","fieldStoreObj","dbName","dimensionArr","measureArr","rowCount","idMap","getData","dataInCSVArr","sortedDm","colData","rowsCount","serializedData","rowIdx","colIdx","fieldinst","dependency","replaceVar","fieldsConfig","depVars","retrieveFn","depFieldIndices","fieldSpec","fs","suppliedFields","computedValues","fieldsData","Gn","addField","addToNameSpace","isMutableAction","payload","getRootDataModel","groupByModel","addToPropNamespace","sourceNamespace","propagateImmutableActions","filterImmutableAction","criteriaModel","eventName","measureFieldName","binFieldName","createBinnedFieldData","measureField","buckets","binsCount","binSize","dMin","dMax","ceil","abs","bucketRanges","binnedData","leftIdx","rightIdx","midIdx","binField","serialize","getSchema","rowSplitDiffsetIterator","splitRowDiffset","dimensionMap","dimensionSet","clonedDMs","uniqueFields","commonFields","normalizedProjFieldSets","fieldSet","splitWithProject","projFieldSet","projFields","first","last","count","sd","std","Operators","compose","operations","currentDM","firstChild","derivations","dispose","bin","project","calculateVariable","naturalJoin","fullOuterJoin","version","Stats","FieldsUtility","enums","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","default","_lib2","_containerManager2","slLib","init","doc","win","document","htmlSplCharSpace"," ","documentSupport","getDocumentSupport","SVG_BBOX_CORRECTION","isWebKit","SmartLabelManager","container","useEllipses","wrapper","prop","prevInstance","isBrowserLess","maxCacheLimit","maxDefaultCacheLimit","getElementById","createContainer","innerHTML","testStrAvg","isHeadLess","isIE","offsetHeight","offsetWidth","parentContainerStyle","style","parentContainer","_containerManager","_showNoEllipses","_init","setStyle","textToLines","smartlabel","lines","_calCharDimWithCache","calculateDifference","size","csArr","tw","twi","cachedStyle","asymmetricDifference","maxAdvancedCacheLimit","_container","cache","_advancedCache","advancedCacheKey","_advancedCacheKey","cacheName","fontSize","fontFamily","fontWeight","fontStyle","cacheInitName","repeat","height","_getWidthFn","contObj","_containerObj","svgText","bbox","textContent","getBBox","_styleNotSet","setLineHeight","sCont","node","context","_cache","charCache","_lineHeight","lineHeight","useEllipsesOnOverflow","getSmartText","maxWidth","maxHeight","noWrap","trimStr","tempArr","tmpText","maxWidthWithEll","toolText","oriWidth","oriHeight","newCharIndex","nearestChar","tempChar","getWidth","initialLeft","initialTop","getOriSizeImproveObj","spanArr","x","minWidth","chr","elemRightMostPoint","elemLowestPoint","lastBR","removeFromIndex","removeFromIndexForEllipses","hasHTMLTag","maxStrWidth","lastDash","lastSpace","lastIndexBroken","strWidth","strHeight","oriTextArr","ellipsesStr","ellipsesWidth","dotWidth","characterArr","dashIndex","spaceIndex","lastLineBreak","fastTrim","ws","charAt","smartLabel","oriTextWidth","oriTextHeight","oriText","isTruncated","xmlTagRegEx","ltgtRegex","getOriSize","substr","getNearestBreakIndex","detailObj","tooltext","lastIndexOf","spanAdditionRegx","spanAdditionReplacer","classNameWithTag","classNameWithTagBR","childRetriverFn","childRetriverString","noClassTesting","classNameReg","className","spaceIdx","dashIdx","offsetLeft","offsetTop","parentNode","insertBefore","createElement","classNameBrReg","spanRemovalRegx","error","detailedCalculationFlag","textArr","letter","lSize","cumulativeSize","indiSizeStore","lib","userAgent","navigator","clsNameSpace","containerClass","brReplaceRegex","position","top","whiteSpace","padding","overflow","supportedStyle","font","font-family","font-weight","font-size","line-height","font-style","getElementsByClassName","opera","hasSVG","Boolean","SVGAngle","implementation","hasFeature","containerParent","body","appendChild","setAttribute","getElementsByTagName","sl","charLen","increment","avgWidth","styleObj","fSize","makeEntry","sCon","_classCallCheck","_set","set1","set2","filteredKeys","s1","s2","ForeignSet","isSimpleObject","reqAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","getTimeBasedId","__lastTime","__id","flat","res","scheduler","onFinishCallback","queue","animationFrame","listeners","tempQ","unique","fetch","namedNode","qualifiedName","seed","fetchAggregator","dependencies","getUpstreamNodes","list","rec","qname","placedIndex","preArr","postArr","outgoingEdges","resolver","accumulate","nodeDetails","identity","CustomResolver","utils_classCallCheck","dep","_dep","graph_node_classCallCheck","edges","_seed","requireResolve","retriever","history","electricEdges","_edges","_this","retrieveDetails","edge","head","hist","TypeError","electric_node_classCallCheck","nextFrame","currentFrame","lstnrs","nodes","nFn","_this2","qualifiedNodeMap","graph_node","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flushTarget","flush","mount","resolveReqList","objn","perv","addDependencies","_node","getDependencies","getResolvedList","props","fnSpec","eNode","_ref","electric_node","addEdges","addElectricNode","changedSet","upstreamNodes","upstreamNode","append","__execUniqueElectricEdges","cfLstnrs","nfLstnrs","toArray","_this3","repeatHead","resetPropagationOverride","qnames","_this4","update","resolved","resolveDependencyOrder","resolveMap","neighbour","isRoot","model_classCallCheck","_graph","graph","_lockFlag","_reqQ","mountPoint","_addPropInModel","calculationConfig","customResolver","varName","fetchFn","_customResolver","createNodesFrom","instantCall","_graph$stopPropagatio","propsArr","unsub","createElectricNodeOf","stopPropagation","setPropagationOverride","resetNodeValue","_graph$stopPropagatio2","setProp","getNodeValue","getNodeFromQualifiedName","Model","__webpack_exports__","Muze","ContainerManager","maxContainers","svg","containers","rootNode","createElementNS","setAttributeNS","svgRoot","diff","containerObj","keyStr","prev","removeContainer","addContainer","avgCharWidth","display","cObj","ascending","NaN","bisector","compare","ascendingComparator","left","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","e10","e5","e2","src_ticks","ticks","tickIncrement","power","log","LN10","tickStep","step0","step1","quantile","valueof","i0","value0","each","remove","clear","empty","src_nest","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","keyValue","valuesByKey","createObject","setObject","createMap","setMap","sortKey","k","proto","implicit","ordinal","unknown","scale","copy","band","bandwidth","ordinalRange","paddingInner","paddingOuter","align","rescale","sequence","rangeRound","invertExtent","r0","r1","hiIndex","getClosestIndexOf","invert","side","highVal","d1","low","high","src_number","extend","definition","Color","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","exec","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","channels","displayable","formatHsl","color_formatHsl","brighter","darker","src_constant","linear","hue","constant","gamma","nogamma","exponential","src_rgb","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","numberArray","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","reA","reB","src_string","am","bm","bs","bi","lastIndex","q","one","zero","src_value","value_typeof","string","setTime","valueOf","src_round","d3_scale_src_constant","d3_scale_src_number","deinterpolateLinear","bimap","deinterpolate","reinterpolate","d0","polymap","bisect","target","interpolate","clamp","continuous","piecewise","output","input","interpolateValue","deinterpolateClamp","reinterpolateClamp","interpolateRound","re","formatSpecifier","specifier","FormatSpecifier","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","formatDecimal","toExponential","coefficient","src_exponent","formatTrim","out","i1","formatRounded","exponent","formatTypes","%","toFixed","toPrecision","X","toUpperCase","src_identity","prefixes","src_locale","group","grouping","thousands","formatGroup","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","interval","x0","x1","pow10","powp","base","E","exp","logp","log10","log2","reflect","logs","pows","z","raise","thresholds","threshold","quantiles","quantize","t0","newInterval","floori","offseti","offset","previous","setMonth","setHours","setFullYear","setDate","durationMinute","durationWeek","weekday","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","hour","minute","second","millisecond","utcWeekday","setUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","localDate","L","utcDate","UTC","newDate","timeFormat","pads","-","0","numberRe","percentRe","requoteRe","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","formatWeekNumberISO","timeThursday","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatPeriod","formatQuarter","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","formatUTCQuarter","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseSpecifier","parsePeriod","parseLocaleDate","parseLocaleTime","newParse","week","utcFormat","utcParse","durationSecond","durationHour","durationDay","durationMonth","durationYear","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","tickIntervals","tickInterval","src_time","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds","src_colors","deg2rad","PI","rad2deg","C","D","ED","EB","BC_DA","cubehelix","cubehelixConvert","Cubehelix","bl","atan2","cubehelixGamma","colorCubehelix","cosh","cos","sinh","sin","cubehelixLong","interpolateCubehelixLong","ramp","sequential","interpolator","d3_scale_chromatic_src_colors","src_ramp","scheme","interpolateRgbBasis","magma","inferno","plasma","warm","cool","sequential_multi_rainbow","ts","UNIT_GLOBAL_NAMESPACE","UNIT_LOCAL_NAMESPACE","LAYER_LOCAL_NAMESPACE","LAYER_GLOBAL_NAMESPACE","GROUP_GLOBAL_NAMESPACE","GROUP_LOCAL_NAMESPACE","CANVAS_LOCAL_NAMESPACE","CANVAS_GLOBAL_NAMESPACE","swap","tmp","defaultCompare","quickselect","quickselectStep","createNode","leaf","minX","minY","maxX","maxY","distBBox","toBBox","destNode","calcBBox","compareNodeMinX","compareNodeMinY","bboxArea","bboxMargin","enlargedArea","intersectionArea","contains","intersects","findItem","items","equalsFn","multiSelect","stack","all","nodesToSearch","_toConsumableArray","RTree","maxEntries","_maxEntries","_minEntries","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","childBBox","err","insert","splitRoot","tmpNode","insertSingleItem","goingUp","indexes","condense","N2","N1","compareMinX","right2","compareMinY","right3","level","minArea","minEnlargement","targetNode","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","area","enlargement","isNode","insertPath","chooseSubtree","adjustParentBoxes","chooseSplitAxis","splitIndex","chooseSplitIndex","newNode","minOverlap","bbox1","bbox2","overlap","allDistMargin","leftBBox","rightBBox","margin","siblings","ReservedFields","MEASURE_NAMES","CommonProps","ACTION_INF","ON_LAYER_DRAW","MATRIX_CREATED","COORD_TYPES","POLAR","CARTESIAN","DATA_TYPE","d3_axis_src_identity","bottom","epsilon","translateX","translateY","entering","__axis","axis","orient","tickArguments","tickValues","tickTransform","tickSizeInner","tickSizeOuter","tickPadding","transform","spacing","range0","range1","center","selection","selectAll","tick","tickExit","exit","tickEnter","enter","attr","line","transition","getAttribute","tickSize","pi","halfPi","tau","asin","symbol_circle","draw","moveTo","arc","symbol_cross","lineTo","closePath","tan30","tan30_2","diamond","square","rect","kr","kx","ky","star","wye","y0","y1","x2","y2","sqrt3","triangle","tauEpsilon","Path","_x0","_y0","_x1","_y1","quadraticCurveTo","bezierCurveTo","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","a0","ccw","dx","dy","cw","da","d3_shape_src_constant","none","series","order_ascending","sums","offset_none","s0","stackValue","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","point","curve_linear","Step","_t","_x","_y","curve_step","stepBefore","stepAfter","that","_k","_x2","_y2","Cardinal","tension","custom","cardinal","CatmullRom","alpha","_alpha","_l01_a","_l12_a","_l23_a","_l01_2a","_l12_2a","_l23_2a","x23","y23","curve_catmullRom","catmullRom","src_line","pointX","pointY","defined","curve","curveLinear","buffer","defined0","src_descending","d3_shape_src_identity","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","cornerTangents","rc","ox","oy","x11","y11","x10","y10","x00","y00","d2","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","colorHsl","hslLong","cubicInOut","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceOut","elasticOut","elasticIn","amplitude","period","backInOut","elasticInOut","backIn","overshoot","backOut","polyInOut","polyIn","polyOut","d3_voronoi_src_constant","RedBlackTree","RedBlackNode","R","RedBlackRotateLeft","tree","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","createEdge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","epsilon2","ha","hc","circle","Circle","before","circles","detachCircle","beachPool","createBeach","beach","Beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","extent","sortCellHalfedges","clipEdges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","cover","dc","v00","v01","v11","v10","polygons","polygon","triangles","e1","links","radius","_found","vx","vy","src_voronoi","voronoi","Selection","idGetter","selection_classCallCheck","_dataObjects","_updateData","_enterData","_exitData","_idGetter","newData","entryData","exitdata","tempMap","duplicateData","updatedData","newSelection","dataObjects","defaultValue","_mode","mergedObjects","mergedData","newdata","sortSel","sortSelection","kA","kB","selection_toConsumableArray","objects","dataSelect","idFn","STRING","FUNCTION","HTMLElement","common_utils_typeof","checkExistence","nonExistentKeys","sanitizeIP","typeObj","htmlElem","getMax","common_utils_toConsumableArray","getMin","getDomainFromData","domArr","_loop","_fields","_slicedToArray","field0","field1","arr0","firstMin","secondMin","firstMax","secondMax","sanitizeDomainWhenEqual","unionDomain","domains","_ref2","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getExtremePoint","points","compareValue","minOrMax","extremePoint","minOrMaxVal","getMinPoint","getMaxPoint","getNearestValue","filterData","getWindow","cancelAnimFrame","cancelAnimationFrame","capitalizeFirst","txt","vals","getMinDiff","uniqueVals","getQualifiedClassName","cls","getDependencyOrder","dependencyOrder","visited","visit","objectIterator","Voronoi","common_utils_classCallCheck","_voronoi","_voronoiFn","getObjProp","_len","_key","intSanitizer","generateGetterSetters","propInfo","_propInfo$","sanitization","preset","onset","typeChecker","getArraySum","total","arraysEqual","isEqual","oldVal","newVal","is","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","registerImmediateListener","_ref3","isHTMLElem","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","createSelection","sel","appendObj","mergedSelection","exitSelection","getObjects","inst","interpolateArray","fitCount","linearInterpolate","atPoint","springFactor","angleToRadian","angle","replaceCSSPrefix","numberInterpolator","interpolateNumber","colorInterpolator","interpolateRgb","hslInterpolator","interpolateHslLong","transformColors","piecewiseInterpolator","hue2rgb","hslToRgb","rgbToHsv","hsvToRgb","hexToHsv","hslaToRgb","_hslToRgb2","RGBAtoRGB","r2","g2","r3","g3","detectColor","col","assembleModelFromIdentifiers","fieldMap","_loop2","temp","cIdx","getDataModelFromRange","criteriaFields","selFields","selFn","fieldValue","getArrayIndexMap","getDataModelFromIdentifiers","hasBarLayer","filteredDataModel","dataArr","filteredSchema","include","propField","registerListeners","listenerMap","_len2","_key2","propListenerMap","namespace","mapObj","propType","listenerFn","listener","isValidValue","escapeHTML","htmlEscapes","&","<",">","\"","'","/","transposeArray","extendsClass","extendsFrom","found","concatModels","dataObj1","dataObj2","data1","data2","schema1","schema2","commonTuples","_loop3","row1","row2","dim1Values","dim2Values","dm1Key","dm2Key","commonSchema","getSymbol","stackOrders","_defineProperty","_stackOrders","stackOrderNone","stackOrderAscending","stackOffsets","_stackOffsets","yp","yn","stackOffsetNone","si","sij0","s3","sk","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","nestCollection","nestFn","getArrayDiff","el","pathInterpolators","curveStepAfter","curveStepBefore","curveStep","curveCatmullRom","Symbols","axisLeft","axisRight","axisTop","axisBottom","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","pie","descending","arcs","pa","cornerRadius","padRadius","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","intersect","x3","y3","x32","y32","kc","lc","centroid","Scales","scaleBand","getSmallestDiff","timeFormats","timeDurations","formatTemporal","nearestInterval","getNearestInterval","temporalFields","filteredFields","_ref5","_ref6","lookupWhat","lookupDetails","resolvable","lookupTarget","depArr","deps","nextAnimFrame","getValueParser","retrieveNearestGroupByReducers","_len3","measureFieldNames","_key3","filteredReducers","getAncestorDerivations","nearestReducers","derv","retrieveFieldDisplayName","nearestSortingDetails","nearestSortDerivation","sortingOrder","localeCompare","sortOrderMap","_sortOrderMap","firstVal","secondVal","sortCategoricalField","sortOrderType","_accessors","fn1","fn2","_accessors2","partition","mix","superclass","with","_with","_len4","mixins","_key4","mixin","componentRegistry","comps","reg","regObj","register","customKey","formalName","getReadableTicks","steps","orderedDomain","tempScale","scales","legendTicks","transformColor","rgbaValues","_ref7","_ref7$h","_ref7$s","_ref7$l","_RGBAToHSLA$code","RGBAToHSLA","cmin","cmax","delta","code","origH","origS","origL","origA","sanitizedA","newH","newS","newL","newA","pointWithinCircle","dmMultipleSelection","targetData","payloadMap","currentField","getIndexMap","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","sparse","EnterNode","ownerDocument","namespaceURI","_next","__data__","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","xhtml","src_namespaces","xlink","xml","xmlns","src_namespace","namespaces","space","local","src_window","defaultView","styleValue","getPropertyValue","getComputedStyle","classArray","classList","ClassList","_names","classedAdd","classedRemove","textRemove","htmlRemove","nextSibling","lower","previousSibling","creator","fullname","creatorFixed","creatorInherit","uri","documentElement","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","attrRemoveNS","removeAttributeNS","attrRemove","removeAttribute","attrFunctionNS","attrFunction","attrConstantNS","attrConstant","priority","styleRemove","removeProperty","styleFunction","setProperty","styleConstant","propertyRemove","propertyFunction","propertyConstant","classed","classedFunction","classedTrue","classedFalse","textFunction","textConstant","html","htmlFunction","htmlConstant","deep","typenames","parseTypenames","dispatch","dispatchFunction","dispatchConstant","src_select","src_point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","getBoundingClientRect","clientLeft","clientTop","noop","Dispatch","T","types","current","mouse","changedTouches","src_touch","touches","identifier","touch","nopropagation","stopImmediatePropagation","noevent","preventDefault","nodrag","view","__noselect","MozUserSelect","d3_drag_src_constant","DragEvent","subject","active","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","maxTouchPoints","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","taskHead","taskTail","frame","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","timer_typeof","now","setFrame","clearNow","Timer","_call","_time","timer","delay","restart","wake","timerFlush","nap","sleep","poke","clearInterval","setInterval","src_timeout","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","transition_schedule","timing","schedules","__transition","self","tween","state","duration","ease","schedule","cssNode","cssRoot","cssView","svgNode","degrees","rotate","skewX","scaleX","scaleY","decompose","atan","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","interpolateTransformCss","parseCss","interpolateTransformSvg","parseSvg","baseVal","consolidate","matrix","tweenValue","_id","transition_interpolate","interpolateString","Transition","_name","newId","selection_prototype","inherit","id0","id1","onFunction","on0","on1","sit","attrTween","string00","string10","interpolate0","string0","string1","value1","attrTweenNS","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleMaybeRemove","listener0","styleInterpolate","textTween","textInterpolate","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Promise","reject","cancel","interrupt","defaultTiming","easeCubicInOut","selectElement","element","makeElement","elemType","callbacks","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","exitSel","applyStyle","appendElement","element1","element2","setElementAttrs","attrs","setAttrs","addClass","removeClass","setStyles","styles","createElements","clipElement","measurement","clipPathElement","getMousePos","boundingClientRect","getClientPoint","pos","clientPoint","tag","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","initProp","fetchPropValues","propNames","setContexts","contexts","propObj","contextMap","depProps","registerListener","propList","callBack","_options$","namespaceInf","callbackFn","namespaceVal","commits","_savedCommits","_propListenerMap","listenersObj","_registeredListeners","_contextMap","contextsObj","commitsObj","subNamespaces","propDeps","nm","fnInf","store_toConsumableArray","registerPropInMaps","registeredListeners","subNamespace","allProps","_fnCount","addListenerToNamespace","_listeners","namespaceListeners","listenerTypes","removePropValue","propInf","sns","Store","store_classCallCheck","_commits","_queuedProps","_locked","store_createClass","lockModel","lock","unlockModel","unlock","lockCommits","locked","unlockCommits","queuedProps","store_slicedToArray","propName","_params2","commit","addSubNamespace","propFns","nsObj","retrieveNamespaces","disableListener","sanitizedVal","savedCommits","disabled","registerChangeListener","computed","calculatedProp","_this$model","unsubscribeAll","unsubscribe","listenersMap","removeSubNamespace","snsMap","transactor","holder","stateProps","nameSpaceProp","nsProp","_len5","_key5","_ref$takesMultiplePar","takesMultipleParams","prevVal","typeCheck","typeExpected","oldValues","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","_preparePromises","promise","_makeNotifierPromise","createPromise","then","prm","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","lifeCycles","CLASSPREFIX","STACK","GROUP","IDENTITY","ANGLE","RADIUS","SIZE","COLOR","SHAPE","TEXT","OUTER_RADIUS_VALUE","TEXT_ANCHOR_MIDDLE","ENCODING","X0","Y0","RADIUS0","ANGLE0","STROKE_DASHARRAY","ASCENDING","AGG_FN_SUM","AREA_LAYER","ARC_LAYER","LINE_LAYER","TEXT_LAYER","POINT_LAYER","BAR_LAYER","TICK_LAYER","SIMPLE_LAYER","BASE_LAYER","SimpleLayer","DATA","CONFIG","MEASUREMENT","DOMAIN","MOUNT","props_defineProperty","_props","axes","metaInf","valueParser","coord","PROPS","_customConfig","newConf","defaultPolicy","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","AxisOrientation","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","SEQUENTIAL","THRESHOLD","CONTINOUS","DISCRETE","HIDDEN","DEFAULT_ANGLE_DOMAIN","scaleLinear","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","ScaleType","createScale","scaleFactory","adjustRange","axisName","defClassName","axisNamePadding","classPrefix","fixedBaseline","labels","rotation","smartTicks","orientation","numberOfTicks","show","showAxisName","showInnerTicks","showOuterTicks","xOffset","yOffset","defaultSort","changeTickOrientation","selectContainer","axisInstance","_smartTicks","renderConfig","labelManager","isSmartTicks","tickText","registerAnimationDoneHook","rotateAxis","instance","getTickSize","yShift","xShift","tickLabelDim","quadrant","rotationNormalizer","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","availableSpace","longestWord","quarter","halfYearly","mintues","getTickIntervalFnBasedOnNumberOfTicks","possibleTickLevelIndex","maxPossibleTicks","tickIntervalLevelInfo","tickIntervalInfo","numOfPossibleTicks","getActualTickInterval","noOfTicks","minWidthBetweenTicks","_minTickDistance","getTickIntervalBasedOnCurrentLevel","_dependencies","longestWordType","applyTickSkipping","minTickDistance","minTickSpace","_minTickSpace","minTickWidth","maxTicks","getSkippedTicks","actualNumberOfTicks","_minDiff","millisecondInterval","numOfTicksAccordingToMinDiff","adjustHorizontalRange","adjustVerticalRange","rangeAdjustmentMap","space_setter_defineProperty","_rangeAdjustmentMap","setAxisRange","rangeBounds","getAdjustedRange","getAxisOffset","timeDiff","avWidth","bars","spaceSetter","spaceConfig","heightForTicks","_context$availableSpa2","availWidth","availHeight","isOffset","_context$renderConfig2","_context$getAxisDimen","getAxisDimensions","tickDimensions","allTickDimensions","axisNameDimensions","tickDimHeight","tickDimWidth","namePadding","labelConfig","minTickHeight","getTickValues","tickShifter","maxTickSpaces","widthForTicks","totalTickWidth","getRotatedSpaces","rotatedHeight","rotatedWidth","setOffset","logicalSpace","getAxisComponentDimensions","axisTicks","largestTick","largestTickDimensions","smartTick","_context$renderConfig","labelFunc","_tickLabelStyle","originalLabel","getFormattedText","_axisNameStyle","getHorizontalAxisSpace","axisDimensions","_context$config2","axisDimHeight","minTickDiff","getMinTickDifference","helper_toConsumableArray","getVerticalAxisSpace","_context$config3","calculateBandSpace","largestDimHeight","_getHorizontalAxisSpa","_getVerticalAxisSpace","getValidDomain","userDom","setContinousAxisDomain","_domain","axisComponentDimensions","oldConfig","_config","mockedOldConfig","shouldAxesScaleUpdate","hasAxesConfigChanged","properties","tickFormatter","sanitizeTickFormatter","_scale","_axis","createAxis","_tickFormatter","resetRenderConfig","_renderConfig","_maxTickSpaces","SimpleAxis","simple_axis_classCallCheck","_mount","_range","_domainLock","_axisDimensions","defCon","simpleConfig","bodyElem","dist","_animationDonePromises","domainValue","setAxisComponentDimensions","smartAxisName","axisClass","_objectSpread","setTickConfig","setSmartAxisName","_this$config2","dimType","widthDim","getSmartAxisName","oriSize","domainVal","computeAxisDimensions","_getAxisComponentDime","labelHeight","labelWidth","calculateContinousSpace","_context$renderConfig6","axisNameWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","renderAxis","labelProps","tickLabelStyle","axisTickFormatter","labelOffset","tickData","allTicks","elementToBeModified","elementNotToBeModified","tickValue","_getRawTickValue","selectionSet","rejectionSet","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","InterpolatorCls","_interpolator","getScaleValue","_this$renderConfig","sanitizeDomain","_get2","_get","_this$renderConfig2","newTickValues","tickSpace","getNumberOfTicks","labelDim","numberOfValues","tickLength","_this$smartTicks$","BandAxis","_this$maxTickSpaces","_getRotatedSpaces","paddingNormalized","formatTickValue","TimeAxis","_getPrototypeOf2","time_axis_classCallCheck","time_axis_possibleConstructorReturn","time_axis_getPrototypeOf","time_axis_get","rawTicks","resetTickInterval","_context$config8","_context$availableSpa","adjustedRange","x11Colors","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Gold","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","MediumAquamarine","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","SlateBlue","MediumSlateBlue","White","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","Gainsboro","LightGray","Silver","DarkGrey","Grey","DimGrey","LightSlateGrey","SlateGrey","DarkSlateGrey","Black","palette","DEFAULT_GRADIENT_COLOR","DEFAULT_CONFIG","stops","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","props_toConsumableArray","newConfig","uniqueValues","treatNullMeasures","scaledVal","minDomainScaledVal","resolveAxisConfig","propVal","defaultVal","sanitiseConfigIntervals","intervals","getStops","newStops","color_strategy_toConsumableArray","indexedDomain","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","rangeStops","newStopsLength","newRange","continousSteppedDomain","_getStops2","uniqueRange","indexedRange","numVal","normalRange","strategyGetter","domainType","rangeType","schemeType","strategies","color_strategy_defineProperty","domainRange","ColorAxis","color_axis_classCallCheck","_domainType","_rangeType","_schemeType","getSchemeType","_colorStrategy","setColorStrategy","updateDomain","colorStrategy","getScheme","colorSchemes","hslColorArray","getRawColor","color_axis_toConsumableArray","scaleType","scaleInfo","originalDomain","originalRange","originalDomainLen","originalRangeLen","newDomain","_linearScale","rangeVal","domainRangeFn","setRangeWithInterpolatedColors","transformationArr","size_strategy_defineProperty","_strategies","pieceWiseRange","size_strategy_toConsumableArray","newIntervals","discreteRange","_userRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","setStrategy","strategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","createAngleValues","angleData","_angleFn","_angleValues","AngleAxis","angle_axis_classCallCheck","customDomain","customRange","_this$_range","angle_axis_slicedToArray","WIDTH","HEIGHT","MIN_UNIT_WIDTH","MIN_UNIT_HEIGHT","DIMENSIONS","MEASURES","PIVOT","FORMAT","HAS_DATA_UPDATED","ROWS","COLUMNS","COL","ROW","COLUMN","DETAIL","LAYERS","TRANSFORM","RETINAL","CELL","X_AXES","Y_AXES","ENTRY_CELLS","INITIALIZED","EXIT_CELLS","AXIS","UNIT","UPDATED","BEFORE_UPDATE","VALUE_MATRIX","FACET_HEADERS","ARC","BAR","LINE","POINT","PRIMARY","SECONDARY","BOTH","INTERACTION","GRID_LINES","GRID_BANDS","HEADER","FACET","DEFAULT","DESCENDING","DARK","NONE","DARKER","adjustDomain","minOuterRadius","RadiusAxis","radius_axis_classCallCheck","_radiusFactor","sanitizedRange","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","stackData","seriesData","transformFactory","colorAxis","styleType","intensity","interactionType","stateColor","currentState","originalState","colorInfo","applyInteractionStyle","interactionStyles","elements","getPlotElementsFromSet","reset","applyLayerStyle","retrieveEncodingInf","encoding","encodingNames","encodingInf","encodingFieldInfRetriever","helpers_defineProperty","_encodingFieldInfRetr","setNullsInStack","transformedData","setNulls","transformData","transformType","encodingFieldInf","setNullData","connectNullData","xField","yField","xFieldType","yFieldType","getIndividualClassName","individualClassName","classNameStr","dataNormalizers","_dataNormalizers","radiusFieldIndex","angleFieldIndex","radius0FieldIndex","angle0FieldIndex","fieldsLen","pointObj","radius0","angle0","enc","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","getNormalizedData","transformedDataArr","encodingFieldsInf","domainCalculator","_domainCalculator","layerInst","angleValues","radius0Field","xFieldSubType","yFieldSubType","x0Field","y0Field","yEnc","xEnc","defFn","_d$update","attachDataToVoronoi","accessor","helpers_toConsumableArray","_accessor","updateStyle","animateGroup","groupTransition","groupAnimateStyle","effect","positionPoints","positioner","encodingTransform","getGroupSpan","getUnitWidth","getPlotMeasurement","dimensionalValues","fieldInfo","bandScale","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","timeDiffs","innerPadding","isAxisBandScale","axisPadding","groupPadding","renderLayer","render","throwback","parentNamespace","resolveInvalidTransformType","transformResolverPredicates","groupByField","dimensionField","getValidTransform","getValidTransformForAggFn","resolvedInvalidTransformType","_context$encodingFiel","isCustomTransformTypeProvided","getMarkId","resolveEncodingValues","transformedValues","getColorMetaInf","initialStyle","originalStyle","getCoordValue","trig","coordValueGetter","toCartesianCoordinates","rangePlot","_point$update","_coordValueGetter","sortData","axisArr","getBoundBoxes","_point$update2","getDataFromEvent","dataPoint","getIdentifiersFromData","layerId","localOptions","local_options_defineProperty","STATE_NAMESPACES","listener_map_slicedToArray","prevData","dataDidSet","getPreviousStyle","stylesForCurrentLevel","getLastItemInMap","strokeProps","stroke-width","stroke","stroke-opacity","parseStyle","datumStyle","applyStylesOnInteraction","_datum$meta","applicableStyles","strokePosition","applicableStrokePos","sanitizedStyles","parsedStyleVal","currentStyle","styleKeys","_partition2","helper_slicedToArray","strokeStyles","otherStyles","applyStyles","layerNs","groupNs","BaseLayerMixin","_superclass","_class","base_mixin_classCallCheck","base_mixin_possibleConstructorReturn","base_mixin_getPrototypeOf","base_mixin_assertThisInitialized","getterSetters","alias","_points","_cachedData","_measurement","_graphicElems","base_mixin_inherits","base_mixin_createClass","_store","_this$metaInf2","_alias","enableCaching","_cacheEnabled","clearCaching","getTransformedData","calculateDomainFromData","isEmpty","getDataDomain","encodingType","_this$metaInf3","getUidsFromPayload","uidsArr","dmUids","getUids","getNearestPoint","interactionConfig","interaction","resolveTransformType","_transformType","_this$metaInf4","unitDom","cachePoint","pointMap","_pointMap","getInteractionStyles","addOverlayPath","removeOverlayPath","interactionFn","allMeasures","_identifiers$","_identifiers$2","hasPlotSpan","getPlotSpan","getPlotPadding","getPointsFromIdentifiers","getAllAttrs","filteredPoints","base_mixin_toConsumableArray","sizeVal","getTransformedDataFromIdentifiers","measureIndex","_identifiers$getData","identifierData","identifierSchema","_normalizedData","_this$encodingFieldsI","layerName","tupleArr","transformedVal","graphicElems","elems","animationDone","base_mixin_slicedToArray","encodingValue","retrieveEncodingFields","_transformedData","calculateDomain","applyElementStyles","getState","getListeners","getRenderProps","_context$metaInf","unitRowIndex","unitColIndex","base_mixin_defineProperty","getQualifiedStateProps","_construct","userConf","shouldDrawAnchors","BaseLayer","containsNull","getborderIndexes","prevOfNull","nextOfNull","settIndexPrevOrNext","indexesObj","prevContainsNull","nextContainsNull","getElementsForLine","layer","strokeStyle","linepath","updateFns","drawLine","containerSelection","nullDataLineStyle","nullDataLineClass","curveInterpolatorFn","dd","elementWithNullData","sanitizeNullConfig","makeStartEndPair","borderIndexes","pairArray","pair","prevValue","nextValue","fade","focus","brushStroke","crossline","nearestPointThreshold","strokeOpacity","fillOpacity","strokeWidth","LineLayerMixin","line_mixin_classCallCheck","line_mixin_possibleConstructorReturn","line_mixin_getPrototypeOf","line_mixin_inherits","line_mixin_createClass","getDrawFn","translatePoints","xAxis","yAxis","isXDim","isYDim","xPx","yPx","getColor","resolvedEncodings","getTranslatedData","colorValFn","colorFieldIndex","colorVal","getPathStyle","qualifiedClassName","colorField","translatedPoints","seriesClassName","searchRadius","_point$data$data","line_mixin_toConsumableArray","line_mixin_get","drawArea","easeEffect","_map2","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayerMixin","area_mixin_classCallCheck","area_mixin_possibleConstructorReturn","area_mixin_getPrototypeOf","area_mixin_inherits","area_mixin_createClass","area_mixin_get","nearestPoint","dimValue","pointArr","_pointArr$i$update","pointY0","classNameFn","minYVal","basePos","y0Px","invalidY","invalidY0","resolvedValues","AreaLayer","highlight","stroke-linejoin","shape","states","fadeout","selected","ArcLayerMixin","arc_mixin_classCallCheck","arc_mixin_possibleConstructorReturn","arc_mixin_getPrototypeOf","_prevPieData","arc_mixin_inherits","arc_mixin_createClass","_this$axes","radiusAxis","pieIndex","angleV","angles","_angles","uid","getOuterRadius","getInnerRadius","startAngle0","endAngle0","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_context$axes$angle$r2","arc_helper_slicedToArray","_this$config","qualClassName","_arcFn","consecutiveExits","exitCounter","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","ArcLayer","LineLayer","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","alignment-baseline","defaultEncoding","alignmentBaseLine","defRotation","pointTranslators","polar","textEncoding","angleAxis","textFormatter","backgroundEncoding","backgroundValue","text_mixin_objectSpread","cartesian","textField","textFieldIndex","textValue","text_mixin_slicedToArray","TextLayerMixin","text_mixin_classCallCheck","text_mixin_possibleConstructorReturn","text_mixin_getPrototypeOf","text_mixin_inherits","text_mixin_createClass","getPointTranslator","text-anchor","TextLayer","drawSymbols","createShape","groupElement","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","pathEl","exitGroup","defColorStyle","focusStroke","commonDoubleStroke","doubleStroke","anchors","persistent-anchors","brush-anchors","shapes","sizes","prepareDrawingInf","shapeAxis","sizeAxis","getShape","getSize","layerEncoding","helper_defineProperty","_config$offset","offsetX","offsetY","point_helper_slicedToArray","measure","getStrokeWidthByPosition","inside","outside","PointLayerMixin","point_mixin_classCallCheck","point_mixin_possibleConstructorReturn","point_mixin_getPrototypeOf","_overlayPath","formattedUids","point_mixin_inherits","point_mixin_createClass","maxSize","generateDataPoints","point_mixin_toConsumableArray","drawFn","_maxSize","_getPlotMeasurement2","point_mixin_slicedToArray","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","refElement","pathElement","parentElement","styleVal","currentPath","point_mixin_get","PointLayer","drawRects","barEnterFn","transitionBars","selTransition","positionRetriever","isNegativeVal","barBasePos","resolveDimByField","axesInfo","spaceType","sizeEncoding","sizeConfig","sizeValue","enterSpace","minVal","maxVal","diffPx","minDomVal","endPos","_positionRetriever$ty2","bar_helper_slicedToArray","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayerMixin","bar_mixin_classCallCheck","bar_mixin_possibleConstructorReturn","bar_mixin_getPrototypeOf","_plotPadding","_plotSpan","_rtree","bar_mixin_inherits","bar_mixin_createClass","bar_mixin_get","getTranslatedPoints","normalizedDataArr","barContainer","load","bar_mixin_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","pathGroup","_strokeWidthPositionM","strokeWidthPositionMap","L1","L2","L3","BarLayer","tick_renderer","pathElem","angle0Axis","angle0V","angles0","_angles2","tick_mixin_objectSpread","_layerInst$encodingFi","_config$span","xSpan","ySpan","x0Px","TickLayerMixin","tick_mixin_classCallCheck","tick_mixin_possibleConstructorReturn","tick_mixin_getPrototypeOf","tick_mixin_inherits","tick_mixin_createClass","offsetM","offsetL","_ref$position","drawTicks","TickLayer","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","_layerRegistry","getSerializedConf","mark","layerDef","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","propValue","layer_factory_toConsumableArray","getLayerInstance","layerRegistry","instances","layerObj","layerConstructor","getLayerClass","composeLayers","layerDefs","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","LAYER_TYPES","layer_registry","layers","helpers","commonHelpers","pointLayerHelpers","layerMixins","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","sizeField","shapeField","_retinalEncodingsAndM","src_helper_toConsumableArray","transformDataModels","dataModels","transformVal","getLayerFromDef","existingLayer","rowIndex","colIndex","instanceArr","_timeDiffs","resolveEncodingTransform","sanitizeLayerDef","sanitizedDefs","sConf","attachDataToLayers","transformedDataModels","dataSource","attachAxisToLayers","layerAxisIndex","axesObj","axisInf","axisIndex","getLayerAxisIndex","_layer$config","specificField","encodingField","fieldInst","getMembers","unionDomainFromLayers","axisFields","domainValues","layerDomain","fieldDomain","encodingDomain","fieldStr","domain1","renderLayers","_lifeCycleManager","notify","orderedLayers","layerParentGroup","layerDepOrder","_layerDepOrder","getNearestDimensionalValue","entryVal","getLayersBy","searchBy","removeLayersBy","createSideEffectGroup","createRenderPromise","_renderedPromise","_renderedResolve","getRadiusRange","radiusAxes","createRTree","interactive","rtree","AXES","LAYERDEFS","TRANSFORMEDDATA","DATADOMAIN","FIELDS","LAYERAXISINDEX","IDFIELD","GRID_LINE_PARENT_GROUP_CLASS","GRID_BAND_PARENT_GROUP_CLASS","GRID_PARENT_GROUP","TICK","GRID_BAND","GRID_LINE","CONSOLIDATED","FRAGMENTED","FACET_BY_FIELDS","RETINAL_FIELDS","PARENT_ALIAS","CACHED_DATA","STORE","DRAG","HOVER","SELECTIONDRAG","CLICK","LONGTOUCH","TOUCHDRAG","ALL_ACTIONS","SELECTION_NEW_ENTRY","SELECTION_NEW_EXIT","SELECTION_NULL","SELECTION_OLD_ENTRY","SELECTION_OLD_EXIT","SelectionSet","_volatile","selection_set_classCallCheck","completeSet","_uidMap","_measureNames","_dimVals","measureNames","dims","_fieldIndices","_completeSetCount","_resetted","uidMap","entrySet","exitSet","mergedEnter","mergedExit","dimVals","keepDims","_config$fields","_config$keys","measureNamesArr","addSet","removeSet","changeSideEffectAvailability","toEnable","sideEffects","change","enable","disable","getMergedSet","muze_firebolt_src_helper_toConsumableArray","getSideEffects","behaviour","behaviourEffectMap","behaviours","effects","getUidsFromCriteria","dimensionsMap","dimsMapGetter","_ref$addMeasures","addMeasures","firebolt_defineProperty","fieldIndexMap","measureNameField","propDims","dimsMap","dimKey","origRow","rowVal","measuresArr","firebolt_toConsumableArray","cloneObj","clonedVal","Firebolt","actions","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_sourceSelectionSet","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sideEffectPolicies","_propagationBehaviourMap","_behaviourPolicies","_actionBehaviourMap","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","_handlers","_payloadGenerators","_payloads","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","setSideEffectConfig","sideEffect","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","initializeSideEffects","sideEffectStore","actionHistory","queuedSideEffects","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","setTransform","propagationInfo","propagate","entryExitSet","shouldApplySideEffects","shouldApplyHighlightEffect","propagationIdentifiers","applicableSideEffects","getApplicableSideEffects","applySideEffects","getEntryExitSet","sourceSelectionSet","behaviourConditions","sideEffectConditions","physicalAction","actionBehaviourMap","behaviourMap","mapActionsAndBehaviour","handler","onDataModelPropagation","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","sideEffectsMap","SideEffect","initedActions","initializePhysicalActions","physicalActions","phyAction","initedPhysicalActions","getDefaultTargetContainer","bindActionWithBehaviour","registerPhysicalActionHandlers","targets","behaviourList","getKeysFromCriteria","firebolt","_metaData","_dimsMapGetter","handlers","genericHandlers","onPhysicalAction","beh","_this$context","getRangeFromIdentifiers","defaultFn","__default","EntryExitSet","entry_exit_set_classCallCheck","_uids","_data","_filteredModel","_model","entry_exit_set_createClass","GenericBehaviour","generic_classCallCheck","_enabled","getSelectionSet","getPropagationInf","_this$getAddSetFromCr","getAddSetFromCriteria","_payload","setSelectionSet","_this$firebolt","_selectionSet$getSets","getSets","getSetInfo","getSourceFields","fullData","propData","propagationFields","resetted","otherFields","generic_slicedToArray","generic_toConsumableArray","_propagationIdentifiers","VolatileBehaviour","existingAddSet","SELECTION","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","HighlightBehaviour","BrushBehaviour","BEHAVIOURNAMES","FilterBehaviour","PersistentBehaviour","updateEntry","SelectBehaviour","mergedExitSet","completeSetCount","dragCriteriaRetriever","drag_action_config_defineProperty","_dragCriteriaRetrieve","sourceInfo","startPos","ranges","getRangeFromPositions","getDragActionConfig","getSourceInfo","coordType","attachDragEvent","targetEl","drawingInf","touchStart","d3Drag","getDrawingContext","newStartPos","newEndPos","dragging","dragDiff","triggerPhysicalAction","dragEnd","hideSelBox","hover","tooltip","svgContainer","getAllPoints","showInPosition","ACTION_NAMES","generatePayloadFromEvent","selectionBoxDrag","onDrag","ACTIONS","click","physical_defineProperty","_physicalActions","longtouch","touchEnd","touchdrag","ANCHORS","BRUSH_ANCHORS","PERSISTENT_ANCHORS","HIGHLIGHTER","CROSSLINE","FRAGMENTED_TOOLTIP","AXIS_LABEL_HIGHLIGHTER","GenericSideEffect","generic_sideeffect_classCallCheck","_strategy","plotPointsFromIdentifiers","_this$firebolt$contex","getPlotPointsFromIdentifiers","_sourceInfo","_layers","_plotPointsFromIdentifiers","SurrogateSideEffect","_config$reset","layerFields","filteredUids","_ref2$","surrogate_slicedToArray","SpawnableSideEffect","_drawingContext","changeVisibility","sideEffectGroup","visible","SelectionBox","boxConf","box","drawingContext","unitWidth","unitHeight","selectionGroupClassName","persistent","hide","sourceInf","_getBoxDimensionsFrom","getBoxDimensionsFromPayload","xRange","yRange","xDim","yDim","xLinear","yLinear","xCriteria","yCriteria","x1Val","x2Val","x1DomainIndex","x2DomainIndex","_sort2","selection_box_helper_slicedToArray","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort4","_xDim","_yDim","direction","selectionBox","selection_box_defineProperty","BEHAVIOURS","boxClassName","parentClassName","connectorClassName","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","arrow","Content","content_classCallCheck","_formatter","ctx","displayFormat","table","tbody","elemData","Tooltip","htmlContainer","tooltip_classCallCheck","connectorContainer","tooltipConf","contentClass","_tooltipContainer","_contentContainer","_contents","_tooltipConnectorContainer","defConf","contentConfig","specificClass","reorderContainers","contentConf","_target","tooltipPos","_orientation","connector","_offset","dim","_extent","contentContainer","topSpace","dimX","rightSpace","leftSpace","bottomSpace","arrowSize","tooltipHeight","tooltipWidth","spaces","positionHorizontal","positionVal","positionVertical","hMax","vMax","_position","HIGHLIGHT_SUMMARY","defNumberFormat","formatters","strategies_defineProperty","isSingleValue","dataLen","stackedSum","getStackedKeyValue","getKeyValue","isSelected","removeKey","isStackedBar","stackedValue","keyObj","valueObj","stackedValueObj","margin-left","getStackedSum","generateRetinalFieldsValues","valueArr","retinalFields","dimensionMeasureMap","fieldInf","retField","retIndex","retinalFieldValue","icon","_fieldInf$retField","formattedRetinalValue","hasMultipleMeasures","_fieldInf$measure","dName","formatterFn","currentMeasureValue","strategies_toConsumableArray","buildTooltipData","nestedDataObj","fieldValues","_dataModel$getData","fieldspace","_context$retinalField","detailFields","_ref2$showStackSum","showStackSum","_context$payload$sele","selectedMeasures","containsDetailField","getFieldInf","defFormatter","nf","getTabularData","strategies_construct","isStacked","isStackedChart","isStackedBarChart","filteredMeasures","generateTooltipContent","nestedData","_nestedData$i","_fieldInf$field","len2","_fieldInf$name","strategies_strategies","showMultipleMeasures","aggFns","entryUids","fieldsConf","aggregatedValues","getAggregatedValues","groupedDm","dmFields","_values$0$data","_fieldsConf$measure$d","rowValues","shouldApplySideEffect","sourceDims","configResolvers","tooltip_defineProperty","_configResolvers","specificConf","_default","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","tooltip_getPrototypeOf","_tooltips","sanitizeConfig","strategyObj","sanitizedConf","createTooltip","tooltips","positionRelativeTo","tooltip_get","plotDim","_config$strategy","projectFields","dataTransform","strategyFn","dt","layoutContainer","parentContainerDimensions","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","highlightSummary","selectionSummary","FragmentedTooltip","totalHeight","totalWidth","boundBox","showVertically","boxes","fragmented_tooltip_toConsumableArray","fragmented_tooltip_get","fragmented_tooltip_getPrototypeOf","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","repositionArrow","Crossline","bandWidth","px","bandClass","lineClass","isEmptyDataModel","plotWidth","crossline_toConsumableArray","startPx","endPx","parentGroup","getFormattedSet","selectedPointsId","formattedSet","helper_objectSpread","fadeFn","fadeOnBrush","fadeOnBrushFn","getPayload","actualPoint","commonSet","excludeSetIds","currentHighlightedSet","selectEntrySet","diffSet","pseudoFocus","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","plot_highlighter_getPrototypeOf","excludeSet","selectedPointsIds","plot_highlighter_toConsumableArray","currentStrategy","getExcludeSetIds","plot_highlighter_objectSpread","FilterEffect","entryModel","resetData","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","anchors_getPrototypeOf","_layersMap","addAnchorLayers","addLayer","layerCls","depLayerEncoding","defaultSizeValue","commonName","layerOwner","defaultClassName","groupId","getTransitionConfig","owner","registry","upperAnchors","lowerAnchors","targetObj","anchors_toConsumableArray","layerConfig","linkedLayer","getLayerByName","linkedLayerName","isUpperAnchor","_linkedLayer$getTrans2","anchors_slicedToArray","dmFromPayload","_linkedLayer$getTrans4","transformedDataModel","anchorSizeConfig","getAnchorSizeOnInteraction","getAnchorStroke","PersistentAnchors","anchor","defaultInteractionLayerEncoding","BrushAnchors","AxisLabelHighLighter","selectedData","selectedDataValues","_context$axes","_context$axes$x","_context$axes$y","axis_labels_highlighter_toConsumableArray","fieldMeta","selData","_axis$getTicksBasedOn","getTicksBasedOnData","selectedElements","nullDataTooltipMap","bar","applySideEffectOnEmptyTarget","behaviour_effect_map_defineProperty","brush","brushEntrySet","returnEntrySet","highlightUids","SIDE_EFFECTS","convertToObj","payloadGenerator","selectionDataModel","facetByFields","propPayload","getRangeFromData","_propConfig$includeMe","includeMeasures","selectionDataFields","measureNamesIdx","propagationDataModel","propagationDataDims","excludeSelectedMeasures","payload_generator_defineProperty","identifierMap","getIdentifierMeasureMap","facetsMap","identifierIdxMap","facetPresent","facetVal","payload_generator_toConsumableArray","sourceFields","pseudoSelect","isSideEffectEnabled","se","sideEffectPolicies","sideEffectCheckers","propagationData","prepareSelectionSetMap","maps","getUniqueKeys","_ref2$keys","_ref2$dimensionsMap","mKey","firebolt_helper_toConsumableArray","createMapByDimensions","cacheMap","_cacheMap","sideEffectPolicy","sourceIdentifierFields","propFields","hasCommonCanvas","sourceCanvas","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","firebolt_getPrototypeOf","_connectedBehaviours","payloadGenerators","changeSideEffectStateOnPropagation","unitId","aliasName","parentAlias","propagationSourceCanvas","sourceUnitId","sourceUnit","sideEffectInstances","actionOnSource","mappedEffects","applySideEffect","enabledFn","enabled","getPayloadGeneratorFor","payloadFn","facetFieldsMap","behaviourPolicies","dispatchSecondaryActions","_ref4","secAction","generatedPayload","payloadGeneratorFn","firebolt_get","cachedData","action_behaviour_map_defineProperty","UnitBrushBehaviour","dragStart","brush_get","behaviours_brush_getPrototypeOf","getGridLayerDefinitions","axisType","getDefaultVisibilty","getLayerDefinition","_definition","_axes","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","dimensionSubTypes","getValidSubtype","attachDataToGridLineLayers","_gridLines","_gridBands","gridLayerData","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_toConsumableArray","src_listener_map_slicedToArray","fieldsVal","removeExitLayers","layersMap","markSet","queuedLayerDefs","_queuedLayerDefs","layerDefArr","listener_map_toConsumableArray","timeDiffsByField","minimumConsecutiveDifference","_ref8","_timeDiffsByField","originalData","_prepareSelectionSetD","prepareSelectionSetData","_prepareSelectionSetM","createSelectionSet","attachPropagationListener","_ref9","createGridLineLayer","vuConf","atomicDef","_ref11","_ref12","_ref15","_ref16","layerAxisIndexVal","_layerAxisIndex","axesVal","_dimensionMeasureMap","src_props_defineProperty","_PROPS","facets","facetKeys","trackerClassName","arcLayerClassName","sideEffectClassName","local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$TRA","local_options_toConsumableArray","oldData","PseudoSelectBehaviour","unitNs","VisualUnit","visual_unit_classCallCheck","lifeCycleManager","_gridLinesSelection","_gridBandsSelection","createFireboltInstance","_Object$assign","interactions","fireboltDeps","Cls","getFireboltCls","visual_unit_defineProperty","getActionBehaviourMap","getBehaviourEffectMap","_firebolt","createRootContainers","_rootSvg","_sideEffectGroup","initSideEffects","class","renderGridLineLayers","gridLineParentGroup","_entry","grid_lines_slicedToArray","parentGroupClass","rootSvg","_this$parentContainer","parentContainerInf","layerDefinition","layerDefinitions","components","layerIndex","layersArr","_layersArr","markId","defArr","instanceValues","visual_unit_toConsumableArray","layerdeps","_this$_dependencies","parentModel","REACTIVE_PROPS","pointInf","getMarkInfFromLayers","visual_unit_objectSpread","markInf","parsedIdentifiers","_this$fields","xdom","ydom","localNs","dataDomain","visual_unit_slicedToArray","dispatchQueuedSideEffects","clearActionHistory","visual_unit_construct","Variable","ComposedVars","composed_vars_classCallCheck","composed_vars_possibleConstructorReturn","composed_vars_getPrototypeOf","vars","_vars","member","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","simple_var_getPrototypeOf","oneVar","_oneVar","dtFormat","dateFormat","fieldDef","varInst","convertToVar","datamodel","transformFields","field_sanitizer_slicedToArray","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","BORDER_WIDTH","facet","handleBlankCell","externalClassname","sanitiseHeaderMatrix","matrices","sanitiseFacetValues","blankCell","normal","latestSource","lastSource","initStore","group_utils_defineProperty","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","getAxisKey","getCellKey","columnId","extractUnitConfig","unitConfig","hasOneField","getHeaderText","headerCreator","fieldHeaders","TextCell","sanitizeCheck","isBorderPresent","findInGroup","variable","channel","group_utils_this","facetType","projType","getAxisType","retriveDomainFromData","mutateAxesFromMap","cacheMaps","xAxes","yAxes","xAxisSet","yAxisSet","axisId","getEncoder","encoder","CartesianEncoder","layerConf","hasPolarEncodings","PolarEncoder","getHeaderAxisFrom","userAxisFromConfig","axisFrom","headerFrom","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","projections","getBorders","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","getFieldsFromSuppliedLayers","suppliedLayerConfig","encodingArr","group_utils_typeof","extractFields","facetsAndProjections","flattenArray","sortFacetFields","facetNames","sortInfo","sortConfig","facetSortConfig","getSchemaDef","removeExitCells","exitCells","qualifiedStateProps","placeholder","globalConfig","VisualEncoder","visual_encoder_classCallCheck","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","rowHeader","rowAxis","_getHeaderAxisFrom4","colHeader","colAxis","scaleMaps","getFieldNames","fieldVar","matrix_model_toConsumableArray","prepareHashMaps","rowKey","joinedRowKey","createJoinedKeys","keyArr","joinedKey","formatKeys","formatterList","formattedKeys","rKeys","rIdx","createColumnDataModels","colContext","sourceDM","rowFacets","colFacets","rowKeyArr","colKeyObj","newRowIndex","splitModelsHashMap","currentColumnIndex","colKeyArr","colKey","hashMapKey","splitByColumn","optionalProjections","facetInfo","projectionInfo","geomCellCreator","_indices$i","projectionIndexObject","columnIndex","matrix_model_objectSpread","getMatrixModel","currentRowIndex","prepareProjectionInfo","colProjections","rowProjections","rowProj","rIndex","newRIndex","colProj","cIndex","newCIndex","newRowProj","newColProj","rowFields","columnFields","prepareFacetInfo","rowFacetNames","colFacetNames","allFacets","_getSplitModelHashMap","getSplitModelHashMap","splitModels","rowKeyHashMap","colKeyHashMap","rowKeys","colKeys","splitContext","splitByRow","setDefaultConfigForFacet","_config$facetsUserCon","facetsUserConfig","border","_facetsUserConfig$isB","_facetsUserConfig$isG","isGridLinePresent","gridLinesShowLength","borderWidth","borderColor","borderStyle","borderConf","generalContext","rowKeyObj","createRowDataModels","rowContext","rowIndexForCurrentKey","_createColumnDataMode","_createColumnDataMode2","_createColumnDataMode3","_createColumnDataMode4","formattedColKeys","facetField","rawFormat","columnKeys","createValueCells","suppliedLayers","GeomCell","matrixLayers","horizontalAxis","verticalAxis","datamodelTransform","sortedFields","layerConfigArr","getLayerConfig","retinalConfig","axesCreators","normalizedColumns","normalizedRows","cell_creator_toConsumableArray","facetFields","geomCellKey","geomCell","updateCells","facetKey","extractAxisIndex","createAxisCells","currObj","axisInst","_axisInst$config","AxisCell","BlankCell","extractFacetIndex","headerPlaceholderGn","selectionObj","counter","selectionKeys","keySet","textCells","createTextCells","textCell","generatePlaceholders","encoders","valuesMatrix","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","rowsSecondary","rowSec","columnsPrimary","colPrime","columnsSecondary","colSec","_selectionObj","section","hContext","getAxisFields","fieldHolder","ac","transformDataModel","resolvedData","newFieldsConfig","aggregationFns","nearestAggFns","resolvedAggFns","sortDmTemporalFields","computeMatrices","resolverConfig","otherEncodings","isFacet","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","cellCreator","valueCellsCreator","valueMatrixInfo","_mutateAxesFromMap","createUnits","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","_map4","leftFacets","rightFacets","rowPriority","colPriority","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","sanitizeCheckBorder","sanitiseBorderMatrix","bottomBorderObj","sanitiseGeomMatrix","RESOLVER_PROPS","units","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_fireboltDeps","_placeholderInfo","matrix_resolver_toConsumableArray","getProjectionFields","_horizontalAxis","_verticalAxis","matrixType","matrix_resolver_defineProperty","_this5","_this$dependencies","autoGroupBy","_this$getAllFields","retContext","getRetinalFieldsDomain","getRetinalAxes","retinalEncoder","setCommonDomain","retinalAxes","updateVisualUnit","placeholders","bottomLeft","bottomRight","_this$dependencies2","showHeaders","_this$registry$cells","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","footers","topLeft","topRight","updateModel","dataTypeScaleMap","src_data_type_scale_map_defineProperty","data_type_scale_map_dataTypeScaleMap","getAdjustedDomain","y1ratio","y2ratio","allSameSign","generateAxisFromMap","axisKey","groupAxes","currentAxes","commonAxisKey","axisConfig","getAxisConfig","axisInfo","axisOrientation","rawUserAxisConfig","userAxisConfig","_rotationLock","createSimpleAxis","sanitizeIndividualLayerConfig","encodingConfigs","getDefaultMark","colFieldType","rowFieldType","createRetinalAxis","fieldProps","getIndex","arrIndex","getLayerConfFromFields","colFields","userLayerConfig","encoder_helper_toConsumableArray","xFields","yFields","colFieldExist","rowFieldExist","resolverAxes","axesArr","userConfig","getSortingConfig","currentFieldName","axesConfig","lastSortConfig","geomCellAxes","1","unitsArr","encodingDomains","axisTypeIndex","typeOfField","_resolver$axes","adjustedDomain","typeOfAxis","alignZeroLine","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","existIndex","axisFromIndex","cartesian_encoder_get","cartesian_encoder_getPrototypeOf","encodingObj","fieldInstance","layerArray","serializedLayers","colField","colFieldName","rowField","configs","rowFieldName","defConfigs","layerConfigs","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","axesCls","polar_encoder_defineProperty","_axesCls","pieAxes","varInstances","encType","domainProps","matrixInstance","unitDomains","setRadiusFactor","sizeFieldIndex","sizeMultiplier","getSizeMultiplier","sizeAxisDomain","encodingFields","sanitizedRows","sanitizedColumns","polar_encoder_get","polar_encoder_getPrototypeOf","sanitizedFields","typeIndex","polar_encoder_toConsumableArray","sanitizedConfig","angleField","angle0Field","RetinalEncoder","newAxes","visual_group_local_options","visual_group_local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","cellValue","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","getLogicalSpace","rowHeight","currentRowHeight","setMatrixInstances","_composition","updateChecker","option","hasValue","hasOneValue","createMatrices","groupConfig","matrixConfig","placeholderInfo","getMatrices","_originalGroupedData","_groupedDataModel","createRetinalAxes","setRetinalAxisDomain","cornerMatrices","createHeaders","metaData","unionUnitDomains","registerDomainChangeListener","visual_group_props_defineProperty","visual_group_props_PROPS","_prevData","groupType","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","visual_group_getPrototypeOf","componentSubRegistry","visual_group_assertThisInitialized","_selection","createMatrixResolver","initializeGlobalState","globalState","createUnitState","_VisualUnit$getState2","visual_group_helper_slicedToArray","localState","createLayerState","_BaseLayer$getState2","setupChangeListeners","stores","_context$registry","comp","storeInst","listenerInf","getSimpleAxes","_this$resolver$getAll","visual_group_defineProperty","sanitizedValue","shouldRender","localFields","initializeFields","unsubscribeChangeListeners","sanitizeRetinalConfig","retinalConf","confValue","createEncoderInstance","fieldSanitizer","setAxisAndHeaders","resolverFields","initializeResolverFields","hasMandatoryFields","info","getGroupByData","oriData","existingRemoveSet","select_toConsumableArray","firebolt_action_behaviour_map_defineProperty","action_behaviour_map_actionBehaviourMap","propagationBehaviourMap","_propagationBehaviour","firebolt_behaviour_effect_map_defineProperty","firebolt_behaviour_effect_map_behaviourEffectMap","propagationSideEffects","_propagationSideEffec","src_firebolt_helper_toConsumableArray","DEFAULTICONSIZE","SCALE_FUNCTIONS","HORIZONTAL","VALUE","POSITION_ALIGNMENT_MAP","constants_defineProperty","_POSITION_ALIGNMENT_M","OPPOSITE_POSITION","_OPPOSITE_POSITION","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_getPrototypeOf","legend_firebolt_inherits","legend_firebolt_createClass","getPropagationSelectionSet","behaviourName","canvasAlias","legend_firebolt_toConsumableArray","getFullData","highlightedSet","deselectedLegendItemsSet","includes","getCriteriaFromData","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","ALIGN","DEFAULT_MEASUREMENT","marginHorizontal","paddingRight","LEGEND_TITLE","_buffer","legend_defaults_defineProperty","bounds","upper","marker","tempConfig","STEP_DEFAULT_CONFIG","ICON_MAP","LEGEND_MARKER_PROPS","side_effects_selection_box_classCallCheck","side_effects_selection_box_possibleConstructorReturn","side_effects_selection_box_getPrototypeOf","gradientDimension","legendGradContainer","legendSelGroup","BUFFER","selBox","enterFn","selection_box_drag_defineProperty","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_highlighter_getPrototypeOf","SYMBOL_PADDING","LegendMarker","legend_marker_classCallCheck","legend_marker_possibleConstructorReturn","legend_marker_getPrototypeOf","_graphicElements","markerElement","legendmarkerTextContainer","legendmarkerText","rotateAngle","legendConfig","legendScale","pointerTextFormatter","lableConfig","labelText","_getRelativePosition","getRelativePosition","canvas","legendContainer","_canvasMount","_labelManager$getSmar","MARKER_BUFFER","legendmarkerGroup","textElement","createTextCell","labelManagerRef","maxLines","_minTickDiff","_cells","resetLogicalSpace","title","_title","getScaleInfo","scaleFn","getInterpolatedArrayData","domainForLegend","scaleParams","requiredWidth","requiredHeight","upperBound","maxTickDiff","alignment","smartLabelCalc","minimumTickSize","_smartLabelCalc$getOr","isInteger","getcomputedArray","computationhelper","requiredMeasure","availableMeasure","currentTickValue","nextTickValue","measureParam","pixelPerTick","getInterpolatedData","recomputeSteps","getTickMeasure","_scaleParams$measures","getItemMeasures","_labelManager","_labelManager$getOriS","calculateTitleWidth","titleWidth","maxItemSpaces","itemSpaces","localBuffer","cur","SimpleLegend","simple_legend_classCallCheck","_fieldName","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","_this$measurement","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","textOrientation","iconSpaces","maxIconWidth","labelSpace","itemSpace","iconSpace","newLabelWidth","titleSpaces","_this$measurement2","_this$config3","titleCreator","textAlign","titleContainer","marginPosition","_this$config4","_this$measurement3","widthBox","renderTitle","rawVal","simple_legend_defineProperty","idRangeMap","canvasRoot","legendOrientation","position_config_defineProperty","_legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","_context$config","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","transalate","defaultIcon","defaultIconSize","DiscreteLegend","_getScaleInfo","_field$schema","discrete_legend_toConsumableArray","ele","nextVal","discrete_legend_defineProperty","discrete_legend_get","discrete_legend_getPrototypeOf","renderDiscreteItem","_context$measurement2","_item$icon","text-align","marginVerticalBuffer","allSelections","getGradientDomain","accumulator","currentValue","MAX_VALUE","MIN_VALUE","legendGradSvg","legendGradCont","linearGradient","makeLinearGradient","legendRect","GradientLegend","gradient_legend_toConsumableArray","gradient_legend_defineProperty","getScaleFactor","newAxis","axisSpace","axisDomainLength","_legendGradientSvg","gradient_legend_get","gradient_legend_getPrototypeOf","renderGradient","_createLegendSkeleton","markerWithBuffer","StepLegend","domainLeg","isFraction","step_legend_toConsumableArray","numRight","step_legend_defineProperty","stepData","step_legend_get","step_legend_getPrototypeOf","renderStepItem","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","IS_POINT_MAP","true","false","LEGEND_TYPE_MAP","src_constants_defineProperty","_LEGEND_TYPE_MAP","HORIZONTAL_CENTER","VERTICAL_CENTER","share","operators_construct","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","canvasIterator","canvases","iteratorFn","cFn","visualGroup","_throwback","registerActions","fnName","_registrableComponents","setFireboltDependencies","actionModel","ActionModel","action_model_classCallCheck","registerPropagationBehaviourMap","dissociateBehaviour","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","*","propagationPayload","propagationCanvas","crossInteractionPolicy","TITLE_CONFIG","SUB_TITLE_CONFIG","MESSAGE_CONFIG","baseFontLimit","upperFontLimit","baseSizeLimit","upperSizeLimit","fractionImage","fractionChild","canvas_local_options_defineProperty","_localOptions","canvasOptions","_canvasOptions","local_options_slicedToArray","arg1","arg2","local_options_typeof","titleConfig","subtitle","subtitleConfig","sub","LayoutComponent","layoutComponent_classCallCheck","_boundBox","_renderAt","_alignWith","_alignment","_componentName","_className","DummyComponent","newDimensions","renderAt","component","componentName","pagination","scrollBar","thickness","speed","legend","minHeight","minCharacters","verticalAlign","collapse","invalidValues","EXCLUDE_CONFIG_KEYS","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_CLASS_NAME","NODE_PREFIX","DefinitionModel","definitionModel_classCallCheck","_host","host","_cut","cut","_ratioWeight","ratioWeight","_preferred","preferred","_lanes","lanes","_remainingHeight","_remainingWidth","remainingHeight","remainingWidth","getNodeId","_uid","yExtraSpace","smallestHeight","getCutType","smallestExtraHeightHorizontally","MAX_SAFE_INTEGER","containerHeight","hostHeight","xExtraSpace","smallestWidth","smallestExtraWidthVertically","containerWidth","hostWidth","createPlaceHolderComponent","placeComponent","definitionModel","leftOvercomponentRationWidth","isPreferred","isGridComponent","componentRatioWidth","leftHeight","leftWidth","_component$getLogical","componentHeight","componentWidth","firstLaneConfig","firstLane","secondLane","tree_classCallCheck","_parentCut","_this$_children","tree_toConsumableArray","parentCut","bound","nodeconfig","searchNode","childNode","nodeId","deleteSearchNode","LayoutModel","measurements","layout_model_classCallCheck","_measurements","_root","createTree","setBoundBox","addChildren","lane","allocateBoundingBox","totalWeight","carry","lastSibling","ratio","setHostSpatialConfig","setHostPosition","negotiateDimension","alteredDim","nonAlteredDim","cumultiveExtraSpaceAmt","childrenLength","extraSpaceAmt","computePosition","determineBoundBox","bb","_lastSibling$boundBox","_top","_left","_height","_width","_instance$parent$boun","setSpatialConfig","VIEW_INDEX","ROW_MATRIX_INDEX","2","COLUMN_MATRIX_INDEX","ROW_ROOT","COLUMN_ROOT","VERTICAL","Utils","utils_createClass","isDOMElement","getID","getElement","findContainer","coordinate","removeDiv","divId","DataPoint","data_point_classCallCheck","DataParser","data_parser_classCallCheck","data_parser_createClass","defaultDataPointLogic","nodepoints","getnodePoints","datapoint","HTMLDataAdapter","_DataParser","html_data_classCallCheck","html_data_possibleConstructorReturn","html_data_getPrototypeOf","html_data_inherits","html_data_createClass","getCoordinates","html_data_get","Renderer","renderer_classCallCheck","renderer_createClass","initRenderer","__logicalTree","HTMLRenderer","_Renderer","html_renderer_classCallCheck","html_renderer_possibleConstructorReturn","html_renderer_getPrototypeOf","_coordinates","html_renderer_inherits","html_renderer_createClass","createhtml","mainDiv","html_renderer_get","parentDiv","createAndCustomiseParent","hasHost","createAndPositionDiv","html_renderer_objectSpread","div","coordinates","findNode","nodeID","renderer","drawLayout","renderHTML","resolveAligment","componentData","alignWith","componentToAlign","componentMap","refNode","newNodeConfig","setAlignConfig","DrawingManager","drawing_manager_classCallCheck","_componentMap","_layoutClassName","layoutClassName","_renderer","drawing_manager_createClass","drawComponent","DefinitionManager","definition_manager_classCallCheck","_prioritySequence","_totalHeight","_totalWidth","_targetComponentMap","prepareTargetComponentMap","targetComponentMap","canvasComponent","tempDefModel","componentRef","getComponent","placeGridComponent","gridComponents","iscolumnPreffered","_placeComponent","rowpreffred","LayoutDef","layout_def_classCallCheck","_layoutDefinition","layout_def_createClass","addComponent","layoutDefinition","addMultipleComponent","componentArray","sanitizedDefinition","hostObj","hostID","childHost","resetComponentMap","LayoutManager","layout_manager_classCallCheck","_dimension","_skeletonType","skeletonType","_layoutDef","_drawingManager","_rootNodeID","con","resetNode","updateNode","compute","_layout","calLayOutDef","_context$dimension","layoutDef","prioritySequence","generateConfigModel","negotiate","broadcast","layoutComponents","componentArr","compo","elementName","removeElement","elemID","co","deleteElement","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","nameSpaceProps","equalityChecker","dispatchProps","sanitizedData","getMandatoryFields","_cachedProps","notifyAnimationEnd","viewInfo","layout","centerMatrix","viewMatricesInfo","promises","cellArr","lifeCycle","animDonePromises","applyPropagationPolicy","changeBehaviourStateOnPropagation","isMeasure","applyInteractionPolicy","splom","isSplom","interactionPolicy","_interactionPolicy","_crossInteractionPolicy","unitFireBolt","canvas_helper_defineProperty","canvas_helper_objectSpread","createLayoutManager","src_options","minUnitWidth","minUnitHeight","options_slicedToArray","_auxConfig$reset","oldConf","facetDefaultConfig","fixFacetConfig","excludeKeys","emptyValueKeyObject","fixScrollBarConfig","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_DEFAULT_CONFIGURATIO","_FieldNames$BORDER","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","rowData","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","minSecondMeasure","createMatrixEachLevel","_arr$i","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_layoutMatrix","_tree","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistributeSpaces","childDepth","createMatrixInstances","matrixInfo","breakPointer","_breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","RowVisualMatrix","row_matrix_classCallCheck","row_matrix_possibleConstructorReturn","row_matrix_getPrototypeOf","maxHeights","maxWidths","matrixInst","cellDimOptions","matrixIndex","_this2$getCellDimensi","getCellDimensions","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","remainingAvailWidth","cWidths","conditions","maxPrioritySpace","availableWidth","currentWidth","prioritySpace","logicalWidths","getPriorityDistribution","mWidth","mHeight","redistributeViewSpaces","computeViewableSpaces","rHeights","gutter","spaceTakenByColumn","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","colHeight","colWidth","heights","ColumnVisualMatrix","column_matrix_classCallCheck","column_matrix_possibleConstructorReturn","column_matrix_getPrototypeOf","heightDist","divider","condition","spaceTakenByRow","getDistributedWidth","layoutConfig","distWidth","rowLen","oldLogicalSpace","heightDistribution","getMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","paginationDetailsMap","scrollType","paginationMeasureGetter","relatedMaxMeasure","getMatrixMeasureForPagination","measureDetails","actualMeasure","scrollInfo","getMatrixHeightDetails","columnMatrixWidth","_getHeightRequiredByC","getHeightRequiredByColMatrix","maxColumnMatrixHeight","columnViewSpace","getViewableSpaces","columnPointer","columnMatrixHeight","maxHeightAvailableForRowMatrix","rowMatrixHeight","bufferCondition","isScroll","getActualBufferFromConfig","computations_slicedToArray","getBufferFromCondition","currentBufferType","horizontalBuffer","verticalBuffer","computeLayoutMeasurements","_getMatrixWidthDetail","getMatrixWidthDetails","_layout$config3","rowMatrixWidth","maxRowMatrixWidth","maxWidthAvailableForColumnMatrix","_getMatrixHeightDetai","_getActualBufferFromC","rowViewableSpaces","columnViewableSpaces","setValueMatrixMeasurements","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnHeightsPrimary","columnHeightsSecondary","measureSum","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","layout_getPrototypeOf","_layoutId","_scrollInfo","generateVisualMatrices","begColCells","endColCells","gutterSpace","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","RowMatrix","ColumnMatrix","layout_get","_computeLayoutMeasure","setViewInformation","pageNumber","pageType","totalPages","layout_defineProperty","renderGrid","currentPage","_viewInfo","maxRowHeight","maxColWidth","rowPointer","getViewMatrices","rowMatrices","getViewableMatrices","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$config","rowSpaces","colSpaces","rightWidth","topHeight","bottomHeight","centerHeight","centerWidth","viewWidth","viewHeight","actualCenterMeasures","totalMeasures","unitHeights","unitWidths","specificBorderApplier","borderTypes","showBorders","borderInfo","borderType","applySpecificBorder","applyBorders","borderApplierFn","borderApplier","border_helper_defineProperty","borderMapVal","borderMap","orderMaker","nestByStack","updateArr","optionalParams","currStack","prevStack","arrVal","stackVal","currElemIndex","newElem","arrElem","returnArr","spanCalculator","isNull","maskCreator","_nestByStack","viewMatrix","hierarchy","_nestByStack2","spanGenerator","spans","ridx","currSpan","getOrder","matrixSpanGeneratorMap","span_maker_defineProperty","_matrixSpanGeneratorM","orderGetter","viewMatrixMaker","spanMaker","matrixSpanGenerator","spanApplier","cellCounter","spaceAllocationDueToSpan","primaryUnitWidth","cumulativeWidth","spanApplierMap","_spanApplierMap","TransactionSupport","INTERFACE_IMPl","LAYER_DEF","DETAIL_FIELDS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_DEFAULT_CONFIG","_CONSTANTS$MARGIN","CONSTANTS","_CONSTANTS$PADDING","_CONSTANTS$HEADER_PAD","_CONSTANTS$TITLE_PADD","DEFAULT_PROPS","minSpacing","visual_cell_src_props_defineProperty","visual_cell_src_props_PROPS","caption","smartText","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","axis_cell_getPrototypeOf","_availHeight","_availWidth","axis_cell_assertThisInitialized","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","actualWidth","actualHeight","_axis$config2","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","blank_cell_getPrototypeOf","blank_cell_assertThisInitialized","setSmartText","_context$minSpacing","minHeightSpace","minWidthSpace","paddedHeight","paddedWidth","isTitleSubtitle","subType","returnVal","computeTextSpace","_context$minSpacing2","minText","_minTextSpace","smartSpace","smHeight","smWidth","headerPadding","text_cell_classCallCheck","text_cell_possibleConstructorReturn","text_cell_getPrototypeOf","text_cell_assertThisInitialized","titlePadding","vAlign","_this$smartText","translation","middle","setPadding","localPadding","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","geom_cell_getPrototypeOf","_unit","_datamodel","_facetByFields","_transform","_caption","geom_cell_assertThisInitialized","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","resolveTitleSubTitleContent","rawContent","createHeading","prevCell","cellType","legendInitializer","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","interactionRegistry","dataInfo","legendMeasures","titleText","legendIconShapeMapper","layerMarks","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","setParentInfo","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","_this$params$componen","updateWrapper","_this$params$componen2","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","_config$dimensions","childHeight","message","imageNode","messageNode","formatFontSize","_params$config","headerCell","configType","headerAlignmentMap","component_wrapper_maker_defineProperty","_headerAlignmentMap","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","wrapperParams","component_wrapper_maker_objectSpread","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","_i","_headerValues","defaultDimensions","canvasHeight","canvasWidth","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","addFacetDataAndMeasureNames","facetData","facetVals","firebolt_helper_defineProperty","hasMeasureNameField","dataWithFacets","canvas_firebolt_helper_toConsumableArray","measureNameArr","isDimension","isCrosstab","dispatchBehaviours","addSelectedMeasuresInPayload","groupFields","_unit$fields","propagationDataSource","getPropagationSource","attachBehaviours","crosstab","tooltipSideEffect","defaultCrossInteractionPolicy","propagationCanvasAlias","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","defaultInteractionPolicy","group_firebolt_assertThisInitialized","handleDataModelPropagation","_this$context$config$","_ref$instance","findPlaceHolderById","handlePhysicalAction","resetSelectAction","groupDataMap","linkedRows","idValue","linkedRow","group_firebolt_toConsumableArray","group_firebolt_get","auxConfig","propagateValues","sourceCanvasId","sideEfffects","propagationBehaviour","sourceBehaviour","propagationConf","propConf","behaviourInstance","_propagationInf$unit","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setComponentInfo","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","default_registry_defineProperty","_COMPONENTS","SUBREGISTRIES","utils","Smartlabel","globalCache","defaultRegistry","globalRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","Components","VisualLayer","unitHelpers","unitEnums","Encoders","encoderHelpers","groupUtils","groupEnums","SideEffects","standards","Behaviours","pkg","operators"],"mappings":"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","file":"muze.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"muze\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"muze\"] = factory();\n\telse\n\t\troot[\"muze\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n BINNED: 'binned',\n ID: '__id'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name, idField) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n idField,\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n }\n};\n\nexport default fieldStore;\n","import { getNumberFormattedVal } from './helper';\n\n/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (value, rawValue, field) {\n const formattedValue = getNumberFormattedVal(field, value);\n\n Object.defineProperties(this, {\n _value: {\n enumerable: false,\n configurable: false,\n writable: false,\n value\n },\n _formattedValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: formattedValue\n },\n _internalValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: rawValue\n }\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Returns the parsed value of field\n */\n get formattedValue () {\n return this._formattedValue;\n }\n\n /**\n * Returns the internal value of field\n */\n get internalValue () {\n return this._internalValue;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[i],\n formattedValue: field.formattedData()[i],\n };\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[ii],\n formattedValue: field.formattedData()[ii],\n };\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray } from '../utils';\n\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType) {\n let retFunc;\n\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'asc') {\n retFunc = (a, b) => a - b;\n } else {\n retFunc = (a, b) => b - a;\n }\n break;\n default:\n if (sortType === 'asc') {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? 1 : -1;\n };\n } else {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? -1 : 1;\n };\n }\n }\n\n return retFunc;\n}\n\n/**\n * Resolves the actual sorting function based on sorting string value.\n *\n * @param {Object} fDetails - The target field info.\n * @param {string} strSortOrder - The sort order value.\n * @return {Function} Returns the sorting function.\n */\nfunction resolveStrSortOrder (fDetails, strSortOrder) {\n const sortOrder = String(strSortOrder).toLowerCase() === 'desc' ? 'desc' : 'asc';\n return getSortFn(fDetails.type, sortOrder);\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData (data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg (groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data by applying the standard sorting mechanism.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction applyStandardSort (data, schema, sortingDetails) {\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n const sortFn = resolveStrSortOrder(fDetails, sortMeta);\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortFn(a[fDetails.index], b[fDetails.index]));\n }\n }\n}\n\n/**\n * Creates a map based on grouping.\n *\n * @param {Array} depColumns - The dependency columns' info.\n * @param {Array} data - The input data.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - The sorting details for standard sorting.\n * @return {Map} Returns a map.\n */\nconst makeGroupMapAndSort = (depColumns, data, schema, sortingDetails) => {\n if (depColumns.length === 0) { return data; }\n\n const targetCol = depColumns[0];\n const map = new Map();\n\n data.reduce((acc, currRow) => {\n const fVal = currRow[targetCol.index];\n if (acc.has(fVal)) {\n acc.get(fVal).push(currRow);\n } else {\n acc.set(fVal, [currRow]);\n }\n return acc;\n }, map);\n\n for (let [key, val] of map) {\n const nMap = makeGroupMapAndSort(depColumns.slice(1), val, schema, sortingDetails);\n map.set(key, nMap);\n if (Array.isArray(nMap)) {\n applyStandardSort(nMap, schema, sortingDetails);\n }\n }\n\n return map;\n};\n\n/**\n * Sorts the data by retaining the position/order of a particular field.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n * @param {Array} depColumns - The dependency column list.\n * @return {Array} Returns the sorted data.\n */\nfunction applyGroupSort (data, schema, sortingDetails, depColumns) {\n sortingDetails = sortingDetails.filter((detail) => {\n if (detail[1] === null) {\n depColumns.push(detail[0]);\n return false;\n }\n return true;\n });\n if (sortingDetails.length === 0) { return data; }\n\n depColumns = depColumns.map(c => fieldInSchema(schema, c));\n\n const sortedGroupMap = makeGroupMapAndSort(depColumns, data, schema, sortingDetails);\n return data.map((row) => {\n let i = 0;\n let nextMap = sortedGroupMap;\n\n while (!Array.isArray(nextMap)) {\n nextMap = nextMap.get(row[depColumns[i++].index]);\n }\n\n return nextMap.shift();\n });\n}\n\n/**\n * Sorts the data.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nexport function sortData (dataObj, sortingDetails) {\n let { schema, data } = dataObj;\n\n sortingDetails = sortingDetails.filter(sDetial => !!fieldInSchema(schema, sDetial[0]));\n if (sortingDetails.length === 0) { return; }\n\n let groupSortingIdx = sortingDetails.findIndex(sDetial => sDetial[1] === null);\n groupSortingIdx = groupSortingIdx !== -1 ? groupSortingIdx : sortingDetails.length;\n\n const standardSortingDetails = sortingDetails.slice(0, groupSortingIdx);\n const groupSortingDetails = sortingDetails.slice(groupSortingIdx);\n\n applyStandardSort(data, schema, standardSortingDetails);\n data = applyGroupSort(data, schema, groupSortingDetails, standardSortingDetails.map(detail => detail[0]));\n\n dataObj.uids = data.map(row => row.pop());\n dataObj.data = data;\n}\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport { sortData } from './sort';\nimport { FieldType, DimensionSubtype } from '../enums';\nimport { ROW_ID } from '../constants';\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder ({ fields: fieldStore, idField }, rowDiffset, colIdentifier, sortingDetails, options) {\n const idData = idField.data();\n\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n const name = fieldStore[i].name();\n if (name === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: ROW_ID,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.ID\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = idData[i];\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(idData[i]);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(idData[i]); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].internalValue ===\n dm2Fields[fieldName].internalValue && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum, { format: this.schema.format }));\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport PartialField from '../partial-field';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n static parser() {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n\n static get BUILDER() {\n const builder = {\n _params: {},\n _context: this,\n fieldName(name) {\n this._params.name = name;\n return this;\n },\n schema(schema) {\n this._params.schema = schema;\n return this;\n },\n data(data) {\n this._params.data = data;\n return this;\n },\n partialField(partialField) {\n this._params.partialField = partialField;\n return this;\n },\n rowDiffset(rowDiffset) {\n this._params.rowDiffset = rowDiffset;\n return this;\n },\n build() {\n let partialField = null;\n if (this._params.partialField instanceof PartialField) {\n partialField = this._params.partialField;\n } else if (this._params.schema && this._params.data) {\n partialField = new PartialField(this._params.name,\n this._params.data,\n this._params.schema,\n this._context.parser());\n }\n else {\n throw new Error('Invalid Field parameters');\n }\n return new this._context(partialField, this._params.rowDiffset);\n }\n };\n return builder;\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\nimport CategoricalParser from '../parsers/categorical-parser';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n\n static parser() {\n return new CategoricalParser();\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val, { format }) {\n let result;\n // check if invalid date value\n if (!this._dtf) {\n this._dtf = new DateTimeFormatter(format);\n }\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { rowDiffsetIterator } from '../operator/row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nexport const calculateContinuousDomain = (data, rowDiffset) => {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n};\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\nimport TemporalParser from '../parsers/temporal-parser';\nimport { calculateContinuousDomain } from '../helper';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n return calculateContinuousDomain(this.partialField.data, this.rowDiffset);\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data\n * If data is of type invalid or has missing format use the raw value\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n const dataFormat = this.format();\n\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n // If value is of invalid type or format is missing\n if (InvalidAwareTypes.isInvalid(datum) || (!dataFormat && Number.isFinite(datum))) {\n // Use the invalid map value or the raw value\n const parsedDatum = InvalidAwareTypes.getInvalidType(datum) || datum;\n data.push(parsedDatum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, dataFormat));\n }\n });\n return data;\n }\n\n static parser() {\n return new TemporalParser();\n }\n}\n\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import Dimension from '../dimension';\nimport BinnedParser from '../parsers/binned-parser';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n\n static parser() {\n return new BinnedParser();\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport ContinuousParser from '../parsers/continuous-parser';\nimport { calculateContinuousDomain } from '../helper';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n return calculateContinuousDomain(this.partialField.data, this.rowDiffset);\n }\n\n static parser() {\n return new ContinuousParser();\n }\n}\n","import { FieldParser } from '..';\n/**\n * Wrapper around row identifier value. Row id value contains the unique id of each row which\n * remains same across all datamodels of same source.\n */\nexport class IdValue {\n constructor (val) {\n const valArr = val instanceof Array ? val.map(Number) : [Number(val)];\n this._val = new Set(valArr);\n this._hash = valArr[0];\n this._valArr = valArr;\n return this;\n }\n\n toString () {\n return this._hash;\n }\n\n values () {\n return this._valArr;\n }\n}\n\n/**\n * A FieldParser which parses the id values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class IdParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the instance of id value.\n */\n parse (val) {\n const result = val instanceof IdValue ? new IdValue(val.values()) : new IdValue(val);\n return result;\n }\n}\n","import { DimensionSubtype } from '../../enums';\nimport IdParser from '../parsers/id-parser';\nimport Categorical from '../categorical';\n\n/**\n * Represents id field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class ID extends Categorical {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.ID;\n }\n\n static parser () {\n return new IdParser();\n }\n}\n","import Categorical from './categorical';\nimport Temporal from './temporal';\nimport Binned from './binned';\nimport Continuous from './continuous';\nimport { DimensionSubtype, MeasureSubtype } from '../enums';\nimport ID from './id';\n\n\nclass FieldTypeRegistry {\n constructor() {\n this._fieldType = new Map();\n }\n\n registerFieldType(subtype, dimension) {\n this._fieldType.set(subtype, dimension);\n return this;\n }\n\n has(type) {\n return this._fieldType.has(type);\n }\n\n get(type) {\n return this._fieldType.get(type);\n }\n}\n\nconst registerDefaultFields = (store) => {\n store\n .registerFieldType(DimensionSubtype.CATEGORICAL, Categorical)\n .registerFieldType(DimensionSubtype.ID, ID)\n .registerFieldType(DimensionSubtype.TEMPORAL, Temporal)\n .registerFieldType(DimensionSubtype.BINNED, Binned)\n .registerFieldType(MeasureSubtype.CONTINUOUS, Continuous);\n};\n\nconst fieldRegistry = (function () {\n let store = null;\n function getStore () {\n store = new FieldTypeRegistry();\n registerDefaultFields(store);\n return store;\n }\n return store || getStore();\n}());\n\nexport default fieldRegistry;\n\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport { fieldRegistry } from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n\n if (fieldRegistry.has(schema.subtype)) {\n return fieldRegistry.get(schema.subtype)\n .BUILDER\n .fieldName(schema.name)\n .schema(schema)\n .data(data)\n .rowDiffset(`0-${data.length - 1}`)\n .build();\n }\n return fieldRegistry\n .get(schema.type === FieldType.MEASURE ? MeasureSubtype.CONTINUOUS : DimensionSubtype.CATEGORICAL)\n .BUILDER\n .fieldName(schema.name)\n .schema(schema)\n .data(data)\n .rowDiffset(`0-${data.length - 1}`)\n .build();\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n if (fieldRegistry.has(schema.subtype)) {\n return fieldRegistry.get(schema.subtype)\n .BUILDER\n .partialField(partialField)\n .rowDiffset(rowDiffset)\n .build();\n }\n return fieldRegistry\n .get(schema.type === FieldType.MEASURE ? MeasureSubtype.CONTINUOUS : DimensionSubtype.CATEGORICAL)\n .BUILDER\n .partialField(partialField)\n .rowDiffset(rowDiffset)\n .build();\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","/**\n * Interface for all data converters\n */\nexport default class DataConverter {\n constructor(type) {\n this._type = type;\n }\n\n get type() {\n return this._type;\n }\n\n convert() {\n throw new Error('Convert method not implemented.');\n }\n\n}\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import { columnMajor } from '../../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr(arr, schema, options) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n const defaultOption = {\n firstRowHeader: true,\n };\n const schemaFields = schema.map(unitSchema => unitSchema.name);\n options = Object.assign({}, defaultOption, options);\n\n const columns = [];\n const push = columnMajor(columns);\n\n let headers = schemaFields;\n if (options.firstRowHeader) {\n // If header present then remove the first header row.\n // Do in-place mutation to save space.\n headers = arr.splice(0, 1)[0];\n }\n // create a map of the headers\n const headerMap = headers.reduce((acc, h, i) => (\n Object.assign(acc, { [h]: i })\n ), {});\n\n arr.forEach((fields) => {\n const field = [];\n schemaFields.forEach((schemaField) => {\n const headIndex = headerMap[schemaField];\n field.push(fields[headIndex]);\n });\n return push(...field);\n });\n return [schemaFields, columns];\n}\n\nexport default DSVArr;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, schema, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), schema, options);\n}\n\nexport default DSVStr;\n","import DataConverter from '../model/dataConverter';\nimport DSVStr from '../utils/dsv-str';\nimport DataFormat from '../../enums/data-format';\n\nexport default class DSVStringConverter extends DataConverter {\n constructor() {\n super(DataFormat.DSV_STR);\n }\n\n convert(data, schema, options) {\n return DSVStr(data, schema, options);\n }\n}\n","import { columnMajor } from '../../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr, schema) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n const schemaFieldsName = schema.map(unitSchema => unitSchema.name);\n\n arr.forEach((item) => {\n const fields = [];\n schemaFieldsName.forEach((unitSchema) => {\n if (unitSchema in header) {\n insertionIndex = header[unitSchema];\n } else {\n header[unitSchema] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[unitSchema];\n });\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import DataConverter from '../model/dataConverter';\nimport FlatJSON from '../utils/flat-json';\nimport DataFormat from '../../enums/data-format';\n\nexport default class JSONConverter extends DataConverter {\n constructor() {\n super(DataFormat.FLAT_JSON);\n }\n\n convert(data, schema, options) {\n return FlatJSON(data, schema, options);\n }\n}\n","import DataConverter from '../model/dataConverter';\nimport DSVArr from '../utils/dsv-arr';\nimport DataFormat from '../../enums/data-format';\n\nexport default class DSVArrayConverter extends DataConverter {\n constructor() {\n super(DataFormat.DSV_ARR);\n }\n\n convert(data, schema, options) {\n return DSVArr(data, schema, options);\n }\n}\n","import DataConverter from '../model/dataConverter';\nimport AUTO from '../utils/auto-resolver';\nimport DataFormat from '../../enums/data-format';\n\nexport default class AutoDataConverter extends DataConverter {\n constructor() {\n super(DataFormat.AUTO);\n }\n\n convert(data, schema, options) {\n return AUTO(data, schema, options);\n }\n}\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, schema, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, schema, options);\n}\n\nexport default Auto;\n","import DataConverter from './model/dataConverter';\nimport { DSVStringConverter, DSVArrayConverter, JSONConverter, AutoDataConverter } from './defaultConverters';\n\nclass DataConverterStore {\n constructor() {\n this.store = new Map();\n this.converters(this._getDefaultConverters());\n }\n\n _getDefaultConverters() {\n return [\n new DSVStringConverter(),\n new DSVArrayConverter(),\n new JSONConverter(),\n new AutoDataConverter()\n ];\n }\n\n /**\n * Sets the given converters in the store and returns the store\n * @param {Array} converters : contains array of converter instance\n * @return { Map }\n */\n converters(converters = []) {\n converters.forEach(converter => this.store.set(converter.type, converter));\n return this.store;\n }\n\n /**\n * Registers a Converter of type DataConverter\n * @param {DataConverter} converter : converter Instance\n * @returns self\n */\n register(converter) {\n if (converter instanceof DataConverter) {\n this.store.set(converter.type, converter);\n return this;\n }\n return null;\n }\n\n /**\n * Rempves a converter from store\n * @param {DataConverter} converter : converter Instance\n * @returns self\n */\n\n unregister(converter) {\n this.store.delete(converter.type);\n return this;\n }\n\n get(name) {\n if (this.store.has(name)) {\n return this.store.get(name);\n }\n return null;\n }\n\n}\n\nconst converterStore = (function () {\n let store = null;\n\n function getStore () {\n store = new DataConverterStore();\n return store;\n }\n return store || getStore();\n}());\n\nexport default converterStore;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS, ROW_ID } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport { converterStore } from './converter';\nimport { fieldRegistry } from './fields';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, formattedData, rawData, i) {\n const resp = {};\n\n for (const [key, field] of fields.entries()) {\n resp[field.name()] = new Value(formattedData[key][i], rawData[key][i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n\n for (const key in fields) {\n resp[key] = new Value(fields[key].formattedValue, fields[key].rawValue, key);\n }\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nconst selectModeMap = {\n [FilteringMode.NORMAL]: {\n diffIndex: ['rowDiffset'],\n calcDiff: [true, false]\n },\n [FilteringMode.INVERSE]: {\n diffIndex: ['rejectRowDiffset'],\n calcDiff: [false, true]\n },\n [FilteringMode.ALL]: {\n diffIndex: ['rowDiffset', 'rejectRowDiffset'],\n calcDiff: [true, true]\n }\n};\n\nconst generateRowDiffset = (rowDiffset, i, lastInsertedValue) => {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n const li = rowDiffset.length - 1;\n\n rowDiffset[li] = `${rowDiffset[li].split('-')[0]}-${i}`;\n } else {\n rowDiffset.push(`${i}`);\n }\n};\n\nexport const selectRowDiffsetIterator = (rowDiffset, checker, mode) => {\n let lastInsertedValueSel = -1;\n let lastInsertedValueRej = -1;\n const newRowDiffSet = [];\n const rejRowDiffSet = [];\n\n const [shouldSelect, shouldReject] = selectModeMap[mode].calcDiff;\n\n rowDiffsetIterator(rowDiffset, (i) => {\n const checkerResult = checker(i);\n checkerResult && shouldSelect && generateRowDiffset(newRowDiffSet, i, lastInsertedValueSel);\n !checkerResult && shouldReject && generateRowDiffset(rejRowDiffSet, i, lastInsertedValueRej);\n });\n return {\n rowDiffset: newRowDiffSet.join(','),\n rejectRowDiffset: rejRowDiffSet.join(',')\n };\n};\n\n\nexport const rowSplitDiffsetIterator = (rowDiffset, checker, mode, dimensionArr, fieldStoreObj) => {\n let lastInsertedValue = {};\n const splitRowDiffset = {};\n const dimensionMap = {};\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n let hash = '';\n\n let dimensionSet = { keys: {} };\n\n dimensionArr.forEach((_) => {\n const data = fieldStoreObj[_].partialField.data[i];\n hash = `${hash}-${data}`;\n dimensionSet.keys[_] = data;\n });\n\n if (splitRowDiffset[hash] === undefined) {\n splitRowDiffset[hash] = [];\n lastInsertedValue[hash] = -1;\n dimensionMap[hash] = dimensionSet;\n }\n\n generateRowDiffset(splitRowDiffset[hash], i, lastInsertedValue[hash]);\n lastInsertedValue[hash] = i;\n }\n });\n\n return {\n splitRowDiffset,\n dimensionMap\n };\n};\n\n\nexport const selectHelper = (clonedDm, selectFn, config, sourceDm, iterator) => {\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const { mode } = config;\n const rowDiffset = clonedDm._rowDiffset;\n const cachedValueObjects = clonedDm._partialFieldspace._cachedValueObjects;\n\n const selectorHelperFn = index => selectFn(\n cachedValueObjects[index],\n index,\n cloneProvider,\n cachedStore\n );\n\n return iterator(rowDiffset, selectorHelperFn, mode);\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nconst getKey = (arr, data, fn, rowId) => {\n let key = fn(arr, data, 0, rowId);\n\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${fn(arr, data, i, rowId)}`;\n }\n return key;\n};\n\nconst keyFn = (arr, fields, idx, rowId) => {\n const field = arr[idx];\n const val = field === ROW_ID ? rowId : fields[field].internalValue;\n return val;\n};\n\nconst domainChecker = (val, domain) => {\n const domainArr = domain[0] instanceof Array ? domain : [domain];\n return domainArr.some(dom => val >= dom[0] && val <= dom[1]);\n};\n\nconst boundsChecker = {\n [MeasureSubtype.CONTINUOUS]: domainChecker,\n [DimensionSubtype.TEMPORAL]: domainChecker\n};\n\nconst isWithinDomain = (value, domain, fieldType) => boundsChecker[fieldType](value, domain);\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n let fns = [];\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const { filterByDim = true, filterByMeasure = false, clone = true } = config;\n const clonedModel = clone ? cloneWithAllFields(model) : model;\n const modelFieldsConfig = clonedModel.getFieldsConfig();\n const uids = model.getPartialFieldspace().idField.data();\n\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => (({ criteria = {} }) => {\n const { identifiers = [[], []], range } = criteria;\n let [fieldNames = [], values = []] = identifiers;\n const indices = fieldNames.reduce((map, name, i) => {\n map[name] = i;\n return map;\n }, {});\n fieldNames = fieldNames.filter(field => (field in modelFieldsConfig &&\n modelFieldsConfig[field].def.type === FieldType.DIMENSION) || field === ROW_ID);\n const dLen = fieldNames.length;\n const valuesMap = {};\n\n if (dLen) {\n for (let i = 1, len = identifiers.length; i < len; i++) {\n const row = identifiers[i];\n let key;\n if (ROW_ID in indices) {\n const ids = row[indices[ROW_ID]];\n if (ids) {\n ids.values().forEach((id) => {\n key = `${fieldNames.map((field) => {\n const idx = indices[field];\n return field === ROW_ID ? id : row[idx];\n })}`;\n valuesMap[key] = 1;\n });\n }\n } else {\n key = `${fieldNames.map((field) => {\n const idx = indices[field];\n return row[idx];\n })}`;\n valuesMap[key] = 1;\n }\n }\n }\n let rangeKeys = Object.keys(range || {}).filter(field => field in modelFieldsConfig);\n const hasData = values.length || rangeKeys.length;\n\n if (!filterByMeasure) {\n rangeKeys = rangeKeys.filter(field => modelFieldsConfig[field].def.type !== FieldType.MEASURE);\n }\n\n if (!filterByDim) {\n rangeKeys = rangeKeys.filter(field => modelFieldsConfig[field].def.type !== FieldType.DIMENSION);\n }\n\n return hasData ? (fields, i) => {\n let present = true;\n if (filterByDim) {\n present = dLen ? valuesMap[getKey(fieldNames, fields, keyFn, uids[i])] : true;\n }\n\n return rangeKeys.every((field) => {\n const val = fields[field].internalValue;\n return isWithinDomain(val, range[field], modelFieldsConfig[field].def.subtype);\n }) && present;\n } : () => false;\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = clonedModel.select((fields, i) => fns.every(fn => fn(fields, i)), {\n saveChild: false\n });\n } else {\n filteredModel = clonedModel.select((fields, i) => fns.some(fn => fn(fields, i)), {\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\n\nexport const splitWithSelect = (sourceDm, dimensionArr, reducerFn = val => val, config) => {\n const {\n saveChild,\n } = config;\n const fieldStoreObj = sourceDm.getFieldspace().fieldsObj();\n\n const {\n splitRowDiffset,\n dimensionMap\n } = selectHelper(\n sourceDm.clone(saveChild),\n reducerFn,\n config,\n sourceDm,\n (...params) => rowSplitDiffsetIterator(...params, dimensionArr, fieldStoreObj)\n );\n\n const clonedDMs = [];\n Object.keys(splitRowDiffset).sort().forEach((e) => {\n if (splitRowDiffset[e]) {\n const cloned = sourceDm.clone(saveChild);\n const derivation = dimensionMap[e];\n cloned._rowDiffset = splitRowDiffset[e].join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n const derivationFormula = fields => dimensionArr.every(_ => fields[_].internalValue === derivation.keys[_]);\n // Store reference to child model and selector function\n if (saveChild) {\n persistDerivations(sourceDm, cloned, DM_DERIVATIVES.SELECT, config, derivationFormula);\n }\n cloned._derivation[cloned._derivation.length - 1].meta = dimensionMap[e];\n\n clonedDMs.push(cloned);\n }\n });\n\n\n return clonedDMs;\n};\nexport const addDiffsetToClonedDm = (clonedDm, rowDiffset, sourceDm, selectConfig, selectFn) => {\n clonedDm._rowDiffset = rowDiffset;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n persistDerivations(\n sourceDm,\n clonedDm,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n};\n\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n let extraCloneDm = {};\n\n let { mode } = selectConfig;\n\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const setOfRowDiffsets = selectHelper(\n cloned,\n selectFn,\n selectConfig,\n sourceDm,\n selectRowDiffsetIterator\n );\n const diffIndex = selectModeMap[mode].diffIndex;\n\n addDiffsetToClonedDm(cloned, setOfRowDiffsets[diffIndex[0]], sourceDm, selectConfig, selectFn);\n\n if (diffIndex.length > 1) {\n extraCloneDm = sourceDm.clone(cloneConfig.saveChild);\n addDiffsetToClonedDm(extraCloneDm, setOfRowDiffsets[diffIndex[1]], sourceDm, selectConfig, selectFn);\n return [cloned, extraCloneDm];\n }\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\n\nexport const splitWithProject = (sourceDm, projFieldSet, config, allFields) =>\n projFieldSet.map(projFields =>\n cloneWithProject(sourceDm, projFields, config, allFields));\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const { type, subtype, name } = unitSchema;\n if (type === FieldType.DIMENSION || type === FieldType.MEASURE) {\n if (!fieldRegistry.has(subtype)) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n } else {\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converter = converterStore.get(options.dataFormat);\n\n\n if (!converter) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n let [header, formattedData] = converter.convert(data, schema, options);\n resolveFieldName(schema, header);\n\n const idIndex = schema.findIndex(field => field.subtype === DimensionSubtype.ID);\n let idData;\n\n if (idIndex !== -1) {\n idData = formattedData[idIndex] || [];\n formattedData = formattedData.filter((d, i) => i !== idIndex);\n header = header.filter((d, i) => i !== idIndex);\n schema = schema.filter(field => field.subtype !== DimensionSubtype.ID);\n } else {\n const rowLength = (formattedData[0] && formattedData[0].length) || 0;\n idData = new Array(rowLength).fill().map((d, i) => i);\n }\n\n const fieldArr = createFields(formattedData, schema, header);\n\n const idField = createFields([idData], [{\n name: ROW_ID,\n type: 'dimension',\n subtype: DimensionSubtype.ID\n }], [ROW_ID])[0];\n\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name, idField);\n relation._partialFieldspace = nameSpace;\n\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n\n // This stores the value objects which is passed to the filter method when selection operation is done.\n const valueObjects = [];\n const { fields } = nameSpace;\n const rawFieldsData = fields.map(field => field.data());\n const formattedFieldsData = fields.map(field => field.formattedData());\n const idFieldData = idField.data();\n rowDiffsetIterator(relation._rowDiffset, (i) => {\n valueObjects[i] = prepareSelectionData(fields, formattedFieldsData, rawFieldsData, i);\n valueObjects[i][ROW_ID] = new Value(idFieldData[i], idFieldData[i], idField);\n });\n nameSpace._cachedValueObjects = valueObjects;\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n name: field,\n type: schema[i].subtype || schema[i].type,\n index: i,\n };\n }\n }\n return null;\n};\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.SORT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel;\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return selectionModel;\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const excludeModels = propModelInf.excludeModels || [];\n const criterias = propModelInf.criteria;\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n const matchingCriteria = criterias.filter(val => val.groupedModel === child);\n let selectionModel = applyExistingOperationOnModel(propModel, child);\n\n if (matchingCriteria.length) {\n selectionModel = filterPropagationModel(selectionModel, matchingCriteria, {\n filterByDim: false,\n filterByMeasure: true,\n clone: false\n });\n }\n propagateIdentifiers(child, selectionModel, config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n const addGroupedModel = ({ config: conf, model }) => {\n const { criteria: crit } = conf;\n let groupedModel;\n\n if (crit !== null && crit.fields.some(d => d.type === FieldType.MEASURE)) {\n groupedModel = getRootGroupByModel(model);\n }\n return Object.assign({}, conf, {\n groupedModel\n });\n };\n\n let criterias = [];\n\n if (identifiers === null) {\n criterias = [{\n criteria: []\n }];\n criteria = [];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(addGroupedModel);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria.map(addGroupedModel), {\n criteria: identifiers,\n groupedModel: identifiers !== null && identifiers.fields.some(d => d.type === FieldType.MEASURE) ?\n getRootGroupByModel(propagationInf.propagationSource) : null\n }]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n criterias.forEach((inf) => {\n const { criteria: crit } = inf;\n const propagationModel = filterPropagationModel(rootModel, crit, {\n filterByMeasure: !!crit.find(d => d.groupedModel === rootModel)\n });\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n criteria: crit\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModel, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, {\n model: rootModel,\n groupByModel: getRootGroupByModel(actionInf.model)\n }, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId,\n propagationSource: actionInf.model\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n\n\nexport const getNormalizedProFields = (projField, allFields, fieldConfig) => {\n const normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n return Array.from(new Set(normalizedProjField)).map(field => field.trim());\n};\n\n/**\n * Get the numberFormatted value if numberFormat present,\n * else returns the supplied value.\n * @param {Object} field Field Instance\n * @param {Number|String} value\n * @return {Number|String}\n */\nexport const getNumberFormattedVal = (field, value) => {\n if (field.numberFormat) {\n return field.numberFormat()(value);\n }\n return value;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport {\n updateFields,\n cloneWithSelect,\n cloneWithProject,\n updateData,\n getNormalizedProFields\n} from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n config.mode = config.mode || defConfig.mode;\n\n const cloneConfig = { saveChild: config.saveChild };\n return cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n const normalizedProjField = getNormalizedProFields(projField, allFields, fieldConfig);\n\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat, FilteringMode } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema,\n splitWithSelect,\n splitWithProject,\n getNormalizedProFields\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport Value from './value';\nimport { converterStore } from './converter';\nimport { fieldRegistry } from './fields';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Converters are functions that transforms data in various format tpo datamodel consumabe format.\n */\n static get Converters() {\n return converterStore;\n }\n\n /**\n * Register new type of fields\n */\n static get FieldTypes() {\n return fieldRegistry;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const { idField, fields } = this.getPartialFieldspace();\n\n const dataGenerated = dataBuilder.call(\n this,\n { fields, idField },\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Returns the unique ids in an array.\n *\n * @return {Array} Returns an array of ids.\n */\n getUids () {\n const rowDiffset = this._rowDiffset;\n const ids = [];\n const idData = this.getPartialFieldspace().idField.data();\n\n rowDiffsetIterator(rowDiffset, (i) => {\n ids.push(idData[i]);\n });\n\n return ids;\n }\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails,\n withUid: true\n });\n\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n const cachedValueObjects = partialFieldspace._cachedValueObjects;\n const formattedData = field.formattedData();\n const rawData = field.partialField.data;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n cachedValueObjects.forEach((obj, i) => {\n obj[field.name()] = new Value(formattedData[i], rawData[i], field);\n });\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace,\n sourceId: propagationSourceId,\n propagationSource: this },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModel, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of rows in the source {@link DataModel}\n * instance based on a set of dimensions.\n *\n * For each unique dimensional value, a new split is created which creates a unique {@link DataModel} instance for\n * that split\n *\n * If multiple dimensions are provided, it splits the source {@link DataModel} instance with all possible\n * combinations of the dimensional values for all the dimensions provided\n *\n * Additionally, it also accepts a predicate function to reduce the set of rows provided. A\n * {@link link_to_selection | Selection} is performed on all the split {@link DataModel} instances based on\n * the predicate function\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByRow(['Origin'])\n * console.log(splitDt));\n * // This should give three unique DataModel instances, one each having rows only for 'USA',\n * // 'Europe' and 'Japan' respectively\n *\n * @example\n * // without predicate function:\n * const splitDtMulti = dt.splitByRow(['Origin', 'Cylinders'])\n * console.log(splitDtMulti));\n * // This should give DataModel instances for all unique combinations of Origin and Cylinder values\n *\n * @example\n * // with predicate function:\n * const splitWithPredDt = dt.select(['Origin'], fields => fields.Origin.value === \"USA\")\n * console.log(splitWithPredDt);\n * // This should not include the DataModel for the Origin : 'USA'\n *\n *\n * @public\n *\n * @param {Array} dimensionArr - Set of dimensions based on which the split should occur\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByRow (dimensionArr, reducerFn, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n dimensionArr.forEach((fieldName) => {\n if (!fieldsConfig[fieldName]) {\n throw new Error(`Field ${fieldName} doesn't exist in the schema`);\n }\n });\n\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n\n config = Object.assign({}, defConfig, config);\n\n return splitWithSelect(this, dimensionArr, reducerFn, config);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of fields in the source {@link DataModel}\n * instance based on a set of common and unique field names provided.\n *\n * Each DataModel created contains a set of fields which are common to all and a set of unique fields.\n * It also accepts configurations such as saveChild and mode(inverse or normal) to include/exclude the respective\n * fields\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByColumn( [['Acceleration'], ['Horsepower']], ['Origin'])\n * console.log(splitDt));\n * // This should give two unique DataModel instances, both having the field 'Origin' and\n * // one each having 'Acceleration' and 'Horsepower' fields respectively\n *\n * @example\n * // without predicate function:\n * const splitDtInv = dt.splitByColumn( [['Acceleration'], ['Horsepower'],['Origin', 'Cylinders'],\n * {mode: 'inverse'})\n * console.log(splitDtInv));\n * // This should give DataModel instances in the following way:\n * // All DataModel Instances do not have the fields 'Origin' and 'Cylinders'\n * // One DataModel Instance has rest of the fields except 'Acceleration' and the other DataModel instance\n * // has rest of the fields except 'Horsepower'\n *\n *\n *\n * @public\n *\n * @param {Array} uniqueFields - Set of unique fields included in each datamModel instance\n * @param {Array} commonFields - Set of common fields included in all datamModel instances\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByColumn (uniqueFields = [], commonFields = [], config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const normalizedProjFieldSets = [[commonFields]];\n\n config = Object.assign({}, defConfig, config);\n uniqueFields = uniqueFields.length ? uniqueFields : [[]];\n\n\n uniqueFields.forEach((fieldSet, i) => {\n normalizedProjFieldSets[i] = getNormalizedProFields(\n [...fieldSet, ...commonFields],\n allFields,\n fieldConfig);\n });\n\n return splitWithProject(this, normalizedProjFieldSets, config, allFields);\n }\n\n\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType, DimensionSubtype } from '../enums';\nimport { ROW_ID } from '../constants';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const idData = dataModel.getPartialFieldspace().idField.data();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n const idMap = [];\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n idMap.push([]);\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n idMap[rowCount] = [`${idData[i]}`];\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n idMap[hashMap[hash]].push(`${idData[i]}`);\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row, i) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n tuple[ROW_ID] = idMap[i];\n });\n\n schema.push({\n name: ROW_ID,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.ID\n });\n\n newDataModel = new DataModel(data, schema, { name: dbName });\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union,\n rowDiffsetIterator\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DataConverter } from './converter';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\nimport * as FieldsUtility from './fields';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union,\n rowDiffsetIterator\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version,\n DataConverter,\n FieldsUtility\n}, enums);\n\nexport default DataModel;\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
whenever a break is necessary. This is to recgonize one\n * generalized format independent of the implementation (canvas based solution, svg based solution). This method\n * converts the output of getSmartText().text to array of lines if the text is wrapped. It sets a named property\n * `lines` on the object passed as parameter.\n *\n * @param {Object} smartlabel - the object returned by getSmartText based on which line arr which to be formed.\n *\n * @return {Object} - The same object which was passed in the arguments. Also a named property `lines` is set.\n */\nSmartLabelManager.textToLines = function (smartlabel) {\n smartlabel = smartlabel || {};\n\n if (!smartlabel.text) {\n smartlabel.text = '';\n } else if (typeof smartlabel.text !== 'string') {\n smartlabel.text = smartlabel.text.toString();\n }\n\n smartlabel.lines = smartlabel.text.split(/\\n|/ig);\n return smartlabel;\n};\n\n// Saves all the instance created so far\nSmartLabelManager.store = {};\n\n// Calculates space taken by a character with an approximation value which is calculated by repeating the\n// character by string length times.\nSmartLabelManager.prototype._calCharDimWithCache = function (text, calculateDifference, length) {\n if (!this._init) {\n return false;\n }\n\n var size,\n csArr,\n tw,\n twi,\n cachedStyle,\n asymmetricDifference,\n maxAdvancedCacheLimit = this.options.maxCacheLimit,\n container = this._container,\n style = this.style || {},\n cache = this._advancedCache || (this._advancedCache = {}),\n advancedCacheKey = this._advancedCacheKey || (this._advancedCacheKey = []),\n cacheName = text + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK),\n cacheInitName = text + 'init' + (style.fontSize || BLANK) + (style.fontFamily || BLANK) + (style.fontWeight || BLANK) + (style.fontStyle || BLANK);\n\n htmlSplCharSpace[text] && (text = htmlSplCharSpace[text]);\n\n if (!calculateDifference) {\n asymmetricDifference = 0;\n } else {\n if ((asymmetricDifference = cache[cacheInitName]) === undefined) {\n container.innerHTML = text.repeat ? text.repeat(length) : Array(length + 1).join(text); // jshint ignore:line\n tw = container.offsetWidth;\n\n container.innerHTML = text;\n twi = container.offsetWidth;\n\n asymmetricDifference = cache[cacheInitName] = (tw - length * twi) / (length + 1);\n advancedCacheKey.push(cacheInitName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n }\n }\n\n if (cachedStyle = cache[cacheName]) {\n csArr = cachedStyle.split(',');\n return {\n width: parseFloat(csArr[0], 10),\n height: parseFloat(csArr[1], 10)\n };\n }\n\n container.innerHTML = text;\n\n size = {\n height: container.offsetHeight,\n width: container.offsetWidth + asymmetricDifference\n };\n\n cache[cacheName] = size.width + ',' + size.height;\n advancedCacheKey.push(cacheName);\n if (advancedCacheKey.length > maxAdvancedCacheLimit) {\n delete cache[advancedCacheKey.shift()];\n }\n\n return size;\n};\n\n// Provide function to calculate the height and width based on the environment and available support from dom.\nSmartLabelManager.prototype._getWidthFn = function () {\n var contObj = this._containerObj,\n container = this._container,\n svgText = contObj.svgText;\n\n if (svgText) {\n return function (str) {\n var bbox, width;\n\n svgText.textContent = str;\n bbox = svgText.getBBox();\n width = bbox.width - SVG_BBOX_CORRECTION;\n if (width < 1) {\n width = bbox.width;\n }\n\n return width;\n };\n } else {\n return function (str) {\n container.innerHTML = str;\n return container.offsetWidth;\n };\n }\n};\n\n/*\n * Sets the style based on which the text's metrics to be calculated.\n *\n * @param {Object} style - The style object which affects the text size\n * {\n * fontSize / 'font-size' : MUST BE FOLLOWED BY PX (10px, 11px)\n * fontFamily / 'font-family'\n * fontWeight / 'font-weight'\n * fontStyle / 'font-style'\n * }\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.setStyle = function (style) {\n if (!this._init) {\n return this;\n }\n\n var sCont;\n\n if (style === this.style && !this._styleNotSet) {\n return;\n }\n\n if (!style) {\n style = this.style;\n }\n\n slLib.setLineHeight(style);\n this.style = style;\n\n this._containerObj = sCont = this._containerManager.get(style);\n\n if (this._containerObj) {\n this._container = sCont.node;\n this._context = sCont.context;\n this._cache = sCont.charCache;\n this._lineHeight = sCont.lineHeight;\n this._styleNotSet = false;\n } else {\n this._styleNotSet = true;\n }\n\n return this;\n};\n\n/*\n * Decides whether ellipses to be shown if the node is truncated\n *\n * @param {Boolean} useEllipses - decides if a ellipses to be appended if the text is truncated. Default: false\n *\n * @return {SmartLabelManager} - Current instance of SmartLabelManager\n */\nSmartLabelManager.prototype.useEllipsesOnOverflow = function (useEllipses) {\n if (!this._init) {\n return this;\n }\n this._showNoEllipses = !useEllipses;\n return this;\n};\n\n/*\n * Get wrapped or truncated text if a bound box is defined around it. The result text would be separated by
\n * if wrapped\n *\n * @param {String} text - the subject text\n * @param {Number} maxWidth - width in px of the the bound box\n * @param {Number} maxHeight - height in px of the the bound box\n * @param {Boolean} noWrap - whether the text to be wrapped. Default false.\n *\n * @return {Object} - The metrics of the text bounded by the box\n * {\n * height : height of the wrapped text\n * width : width of the wrapped text\n * isTruncated : whether the text is truncated\n * maxHeight : Maximum height given\n * maxWidth : Maximum width given\n * oriText : Original text sent\n * oriTextHeight : Original text height\n * oriTextWidth : Original text width\n * text : SMART TEXT\n * }\n */\nSmartLabelManager.prototype.getSmartText = function (text, maxWidth, maxHeight, noWrap) {\n if (!this._init) {\n return false;\n }\n\n if (text === undefined || text === null) {\n text = '';\n } else if (typeof text !== 'string') {\n text = text.toString();\n }\n\n var len,\n trimStr,\n tempArr,\n tmpText,\n maxWidthWithEll,\n toolText,\n oriWidth,\n oriHeight,\n newCharIndex,\n nearestChar,\n tempChar,\n getWidth,\n initialLeft,\n initialTop,\n getOriSizeImproveObj,\n spanArr,\n x,\n y,\n minWidth,\n elem,\n chr,\n elemRightMostPoint,\n elemLowestPoint,\n lastBR,\n removeFromIndex,\n removeFromIndexForEllipses,\n hasHTMLTag = false,\n maxStrWidth = 0,\n lastDash = -1,\n lastSpace = -1,\n lastIndexBroken = -1,\n strWidth = 0,\n strHeight = 0,\n oriTextArr = [],\n i = 0,\n ellipsesStr = this._showNoEllipses ? '' : '...',\n lineHeight = this._lineHeight,\n context = this._context,\n container = this._container,\n sCont = this._containerObj,\n ellipsesWidth = sCont.ellipsesWidth,\n dotWidth = sCont.dotWidth,\n characterArr = [],\n dashIndex = -1,\n spaceIndex = -1,\n lastLineBreak = -1,\n fastTrim = function fastTrim(str) {\n str = str.replace(/^\\s\\s*/, '');\n var ws = /\\s/,\n i = str.length;\n while (ws.test(str.charAt(i -= 1))) {/* jshint noempty:false */}\n return str.slice(0, i + 1);\n },\n smartLabel = {\n text: text,\n maxWidth: maxWidth,\n maxHeight: maxHeight,\n width: null,\n height: null,\n oriTextWidth: null,\n oriTextHeight: null,\n oriText: text,\n isTruncated: false\n };\n\n getWidth = this._getWidthFn();\n\n // In some browsers, offsetheight of a single-line text is getting little (1 px) heigher value of the\n // lineheight. As a result, smartLabel is unable to return single-line text.\n // To fix this, increase the maxHeight a little amount. Hence maxHeight = lineHeight * 1.2\n if (maxHeight === lineHeight) {\n maxHeight *= 1.2;\n }\n\n if (container) {\n if (!documentSupport.isBrowserLess) {\n hasHTMLTag = slLib.xmlTagRegEx.test(text);\n if (!hasHTMLTag) {\n // Due to support of <,> for xml we convert <, > to <,> respectively so to get the correct\n // width it is required to convert the same before calculation for the new improve version of the\n // get text width.\n tmpText = text.replace(slLib.ltgtRegex, function (match) {\n return match === '<' ? '<' : '>';\n });\n getOriSizeImproveObj = this.getOriSize(tmpText, true);\n\n smartLabel.oriTextWidth = oriWidth = getOriSizeImproveObj.width;\n smartLabel.oriTextHeight = oriHeight = getOriSizeImproveObj.height;\n } else {\n container.innerHTML = text;\n smartLabel.oriTextWidth = oriWidth = container.offsetWidth;\n smartLabel.oriTextHeight = oriHeight = container.offsetHeight;\n }\n\n if (oriHeight <= maxHeight && oriWidth <= maxWidth) {\n smartLabel.width = smartLabel.oriTextWidth = oriWidth;\n smartLabel.height = smartLabel.oriTextHeight = oriHeight;\n return smartLabel;\n }\n\n if (lineHeight > maxHeight) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = 0;\n smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n }\n }\n\n // Calculate width with ellipses\n text = fastTrim(text).replace(/(\\s+)/g, ' ');\n maxWidthWithEll = this._showNoEllipses ? maxWidth : maxWidth - ellipsesWidth;\n\n if (!hasHTMLTag) {\n oriTextArr = text.split('');\n len = oriTextArr.length;\n trimStr = '', tempArr = [];\n tempChar = oriTextArr[0];\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n minWidth = getWidth(tempChar);\n this._cache[tempChar] = { width: minWidth };\n }\n\n if (maxWidthWithEll > minWidth) {\n tempArr = text.substr(0, slLib.getNearestBreakIndex(text, maxWidthWithEll, this)).split('');\n i = tempArr.length;\n } else if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n return smartLabel;\n } else if (ellipsesStr) {\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n strWidth = getWidth(tempArr.join(''));\n strHeight = this._lineHeight;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n smartLabel.width = getWidth(smartLabel.text);\n smartLabel.height = this._lineHeight;\n return smartLabel;\n }\n }\n }\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = strWidth;\n smartLabel.height = this._lineHeight;\n return smartLabel;\n } else {\n for (; i < len; i += 1) {\n tempChar = tempArr[i] = oriTextArr[i];\n if (tempChar === ' ' && !context) {\n tempChar = ' ';\n }\n\n if (this._cache[tempChar]) {\n minWidth = this._cache[tempChar].width;\n } else {\n if (!getOriSizeImproveObj || !(minWidth = getOriSizeImproveObj.detailObj[tempChar])) {\n minWidth = getWidth(tempChar);\n }\n this._cache[tempChar] = {\n width: minWidth\n };\n }\n strWidth += minWidth;\n\n if (strWidth > maxWidthWithEll) {\n if (!trimStr) {\n trimStr = tempArr.slice(0, -1).join('');\n }\n if (strWidth > maxWidth) {\n /** @todo use regular expressions for better performance. */\n lastSpace = text.substr(0, tempArr.length).lastIndexOf(' ');\n lastDash = text.substr(0, tempArr.length).lastIndexOf('-');\n if (lastSpace > lastIndexBroken) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastSpace, 1, '
');\n lastIndexBroken = lastSpace;\n newCharIndex = lastSpace + 1;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === tempArr.length - 1) {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '
-');\n } else {\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastSpace).join(''));\n tempArr.splice(lastDash, 1, '-
');\n }\n lastIndexBroken = lastDash;\n newCharIndex = lastDash + 1;\n } else {\n tempArr.splice(tempArr.length - 1, 1, '
' + oriTextArr[i]);\n lastLineBreak = tempArr.length - 2;\n strWidth = getWidth(tempArr.slice(lastIndexBroken + 1, lastLineBreak + 1).join(''));\n lastIndexBroken = lastLineBreak;\n newCharIndex = i;\n }\n strHeight += this._lineHeight;\n if (strHeight > maxHeight) {\n smartLabel.text = fastTrim(trimStr) + ellipsesStr;\n smartLabel.tooltext = smartLabel.oriText;\n // The max width among all the lines will be the width of the string.\n smartLabel.width = maxWidth;\n smartLabel.height = strHeight - this._lineHeight;\n return smartLabel;\n } else {\n maxStrWidth = max(maxStrWidth, strWidth);\n trimStr = null;\n nearestChar = slLib.getNearestBreakIndex(text.substr(newCharIndex), maxWidthWithEll, this);\n strWidth = getWidth(text.substr(newCharIndex, nearestChar || 1));\n if (tempArr.length < newCharIndex + nearestChar) {\n tempArr = tempArr.concat(text.substr(tempArr.length, newCharIndex + nearestChar - tempArr.length).split(''));\n i = tempArr.length - 1;\n }\n }\n }\n }\n }\n\n maxStrWidth = max(maxStrWidth, strWidth);\n\n smartLabel.text = tempArr.join('');\n smartLabel.width = maxStrWidth;\n smartLabel.height = strHeight;\n return smartLabel;\n }\n } else {\n toolText = text.replace(slLib.spanAdditionRegx, '$2');\n text = text.replace(slLib.spanAdditionRegx, slLib.spanAdditionReplacer);\n text = text.replace(/()/g, '$1');\n\n container.innerHTML = text;\n\n spanArr = container[documentSupport.childRetriverFn](documentSupport.childRetriverString);\n\n for (x = 0, y = spanArr.length; x < y; x += 1) {\n elem = spanArr[x];\n //chech whether this span is temporary inserted span from it's class\n if (documentSupport.noClassTesting || slLib.classNameReg.test(elem.className)) {\n chr = elem.innerHTML;\n if (chr !== '') {\n if (chr === ' ') {\n spaceIndex = characterArr.length;\n } else if (chr === '-') {\n dashIndex = characterArr.length;\n }\n\n characterArr.push({\n spaceIdx: spaceIndex,\n dashIdx: dashIndex,\n elem: elem\n });\n oriTextArr.push(chr);\n }\n }\n }\n\n i = 0;\n len = characterArr.length;\n minWidth = characterArr[0].elem.offsetWidth;\n\n if (minWidth > maxWidth) {\n smartLabel.text = '';\n smartLabel.width = smartLabel.oriTextWidth = smartLabel.height = smartLabel.oriTextHeight = 0;\n\n return smartLabel;\n } else if (minWidth > maxWidthWithEll && !this._showNoEllipses) {\n\n maxWidthWithEll = maxWidth - 2 * dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '..';\n } else {\n maxWidthWithEll = maxWidth - dotWidth;\n if (maxWidthWithEll > minWidth) {\n ellipsesStr = '.';\n } else {\n maxWidthWithEll = 0;\n ellipsesStr = '';\n }\n }\n }\n\n initialLeft = characterArr[0].elem.offsetLeft;\n initialTop = characterArr[0].elem.offsetTop;\n\n if (noWrap) {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n if (container.offsetWidth > maxWidth) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n } else {\n for (; i < len; i += 1) {\n elem = characterArr[i].elem;\n elemLowestPoint = elem.offsetHeight + (elem.offsetTop - initialTop);\n elemRightMostPoint = elem.offsetLeft - initialLeft + elem.offsetWidth;\n\n lastBR = null;\n\n if (elemRightMostPoint > maxWidthWithEll) {\n if (!removeFromIndexForEllipses) {\n removeFromIndexForEllipses = i;\n }\n\n if (elemRightMostPoint > maxWidth) {\n lastSpace = characterArr[i].spaceIdx;\n lastDash = characterArr[i].dashIdx;\n if (lastSpace > lastIndexBroken) {\n characterArr[lastSpace].elem.innerHTML = '
';\n lastIndexBroken = lastSpace;\n } else if (lastDash > lastIndexBroken) {\n if (lastDash === i) {\n // in case the overflowing character itself is the '-'\n characterArr[lastDash].elem.innerHTML = '
-';\n } else {\n characterArr[lastDash].elem.innerHTML = '-
';\n }\n lastIndexBroken = lastDash;\n } else {\n elem.parentNode.insertBefore(lastBR = doc.createElement('br'), elem);\n }\n\n //check whether this break made current element outside the area height\n if (elem.offsetHeight + elem.offsetTop > maxHeight) {\n //remove the lastly inserted line break\n if (lastBR) {\n lastBR.parentNode.removeChild(lastBR);\n } else if (lastIndexBroken === lastDash) {\n characterArr[lastDash].elem.innerHTML = '-';\n } else {\n characterArr[lastSpace].elem.innerHTML = ' ';\n }\n removeFromIndex = i;\n //break the looping condition\n i = len;\n } else {\n removeFromIndexForEllipses = null;\n }\n }\n } else {\n //check whether this break made current element outside the area height\n if (elemLowestPoint > maxHeight) {\n removeFromIndex = i;\n i = len;\n }\n }\n }\n }\n\n if (removeFromIndex < len) {\n //set the trancated property of the smartlabel\n smartLabel.isTruncated = true;\n\n /** @todo is this really needed? */\n removeFromIndexForEllipses = removeFromIndexForEllipses ? removeFromIndexForEllipses : removeFromIndex;\n\n for (i = len - 1; i >= removeFromIndexForEllipses; i -= 1) {\n elem = characterArr[i].elem;\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n }\n\n for (; i >= 0; i -= 1) {\n elem = characterArr[i].elem;\n if (slLib.classNameBrReg.test(elem.className)) {\n //chech whether this span is temporary inserted span from it's class\n elem.parentNode.removeChild(elem);\n } else {\n i = 0;\n }\n }\n }\n\n //get the smart text\n smartLabel.text = container.innerHTML.replace(slLib.spanRemovalRegx, '$1').replace(/\\&\\;/g, '&');\n if (smartLabel.isTruncated) {\n smartLabel.text += ellipsesStr;\n smartLabel.tooltext = toolText;\n }\n }\n\n smartLabel.height = container.offsetHeight;\n smartLabel.width = container.offsetWidth;\n\n return smartLabel;\n } else {\n smartLabel.error = new Error('Body Tag Missing!');\n return smartLabel;\n }\n};\n\n/*\n * Get the height and width of a text.\n *\n * @param {String} text - Text whose metrics to be measured\n * @param {Boolean} Optional detailedCalculationFlag - this flag if set it calculates per letter position\n * information and returns it. Ideally you dont need it unless you want to post process the\n * string. And its an EXPENSIVE OPERATION.\n *\n * @return {Object} - If detailedCalculationFlag is set to true the returned object would be\n * {\n * height: height of the text\n * width: width of the text\n * detailObj: detail calculation of letters in the format {lettername: width}\n * }\n * If detailedCalculationFlag is set to false the returned object wont have the detailObj prop.\n */\nSmartLabelManager.prototype.getOriSize = function (text, detailedCalculationFlag) {\n if (!this._init) {\n return false;\n }\n\n var textArr,\n letter,\n lSize,\n i,\n l,\n cumulativeSize = 0,\n height = 0,\n indiSizeStore = {};\n\n if (!detailedCalculationFlag) {\n return this._calCharDimWithCache(text);\n }\n\n // Calculate the width of every letter with an approximation\n textArr = text.split('');\n for (i = 0, l = textArr.length; i < l; i++) {\n letter = textArr[i];\n lSize = this._calCharDimWithCache(letter, true, textArr.length);\n height = max(height, lSize.height);\n cumulativeSize += lSize.width;\n indiSizeStore[letter] = lSize.width;\n }\n\n return {\n width: round(cumulativeSize),\n height: height,\n detailObj: indiSizeStore\n };\n};\n\n/*\n * Dispose the container and object allocated by the smartlabel\n */\nSmartLabelManager.prototype.dispose = function () {\n if (!this._init) {\n return this;\n }\n\n this._containerManager && this._containerManager.dispose && this._containerManager.dispose();\n\n delete this._container;\n delete this._context;\n delete this._cache;\n delete this._containerManager;\n delete this._containerObj;\n delete this.id;\n delete this.style;\n delete this.parentContainer;\n delete this._showNoEllipses;\n\n return this;\n};\n\nexports['default'] = SmartLabelManager;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n\tvalue: true\n});\nvar lib = {\n\tinit: function init(win) {\n\t\tvar doc = win.document,\n\t\t nav = win.navigator,\n\t\t userAgent = nav.userAgent,\n\t\t DIV = 'DIV',\n\t\t ceil = Math.ceil,\n\t\t floor = Math.floor,\n\t\t containerInstanceCount = 0,\n\t\t clsNameSpace = 'fusioncharts-smartlabel-',\n\t\t containerClass = clsNameSpace + 'container',\n\t\t classNameWithTag = clsNameSpace + 'tag',\n\t\t classNameWithTagBR = clsNameSpace + 'br';\n\n\t\tlib = {\n\t\t\twin: win,\n\n\t\t\tcontainerClass: containerClass,\n\n\t\t\tclassNameWithTag: classNameWithTag,\n\n\t\t\tclassNameWithTagBR: classNameWithTagBR,\n\n\t\t\tmaxDefaultCacheLimit: 500,\n\n\t\t\tclassNameReg: new RegExp('\\b' + classNameWithTag + '\\b'),\n\n\t\t\tclassNameBrReg: new RegExp('\\b' + classNameWithTagBR + '\\b'),\n\n\t\t\tspanAdditionRegx: /(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,\n\n\t\t\tspanAdditionReplacer: '$1$2',\n\n\t\t\tspanRemovalRegx: new RegExp('\\\\]+?' + classNameWithTag + '[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>', 'ig'),\n\n\t\t\txmlTagRegEx: new RegExp('<[^>][^<]*[^>]+>', 'i'),\n\n\t\t\tltgtRegex: /<|>/g,\n\n\t\t\tbrReplaceRegex: //ig,\n\n\t\t\ttestStrAvg: 'WgI',\n\n\t\t\t// This style is applied over the parent smartlabel container. The container is kept hidden from the viewport\n\t\t\tparentContainerStyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '-9999em',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tpadding: '0px',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\toverflow: 'hidden'\n\t\t\t},\n\n\t\t\t// All the style which might affect the text metrics\n\t\t\tsupportedStyle: {\n\t\t\t\tfont: 'font',\n\t\t\t\tfontFamily: 'font-family',\n\t\t\t\t'font-family': 'font-family',\n\t\t\t\tfontWeight: 'font-weight',\n\t\t\t\t'font-weight': 'font-weight',\n\t\t\t\tfontSize: 'font-size',\n\t\t\t\t'font-size': 'font-size',\n\t\t\t\tlineHeight: 'line-height',\n\t\t\t\t'line-height': 'line-height',\n\t\t\t\tfontStyle: 'font-style',\n\t\t\t\t'font-style': 'font-style'\n\t\t\t},\n\n\t\t\t// Get the support list for html the document where the text calcution is to be done.\n\t\t\tgetDocumentSupport: function getDocumentSupport() {\n\t\t\t\tvar childRetriverFn, childRetriverString, noClassTesting;\n\n\t\t\t\tif (doc.getElementsByClassName) {\n\t\t\t\t\tchildRetriverFn = 'getElementsByClassName';\n\t\t\t\t\tchildRetriverString = classNameWithTag;\n\t\t\t\t\tnoClassTesting = true;\n\t\t\t\t} else {\n\t\t\t\t\tchildRetriverFn = 'getElementsByTagName';\n\t\t\t\t\tchildRetriverString = 'span';\n\t\t\t\t\tnoClassTesting = false;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisIE: /msie/i.test(userAgent) && !win.opera,\n\t\t\t\t\thasSVG: Boolean(win.SVGAngle || doc.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')),\n\t\t\t\t\tisHeadLess: new RegExp(' HtmlUnit').test(userAgent),\n\t\t\t\t\tisWebKit: new RegExp(' AppleWebKit/').test(userAgent),\n\t\t\t\t\tchildRetriverFn: childRetriverFn,\n\t\t\t\t\tchildRetriverString: childRetriverString,\n\t\t\t\t\tnoClassTesting: noClassTesting\n\t\t\t\t};\n\t\t\t},\n\n\t\t\t/*\n * Create a html div element and attach it with a parent. All the subsequent operations are performed\n * by upding this dom tree only.\n *\n * @param {HTMLElement} - The html element where the newly created div is to be attached. If not passed,\n * the new div is appended on the body.\n */\n\t\t\tcreateContainer: function createContainer(containerParent) {\n\t\t\t\tvar body, container;\n\n\t\t\t\tif (containerParent && (containerParent.offsetWidth || containerParent.offsetHeight)) {\n\t\t\t\t\tif (containerParent.appendChild) {\n\t\t\t\t\t\tcontainerParent.appendChild(container = doc.createElement(DIV));\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbody = doc.getElementsByTagName('body')[0];\n\n\t\t\t\t\tif (body && body.appendChild) {\n\t\t\t\t\t\tcontainer = doc.createElement(DIV);\n\t\t\t\t\t\tcontainer.className = containerClass;\n\t\t\t\t\t\tcontainer.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tcontainer.setAttribute('role', 'presentation');\n\t\t\t\t\t\tcontainerInstanceCount += 1;\n\t\t\t\t\t\tbody.appendChild(container);\n\t\t\t\t\t\treturn container;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Finds a approximate position where the text is to be broken\n\t\t\tgetNearestBreakIndex: function getNearestBreakIndex(text, maxWidth, sl) {\n\t\t\t\tif (!text || !text.length) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tvar difference,\n\t\t\t\t getWidth = sl._getWidthFn(),\n\t\t\t\t charLen = 0,\n\t\t\t\t increment = 0,\n\t\t\t\t oriWidth = getWidth(text),\n\t\t\t\t avgWidth = oriWidth / text.length;\n\n\t\t\t\tdifference = maxWidth;\n\t\t\t\tcharLen = ceil(maxWidth / avgWidth);\n\n\t\t\t\tif (oriWidth < maxWidth) {\n\t\t\t\t\treturn text.length - 1;\n\t\t\t\t}\n\n\t\t\t\tif (charLen > text.length) {\n\t\t\t\t\tdifference = maxWidth - oriWidth;\n\t\t\t\t\tcharLen = text.length;\n\t\t\t\t}\n\n\t\t\t\twhile (difference > 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twhile (difference < 0) {\n\t\t\t\t\tdifference = maxWidth - getWidth(text.substr(0, charLen));\n\t\t\t\t\tincrement = floor(difference / avgWidth);\n\t\t\t\t\tif (increment) {\n\t\t\t\t\t\tcharLen += increment;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn charLen;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn charLen;\n\t\t\t},\n\n\t\t\t/*\n * Determine lineheight of a text for a given style. It adds propery lineHeight to the style passed\n *\n * @param {Object} - The style based on which the text's metric needs to be calculated. The calculation happens\n * based on fontSize property, if its not present a default font size is assumed.\n *\n * @return {Object} - The style that was passed with lineHeight as a named propery set on the object.\n */\n\t\t\tsetLineHeight: function setLineHeight(styleObj) {\n\t\t\t\tvar fSize = styleObj.fontSize = styleObj.fontSize || '12px';\n\t\t\t\tstyleObj.lineHeight = styleObj.lineHeight || styleObj['line-height'] || parseInt(fSize, 10) * 1.2 + 'px';\n\t\t\t\treturn styleObj;\n\t\t\t}\n\t\t};\n\n\t\treturn lib;\n\t}\n};\n\nexports['default'] = lib;\nmodule.exports = exports['default'];","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n },\n minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","'use strict';\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\nfunction ContainerManager(parentContainer, isBrowserLess, maxContainers) {\n var svg;\n\n maxContainers = maxContainers > 5 ? maxContainers : 5;\n maxContainers = maxContainers < 20 ? maxContainers : 20;\n\n this.maxContainers = maxContainers;\n this.first = null;\n this.last = null;\n this.containers = {};\n this.length = 0;\n this.rootNode = parentContainer;\n\n if (isBrowserLess) {\n svg = doc.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'xlink', 'http://www.w3.org/1999/xlink');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'height', '0');\n svg.setAttributeNS('http://www.w3.org/2000/svg', 'width', '0');\n this.svgRoot = svg;\n this.rootNode.appendChild(svg);\n }\n}\n\nContainerManager.prototype.get = function (style) {\n var diff,\n key,\n containerObj,\n containers = this.containers,\n len = this.length,\n max = this.maxContainers,\n keyStr = '';\n\n for (key in slLib.supportedStyle) {\n if (style[key] !== undefined) {\n keyStr += slLib.supportedStyle[key] + ':' + style[key] + ';';\n }\n }\n\n if (!keyStr) {\n return false;\n }\n\n if (containerObj = containers[keyStr]) {\n if (this.first !== containerObj) {\n containerObj.prev && (containerObj.prev.next = containerObj.next);\n containerObj.next && (containerObj.next.prev = containerObj.prev);\n containerObj.next = this.first;\n containerObj.next.prev = containerObj;\n this.last === containerObj && (this.last = containerObj.prev);\n containerObj.prev = null;\n this.first = containerObj;\n }\n } else {\n if (len >= max) {\n diff = len - max + 1;\n // +1 is to remove an extra entry to make space for the new container to be added.\n while (diff--) {\n this.removeContainer(this.last);\n }\n }\n containerObj = this.addContainer(keyStr);\n }\n\n return containerObj;\n};\n\nContainerManager.prototype.addContainer = function (keyStr) {\n var node, container;\n\n this.containers[keyStr] = container = {\n next: null,\n prev: null,\n node: null,\n ellipsesWidth: 0,\n lineHeight: 0,\n dotWidth: 0,\n avgCharWidth: 4,\n keyStr: keyStr,\n charCache: {}\n };\n\n // Since the container objects are arranged from most recent to least recent order, we need to add the new\n // object at the beginning of the list.\n container.next = this.first;\n container.next && (container.next.prev = container);\n this.first = container;\n if (!this.last) {\n this.last = container;\n }\n this.length += 1;\n\n node = container.node = doc.createElement('div');\n this.rootNode.appendChild(node);\n\n if (documentSupport.isIE && !documentSupport.hasSVG) {\n node.style.setAttribute('cssText', keyStr);\n } else {\n node.setAttribute('style', keyStr);\n }\n\n node.setAttribute('aria-hidden', 'true');\n node.setAttribute('role', 'presentation');\n node.style.display = 'inline-block';\n\n node.innerHTML = slLib.testStrAvg; // A test string.\n container.lineHeight = node.offsetHeight;\n container.avgCharWidth = node.offsetWidth / 3;\n\n if (documentSupport.isBrowserLess) {\n node = container.svgText = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n node.setAttribute('style', keyStr);\n this.svgRoot.appendChild(node);\n\n node.textContent = slLib.testStrAvg; // A test string.\n container.lineHeight = node.getBBox().height;\n container.avgCharWidth = (node.getBBox().width - SVG_BBOX_CORRECTION) / 3;\n\n node.textContent = '...';\n container.ellipsesWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n node.textContent = '.';\n container.dotWidth = node.getBBox().width - SVG_BBOX_CORRECTION;\n } else {\n node.innerHTML = '...';\n container.ellipsesWidth = node.offsetWidth;\n node.innerHTML = '.';\n container.dotWidth = node.offsetWidth;\n node.innerHTML = '';\n }\n\n return container;\n};\n\nContainerManager.prototype.removeContainer = function (cObj) {\n var keyStr = cObj.keyStr;\n\n if (!keyStr || !this.length || !cObj) {\n return;\n }\n this.length -= 1;\n\n cObj.prev && (cObj.prev.next = cObj.next);\n cObj.next && (cObj.next.prev = cObj.prev);\n this.first === cObj && (this.first = cObj.next);\n this.last === cObj && (this.last = cObj.prev);\n\n cObj.node.parentNode.removeChild(cObj.node);\n\n delete this.containers[keyStr];\n};\n\nContainerManager.prototype.dispose = function () {\n var key,\n containers = this.containers;\n\n this.maxContainers = null;\n for (key in containers) {\n this.removeContainer(containers[key]);\n }\n\n this.rootNode.parentNode.removeChild(this.rootNode);\n\n this.rootNode = null;\n this.first = null;\n this.last = null;\n};\n\nmodule.exports = ContainerManager;","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) {\n if (sortValues != null) array.sort(sortValues);\n return rollup != null ? rollup(array) : array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map.entries();\n else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n}\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map, key, value) {\n map.set(key, value);\n}\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n scale.invertExtent = function(r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t,\n hiIndex;\n values.push(values[n] + this.step());\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo));\n hiIndex = getClosestIndexOf(values, hi);\n b = lo===hi ? a : Math.max(a, hiIndex - 1);\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) t = a, a = n - b, b = n - t; // map + swap\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function (r0, r1) {\n var lo = +r0,\n hi = arguments.length > 1 ? +r1 : lo,\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1,\n a,\n t;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) t = lo, lo = hi, hi = t;\n if (hi < values[0] || lo > range[1-reverse]) return undefined;\n\n // binary search to index into scale range\n a = Math.max(0, getClosestIndexOf(values, lo, 'left'));\n\n // increment index a if lo is within padding gap\n // if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n return domain()[reverse ? n - a : a];\n }\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n\nfunction getClosestIndexOf (arr, value, side) {\n var low = 0,\n arrLen = arr.length,\n high = arrLen - 1,\n highVal,\n mid,\n d1,\n d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n }\n else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left'? high - 1 : high;\n } else {\n if (high === arr.length - 1) { return high; }\n return side === 'left'? high : high + 1;\n }\n}","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n","import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","export default function(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n}\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"./colors\";\n\nexport default colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n","import colors from \"./colors\";\n\nexport default colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n","import colors from \"./colors\";\n\nexport default colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar rainbow = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n}\n","import colors from \"./colors\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\n","const swap = (arr, i, j) => {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n};\n\nconst defaultCompare = (a, b) => {\n if (a > b) {\n return -1;\n }\n return a > b ? 1 : 0;\n};\n\nconst quickselectStep = (arr, k, left, right, compare) => {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n};\n\n/**\n * Rearranges items so that all items in the [left, k] are the smallest. The k-th element will have the\n * (k - left + 1)-th smallest value in [left, right].\n * array: the array to partially sort (in place)\n * k: middle index for partial sorting (as defined above)\n * left: left index of the range to sort (0 by default)\n * right: right index (last index of the array by default)\n * compareFn: compare function\n *\n * Ref: https://github.com/mourner/quickselect\n * Example:\n * var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];\n * quickselect(arr, 8);\n * arr is [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]\n * ^^ middle index\n * @param {Array} arr the array to partially sort (in place)\n * @param {Number} k middle index for partial sorting (as defined above)\n * @param {Number} left left index of the range to sort (0 by default)\n * @param {Number} right right index (last index of the array by default)\n * @param {Function} compare compare function\n */\nconst quickselect = (arr, k, left, right, compare) => {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n};\n\nexport default quickselect;\n","import quickselect from './quick-select';\n\nconst createNode = children => ({\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n});\n\nconst extend = (a, b) => {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n};\n\n// min bounding rectangle of node children from k to p-1\nconst distBBox = (node, k, p, toBBox, destNode) => {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n};\n\n// calculate node's bbox from bboxes of its children\nconst calcBBox = (node, toBBox) => {\n distBBox(node, 0, node.children.length, toBBox, node);\n};\n\nconst compareNodeMinX = (a, b) => a.minX - b.minX;\nconst compareNodeMinY = (a, b) => a.minY - b.minY;\n\nconst bboxArea = a => (a.maxX - a.minX) * (a.maxY - a.minY);\n\nconst bboxMargin = a => (a.maxX - a.minX) + (a.maxY - a.minY);\n\nconst enlargedArea = (a, b) => (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n\nconst intersectionArea = (a, b) => {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n};\n\nconst contains = (a, b) => a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n\nconst intersects = (a, b) => b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n\nconst findItem = (item, items, equalsFn) => {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n};\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nconst multiSelect = (arr, left, right, n, compare) => {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n};\n\nconst all = (node, result) => {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n};\n\nexport default class RTree {\n constructor (maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all () {\n return all(this.data, []);\n }\n\n search (bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (const child of node.children) {\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) all(child, result);\n else nodesToSearch.push(child);\n }\n }\n\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n load (data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this.build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this.splitRoot(this.data, node);\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this.insertSingleItem(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert (item) {\n if (item) this.insertSingleItem(item, this.data.height - 1);\n return this;\n }\n\n clear () {\n this.data = createNode([]);\n return this;\n }\n\n remove (item, equalsFn) {\n if (!item) return this;\n\n let i;\n let parent;\n let goingUp;\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this.condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toJSON () { return this.data; }\n\n fromJSON (data) {\n this.data = data;\n return this;\n }\n\n toBBox (item) { return item; }\n\n compareMinX (a, b) { return a.minX - b.minX; }\n compareMinY (a, b) { return a.minY - b.minY; }\n\n build (items, left, right, height) {\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / (M ** (height - 1)));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this.build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n chooseSubtree (bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (const child of node.children) {\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n insertSingleItem (item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this.chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this.split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this.adjustParentBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n split (insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this.chooseSplitAxis(node, m, M);\n\n const splitIndex = this.chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this.splitRoot(node, newNode);\n }\n\n splitRoot (node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n chooseSplitIndex (node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n chooseSplitAxis (node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this.allDistMargin(node, m, M, compareMinX);\n const yMargin = this.allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n allDistMargin (node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n adjustParentBoxes (bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n condense (path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n } else this.clear();\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n","const ReservedFields = {\n ROW_ID: '__id__',\n MEASURE_NAMES: '__measure_names__'\n};\n\nexport default ReservedFields;\n","const CommonProps = {\n ACTION_INF: 'actionInf',\n ON_LAYER_DRAW: 'onLayerDraw',\n MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickTransform = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"#000\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"#000\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"#000\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"))\n .style('transform', tickTransform);\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.tickTransform = function(_) {\n return arguments.length ? (tickTransform = _, axis) : tickTransform;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n return ascending(series).reverse();\n}\n","export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n","export var slice = Array.prototype.slice;\n","import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return t * t * ((s + 1) * t - s);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((s + 1) * t + s) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export function x(d) {\n return d[0];\n}\n\nexport function y(d) {\n return d[1];\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\n\n/**\n * This class represents a selection applied on a data array.\n *\n * @class Selection\n */\nclass Selection {\n /**\n * Creates an instance of Selection.\n * @param {Array} data Array of DataObjects.\n * @memberof Selection\n */\n constructor (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\n }\n\n /**\n * This method is used to supply seed data to a selection.\n *\n * @param {Array} newData Seed data to create the enter selection.\n * @param {Functon | undefined } idGetter This function is used to uniqely identify a data entry.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n data (newData) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\n }\n\n /**\n * Applies the supplied callback to each data element\n * and returns a new selection.\n *\n * @param {Function} callback Callback to execute on each item.\n * @return {Selection} New selection with data created using callback.\n * @memberof Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\n return this;\n }\n\n /**\n * Returns a selection with exit data.\n *\n * @return {Selection} Instance of selection.\n * @memberof Selection\n */\n exit () {\n this._mode = 'exit';\n return this;\n }\n\n /**\n * This method merges the data of one selection with another.\n *\n * @param {Selection} selection Instance of selection.\n * @return {Selection} Modified selection.\n * @memberof Selection\n */\n merge (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\n\n /**\n * Gets the object bound to a class\n *\n * @return {Object} current data set bound to the class\n * @memberof Selection\n */\n getObjects () {\n let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\n","import Selection from './selection';\n/**\n * This function applies a selection operation on a data array.\n *\n * @export\n * @param {Array} [data=[]] The data array to be observed.\n * @return {Selection} Instance of a selection.\n */\nexport default function dataSelect (idFn) {\n return new Selection(idFn);\n}\n\n","export const ORDER_ASCENDING = 'ascending';\nexport const ORDER_DESCENDING = 'descending';\nexport const ORDER_NONE = 'none';\nexport const OFFSET_DIVERGING = 'diverging';\nexport const OFFSET_NONE = 'none';\nexport const OFFSET_EXPAND = 'expand';\nexport const OFFSET_WIGGLE = 'wiggle';\n","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } from 'datamodel';\n\nimport {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom\n} from 'd3-axis';\nimport {\n symbolCircle,\n symbolCross,\n symbolDiamond,\n symbolSquare,\n symbolStar,\n symbolWye,\n symbolTriangle,\n symbol,\n stack as d3Stack,\n stackOffsetDiverging,\n stackOrderNone,\n stackOrderAscending,\n stackOrderDescending,\n stackOffsetNone,\n stackOffsetExpand,\n stackOffsetWiggle,\n pie,\n arc,\n line,\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n area\n} from 'd3-shape';\nimport { scaleBand } from 'd3-scale';\nimport { nest } from 'd3-collection';\nimport {\n interpolate,\n interpolateRgb,\n piecewise,\n interpolateNumber,\n interpolateHslLong\n} from 'd3-interpolate';\nimport {\n easeCubic,\n easeBounce,\n easePoly,\n easeBack,\n easeCircle,\n easeLinear,\n easeElastic\n} from 'd3-ease';\nimport {\n color,\n rgb,\n hsl\n} from 'd3-color';\nimport { voronoi } from 'd3-voronoi';\nimport { dataSelect } from './DataSystem';\nimport * as scales from './scales';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING, ReservedFields } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\nconst HTMLElement = window.HTMLElement;\n\nconst isSimpleObject = (obj) => {\n let token;\n if (typeof obj === 'object') {\n if (obj === null) { return false; }\n token = Object.prototype.toString.call(obj);\n if (token === '[object Object]') {\n return (obj.constructor.toString().match(/^function (.*)\\(\\)/m) || [])[1] === 'Object';\n }\n }\n return false;\n};\n\n/**\n * Returns unique id\n * @return {string} Unique id string\n */\nconst\n getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Deep copies an object and returns a new object.\n * @param {Object} o Object to clone\n * @return {Object} New Object.\n */\nconst clone = (o) => {\n const output = {};\n let v;\n for (const key in o) {\n if ({}.hasOwnProperty.call(o, key)) {\n v = o[key];\n output[key] = isSimpleObject(v) ? clone(v) : v;\n }\n }\n return output;\n};\n\n/**\n* Checks the existence of keys in an object\n* @param {Array} keys Set of keys which are to be checked\n* @param {Object} obj whose keys are checked from the set of keys provided\n* @return {Object} Error if the keys are absent, or the object itself\n*/\nconst checkExistence = (keys, obj) => {\n const nonExistentKeys = [];\n keys.forEach((key) => {\n if (key in obj) {\n return;\n }\n nonExistentKeys.push(key);\n });\n return nonExistentKeys;\n};\n\nconst sanitizeIP = {\n typeObj: (keys, obj) => {\n if (typeof obj !== 'object') {\n return Error('Argument type object expected');\n }\n\n const nonExistentKeys = checkExistence(keys, obj);\n if (nonExistentKeys.length) {\n return Error(`Missing keys from parameter ${nonExistentKeys.join(', ')}`);\n }\n return obj;\n },\n\n /* istanbul ignore next */ htmlElem: (elem) => {\n if (!(elem instanceof HTMLElement)) {\n return Error('HTMLElement required');\n }\n return elem;\n }\n};\n\n/**\n * Gets the maximum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Maximum value\n */\nconst getMax = (data, field) => Math.max(...data.map(d => d[field]));\n\n/**\n * Gets the minimum value from an array of objects for a given property name\n * @param {Array.} data Array of objects\n * @param {string} field Field name\n * @return {number} Minimum value\n */\nconst getMin = (data, field) => Math.min(...data.map(d => d[field]));\n\n/**\n * Gets the domain from the data based on the field name and type of field\n * @param {Array. | Array.} data Data Array\n * @param {Array.} fields Array of fields from where the domain will be calculated\n * @param {string} fieldType Type of field - nominal, quantitiative, temporal.\n * @return {Array} Usually contains a min and max value if field is quantitative or\n * an array of values if field type is nominal or ordinal\n */\nconst getDomainFromData = (data, fields, fieldType) => {\n let domain;\n const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\n }\n return domain;\n};\n\n/**\n * Union Domain values\n * @param {Array.} domains Array of domain values\n * @param {string} fieldType type of field - dimension,measure or datetime.\n * @return {Array} Unioned domain of all domain values.\n */\nconst unionDomain = (domains, fieldType) => {\n let domain = [];\n domains = domains.filter(dom => dom && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\n }\n\n return domain;\n};\n\nconst symbolFns = {\n circle: symbolCircle,\n cross: symbolCross,\n diamond: symbolDiamond,\n square: symbolSquare,\n star: symbolStar,\n wye: symbolWye,\n triangle: symbolTriangle\n};\n\nconst easeFns = {\n cubic: easeCubic,\n bounce: easeBounce,\n linear: easeLinear,\n elastic: easeElastic,\n back: easeBack,\n poly: easePoly,\n circle: easeCircle\n};\n\n/**\n * Returns the maximum or minimum points of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @param {string} minOrMax minimum or maximum.\n * @return {Object} Minimum or maximum point.\n */\nconst getExtremePoint = (points, compareValue, minOrMax) => {\n let extremePoint;\n let point;\n const len = points.length;\n let minOrMaxVal = minOrMax === 'max' ? -Infinity : Infinity;\n let val;\n\n for (let i = 0; i < len; i++) {\n point = points[i];\n val = point[compareValue];\n if (minOrMax === 'min' ? val < minOrMaxVal : val > minOrMaxVal) {\n minOrMaxVal = val;\n extremePoint = point;\n }\n }\n\n return extremePoint;\n};\n\n/**\n * Returns the minimum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Minimum point.\n */\nconst getMinPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'min');\n\n/**\n * Returns the maximum point of a compare value from an array of objects.\n * @param {Array} points Array of objects\n * @param {string} compareValue Key in the object on which the comparing will be done.\n * @return {Object} Maximum point.\n */\nconst getMaxPoint = (points, compareValue) => getExtremePoint(points, compareValue, 'max');\n\n/**\n * Gets the index of the closest value of the given value from the array.\n * @param {Array} arr Array of values\n * @param {number} value Value from which the nearest value will be calculated.\n * @param {string} side side property.\n * @return {number} index of the closest value\n */\n/* istanbul ignore next */const getClosestIndexOf = (arr, value, side) => {\n let low = 0;\n const arrLen = arr.length;\n let high = arrLen - 1;\n\n let mid;\n let d1;\n let d2;\n\n while (low < high) {\n mid = Math.floor((low + high) / 2);\n d1 = Math.abs(arr[mid] - value);\n d2 = Math.abs(arr[mid + 1] - value);\n\n if (d2 <= d1) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n if (!side) {\n return high;\n }\n\n const highVal = arr[high];\n if (highVal === value) {\n return high;\n } else if (highVal > value) {\n if (high === 0) { return high; }\n return side === 'left' ? high - 1 : high;\n }\n if (high === arr.length - 1) { return high; }\n return side === 'left' ? high : high + 1;\n};\n\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\n};\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst getWindow = () => window;\n\n/**\n * Returns the browser window object\n * @return {Window} Window object\n*/\nconst reqAnimFrame = (() => requestAnimationFrame)();\n\nconst cancelAnimFrame = (() => cancelAnimationFrame)();\n\n/**\n * Capitalizes the first letter of the word\n * @param {string} text word\n * @return {string} Capitalized word\n */\nconst capitalizeFirst = (text) => {\n text = text.toLowerCase();\n\n return text.replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1));\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst unique = (arr, fn = d => d) => {\n const vals = arr.reduce((acc, v) => {\n acc[fn(v)] = v;\n return acc;\n }, {});\n return Object.values(vals);\n};\n\n/**\n * Gets the minimum difference between two consecutive numbers in an array.\n * @param {Array} arr Array of numbers\n * @param {number} index index of the value\n * @return {number} minimum difference between values\n */\n/* istanbul ignore next */ const getMinDiff = (arr, index) => {\n let diff;\n let uniqueVals;\n if (index !== undefined) {\n uniqueVals = unique(arr.map(d => d[index]));\n } else {\n uniqueVals = unique(arr);\n }\n if (uniqueVals.length > 1) {\n diff = Math.abs(uniqueVals[1] - uniqueVals[0]);\n for (let i = 2, len = uniqueVals.length; i < len; i++) {\n diff = Math.min(diff, Math.abs(uniqueVals[i] - uniqueVals[i - 1]));\n }\n } else {\n diff = uniqueVals[0];\n }\n\n return diff;\n};\n\n/**\n * Returns the class name appended with a given id.\n * @param {string} cls class name\n * @param {string} id unique identifier\n * @param {string} prefix string needed to add before the classname\n * @return {string} qualified class name\n */\n/* istanbul ignore next */const getQualifiedClassName = (cls, id, prefix) => {\n cls = cls.replace(/^\\.*/, '');\n return [`${prefix}-${cls}`, `${prefix}-${cls}-${id}`];\n};\n\n/**\n * This method is used to set the default value for variables\n * without sullying the code with conditional statements.\n *\n * @export\n * @param {any} param The parameter to test.\n * @param {any} value The default value to assign.\n * @return {any} The value.\n */\n/* istanbul ignore next */ const defaultValue = (param, value) => {\n if (typeof param === 'undefined' || (typeof param === 'object' && !param)) {\n return value;\n }\n return param;\n};\n\n/**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\n */\n const visit = (name) => {\n if (dependencyOrder.length === keys.length) {\n return true;\n }\n visited[name] = true;\n const edges = graph[name];\n for (let e = 0; e < edges.length; e++) {\n const dep = edges[e];\n if (!visited[dep]) {\n visit(dep);\n }\n }\n\n dependencyOrder.push(name);\n return false;\n };\n\n for (let i = 0; i < keys.length; i++) {\n if (visit(keys[i], i)) break;\n }\n\n return dependencyOrder;\n};\n\n/**\n * Iterates over the properties of an object and applies the function\n *\n * @param {any} obj object to be iterated upon\n * @param {any} fn function to be applied on it\n */\nconst objectIterator = (obj, fn) => {\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn(key, obj);\n }\n }\n};\n\n/**\n * This class creates a d3 voronoi for retrieving the nearest neighbour of any point from a set of two\n * dimensional points\n * @class Voronoi\n */\n/* istanbul ignore next */ class Voronoi {\n /**\n * Initialize the voronoi with the data given.\n * @param {Array.} data Array of points.\n */\n constructor (data = []) {\n this._voronoi = voronoi().x(d => d.x).y(d => d.y);\n this.data(data);\n }\n\n /**\n * Sets the data to voronoi\n * @param {Array.} data Array of objects.\n * @return {Voronoi} Instance of voronoi.\n */\n data (data) {\n if (data) {\n this._voronoiFn = this._voronoi(data);\n }\n return this;\n }\n\n /**\n * Finds the closest point to the x and y position given.\n * @param {number} x x value\n * @param {number} y y value\n * @param {number} radius search radius.\n * @return {Object} Details of the nearest point.\n */\n find (x, y, radius) {\n return this._voronoiFn.find(x, y, radius);\n }\n}\n\nconst getObjProp = (obj, ...fields) => {\n if (obj === undefined || obj === null) {\n return obj;\n }\n let retObj = obj;\n for (let i = 0, len = fields.length; i < len; i++) {\n retObj = retObj[fields[i]];\n if (retObj === undefined || retObj === null) {\n break;\n }\n }\n return retObj;\n};\n\n/**\n * Sanitize an input number / string mixed number. Currently dot in the no is not supported.\n *\n * @param {number | string} val pure number or string mixed number\n * @return {number | null} Number if it can be extracted. Otherwise null\n */\nconst intSanitizer = (val) => {\n const arr = val.toString().match(/(\\d+)(px)*/g);\n if (!arr) {\n // If only characters are passed\n return null;\n }\n\n return parseInt(arr[0], 10);\n};\n\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\n return context;\n } return context[`_${prop}`];\n };\n }\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} prop\n */\nconst getArraySum = (arr, prop) => arr.reduce((total, elem) => {\n total += prop ? elem[prop] : elem;\n return total;\n}, 0);\n\n/**\n *\n *\n * @param {*} arr1\n * @param {*} arr2\n *\n */\nconst arraysEqual = (arr1, arr2) => {\n if (arr1.length !== arr2.length) { return false; }\n for (let i = arr1.length; i >= 0; i--) {\n if (arr1[i] !== arr2[i]) { return false; }\n }\n\n return true;\n};\n\n/* eslint valid-typeof:0 */\n/**\n * Returns a validation function which can be used to validate variables against a type and value\n *\n * @param {any} type type of value that the object should have\n * @return {Object} validation function\n */\nconst isEqual = type => (oldVal, newVal) => {\n if (type === 'Array') {\n if (!oldVal) {\n return false;\n }\n return arraysEqual(oldVal, newVal);\n } else if (type === 'Object') {\n return Object.is(oldVal, newVal);\n } return oldVal === newVal;\n};\n\n/**\n * Description @todo\n *\n * @param {any} transactionModel @todo\n * @param {any} transactionEndpoint @todo\n * @param {any} transactionItems @todo\n * @return {any} @todo\n */\nconst enableChainedTransaction = (transactionModel, transactionEndpoint, transactionItems) =>\n transactionItems.forEach(item => transactionModel\n .registerImmediateListener(item, ([, newVal]) => transactionEndpoint[item](newVal)));\n\n/**\n * Chceks if the element is istanceof HTMLElement\n *\n * @param {Object} elem any JS Object\n */\nconst isHTMLElem = elem => elem instanceof HTMLElement;\n\nconst ERROR_MSG = {\n INTERFACE_IMPL: 'Method not implemented'\n};\n\n/**\n * Merges the sink object in the source by recursively iterating through the object properties\n * @param {Object} source Source Object\n * @param {Object} sink Sink Object\n * @return {Object} Merged object\n */\nconst mergeRecursive = (source, sink) => {\n for (const prop in sink) {\n if (isSimpleObject(source[prop]) && isSimpleObject(sink[prop])) {\n mergeRecursive(source[prop], sink[prop]);\n } else if (sink[prop] instanceof Object && sink[prop].constructor === Object) {\n source[prop] = {};\n mergeRecursive(source[prop], sink[prop]);\n } else {\n source[prop] = sink[prop];\n }\n }\n return source;\n};\n\n/**\n * Creates a selection set from a data set with corresponding attributes\n *\n * @export\n * @param {Selection} sel contains previous selection\n * @param {Object} appendObj Object to be appended\n * @param {Array} data Data based on which the selection is entered/updated/removed\n * @param {Object} [attrs={}] Attributes to be set on the data\n * @return {Selection} Merged selection\n */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\n};\n\nconst interpolateArray = (data, fitCount) => {\n const linearInterpolate = function (before, after, atPoint) {\n return before + (after - before) * atPoint;\n };\n const newData = [];\n const springFactor = ((data.length - 1) / (fitCount - 1));\n newData[0] = data[0]; // for new allocation\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = (Math.floor(tmp)).toFixed();\n const after = (Math.ceil(tmp)).toFixed();\n const atPoint = tmp - before;\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\n }\n newData[fitCount - 1] = data[data.length - 1]; // for new allocation\n return newData;\n};\n\n/**\n *\n *\n * @param {*} fn\n */\nconst nextFrame = (fn) => {\n setTimeout(() => {\n fn();\n }, 0);\n};\n\n/**\n *\n *\n * @param {*} angle\n */\nconst angleToRadian = angle => angle * Math.PI / 180;\n\n/**\n *\n *\n * @param {*} newName\n * @param {*} oldName\n */\nconst replaceCSSPrefix = () => {\n // @todo\n};\n\n/**\n * Gets the interpolator function from d3 color\n *\n */\nconst interpolator = () => interpolate;\n\n/**\n * Gets the number interpolator from d3 color\n *\n */\nconst numberInterpolator = () => interpolateNumber;\n\n/**\n * Gets the rgb interpolator from d3 color\n *\n */\nconst colorInterpolator = () => interpolateRgb;\n\n/**\n * Gets the hsl interpolator from d3 color\n *\n */\nconst hslInterpolator = () => interpolateHslLong;\n\nconst transformColors = () => ({\n color,\n rgb,\n hsl\n});\n\n/**\n * Gets the piecewise interpolator from d3 color\n *\n */\nconst piecewiseInterpolator = () => piecewise;\n\nfunction hue2rgb (p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number l The lightness\n * @return Array The RGB representation\n */\nconst hslToRgb = (h, s, l, a = 1) => {\n let r;\n let g;\n let b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\n/**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nconst rgbToHsv = (r, g, b, a = 1) => {\n r = +r; g = +g; b = +b; a = +a;\n r /= 255; g /= 255; b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h;\n let s;\n const l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n h /= 6;\n }\n return [h, s, l, a];\n};\n\n/**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nconst hsvToRgb = (h, s, v, a = 1) => {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n\n return [r * 255, g * 255, b * 255, a];\n};\n\nconst hexToHsv = (hex) => {\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\n};\n\nconst RGBAtoRGB = (r, g, b, a, r2 = 255, g2 = 255, b2 = 255) => {\n const r3 = Math.round(((1 - a) * r2) + (a * r));\n const g3 = Math.round(((1 - a) * g2) + (a * g));\n const b3 = Math.round(((1 - a) * b2) + (a * b));\n return `rgb(${r3},${g3},${b3})`;\n};\n\nconst hslaToRgb = (h, s, l, a) => {\n const [r, g, b, a1] = hslToRgb(h, s, l, a);\n return RGBAtoRGB(r, g, b, a1);\n};\n\nconst detectColor = (col) => {\n const matchRgb = /rgb\\((\\d{1,3}), (\\d{1,3}), (\\d{1,3})\\)/;\n const matchHsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g;\n\n // Source : https://gist.github.com/sethlopezme/d072b945969a3cc2cc11\n // eslint-disable-next-line\n const matchRgba = /rgba?\\(((25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,\\s*?){2}(25[0-5]|2[0-4]\\d|1\\d{1,2}|\\d\\d?)\\s*,?\\s*([01]\\.?\\d*?)?\\)/;\n // eslint-disable-next-line\n const matchHsla = /^hsla\\(([\\d.]+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\n const matchHex = /^#([0-9a-f]{3}){1,2}$/i;\n\n if (matchRgb.test(col) || matchRgba.test(col)) {\n return 'rgb';\n } else if (matchHsl.test(col) || matchHsla.test(col)) {\n return 'hsl';\n } else if (matchHex.test(col)) {\n return 'hex';\n } return col;\n};\n\nfunction RGBAToHexA (rgba) {\n const sep = rgba.indexOf(',') > -1 ? ',' : ' ';\n rgba = rgba.substr(5).split(')')[0].split(sep);\n\n // Strip the slash if using space-separated syntax\n if (rgba.indexOf('/') > -1) { rgba.splice(3, 1); }\n\n for (const R in rgba) {\n const r = rgba[R];\n if (r.indexOf('%') > -1) {\n const p = r.substr(0, r.length - 1) / 100;\n\n if (R < 3) {\n rgba[R] = Math.round(p * 255);\n } else {\n rgba[R] = p;\n }\n }\n }\n\n let r = (+rgba[0]).toString(16);\n let g = (+rgba[1]).toString(16);\n let b = (+rgba[2]).toString(16);\n let a = Math.round(+rgba[3] * 255).toString(16);\n\n if (r.length === 1) { r = `0${r}`; }\n if (g.length === 1) { g = `0${g}`; }\n if (b.length === 1) { b = `0${b}`; }\n if (a.length === 1) { a = `0${a}`; }\n\n return `#${r}${g}${b}${a}`;\n}\n\nconst transformToHex = (datumStyle, colorType) => {\n if (colorType === 'rgb') {\n const [r, g, b, a] = datumStyle.replace(/[^\\d,]/g, '').split(',');\n const aa = a || 1;\n\n const rgbaString = `rgba(${r}, ${g}, ${b}, ${aa})`;\n return RGBAToHexA(rgbaString);\n }\n // Add methods to handle hsl and hex conversion\n return null;\n};\n\nconst assembleModelFromIdentifiers = (model, identifiers) => {\n let schema = [];\n let data;\n const fieldMap = model.getFieldsConfig();\n if (identifiers.length) {\n const fields = identifiers[0];\n const len = fields.length;\n for (let i = 0; i < len; i++) {\n const field = fields[i];\n const fieldObj = fieldMap[field] && Object.assign({}, fieldMap[field].def);\n if (fieldObj) {\n schema.push(Object.assign(fieldObj));\n }\n }\n\n data = [];\n const header = identifiers[0];\n for (let i = 1; i < identifiers.length; i += 1) {\n const vals = identifiers[i];\n const temp = {};\n vals.forEach((fieldVal, cIdx) => {\n temp[header[cIdx]] = fieldVal;\n });\n data.push(temp);\n }\n } else {\n data = [];\n schema = [];\n }\n\n return new model.constructor(data, schema);\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} criteria\n *\n */\nconst getDataModelFromRange = (dataModel, criteria, mode, criteriaFields) => {\n if (criteria === null) return null;\n const fieldsConfig = dataModel.getFieldsConfig();\n const selFields = criteriaFields || Object.keys(criteria).filter(d => d in fieldsConfig);\n const selFn = fields => selFields.every((field) => {\n const fieldValue = fields[field].internalValue;\n const range = criteria[field][0] instanceof Array ? criteria[field][0] : criteria[field];\n\n if (typeof range[0] === STRING) {\n return range.find(d => d === fieldValue) !== undefined;\n }\n\n if (range) {\n // Check if the selected bar value lies insid e the selection box\n return fieldValue >= range[0] && fieldValue <= range[1];\n }\n\n return false;\n });\n\n return dataModel.select(selFn, {\n saveChild: false,\n mode\n });\n};\n\nconst getArrayIndexMap = arr => arr.reduce((acc, value, i) => {\n acc[value] = i;\n return acc;\n}, {});\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} identifiers\n *\n */\nconst getDataModelFromIdentifiers = (dataModel, identifiers, mode, hasBarLayer) => {\n let filteredDataModel;\n if (identifiers instanceof Array) {\n const fieldsConfig = dataModel.getFieldsConfig();\n\n const dataArr = identifiers.slice(1, identifiers.length);\n if (identifiers instanceof Function) {\n filteredDataModel = identifiers(dataModel, {}, false);\n } else if (identifiers instanceof Array && identifiers[0].length) {\n const filteredSchema = identifiers[0].filter(d => d in fieldsConfig || d === ReservedFields.ROW_ID);\n filteredDataModel = dataModel.select((fields, rowId) => {\n let include = true;\n filteredSchema.forEach((propField, idx) => {\n const value = propField === ReservedFields.ROW_ID ? rowId : fields[propField].internalValue;\n const index = dataArr.findIndex(d => d[idx] === value);\n include = include && index !== -1;\n });\n return include;\n }, {\n saveChild: false,\n mode\n });\n } else {\n filteredDataModel = dataModel.select(() => false, {\n saveChild: false,\n mode\n });\n }\n } else {\n filteredDataModel = getDataModelFromRange(dataModel, identifiers, mode, hasBarLayer);\n }\n return filteredDataModel;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} listenerMap\n */\nconst registerListeners = (context, listenerMap, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\n const mapObj = propListenerMap[key];\n const propType = mapObj.type;\n const props = mapObj.props;\n const listenerFn = mapObj.listener;\n context.store()[propType](props, listenerFn, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\n */\nconst escapeHTML = (str) => {\n const htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n };\n const htmlEscaper = /[&<>\"'/]/g;\n return (`${str}`).replace(htmlEscaper, match => htmlEscapes[match]);\n};\n\n/**\n *\n *\n * @param {*} arr\n */\nconst transposeArray = arr => arr[0].map((col, i) => arr.map(row => row[i]));\nconst toArray = arr => (arr instanceof Array ? arr : [arr]);\nconst extendsClass = (cls, extendsFrom, found) => {\n if (!cls) {\n return false;\n }\n const prototype = cls.prototype;\n if (prototype instanceof extendsFrom) {\n found = true;\n } else {\n found = extendsClass(prototype, extendsFrom, found);\n }\n return found;\n};\n\n/**\n *\n * @param {*} dm1\n * @param {*} dm2\n */\nconst concatModels = (dm1, dm2) => {\n const dataObj1 = dm1.getData();\n const dataObj2 = dm2.getData();\n const data1 = dataObj1.data;\n const data2 = dataObj2.data;\n const schema1 = dataObj1.schema;\n const schema2 = dataObj2.schema;\n const tuples1 = {};\n const tuples2 = {};\n const commonTuples = {};\n for (let i = 0; i < data1.length; i++) {\n for (let ii = 0; ii < data2.length; ii++) {\n const row1 = data1[i];\n const row2 = data2[ii];\n const dim1Values = row1.filter((d, idx) => schema1[idx].type === FieldType.DIMENSION);\n const dim2Values = row2.filter((d, idx) => schema2[idx].type === FieldType.DIMENSION);\n const allDimSame = dim1Values.every(value => dim2Values.indexOf(value) !== -1);\n if (allDimSame) {\n const key = dim1Values.join();\n !commonTuples[key] && (commonTuples[key] = {});\n row1.forEach((value, idx) => {\n commonTuples[key][schema1[idx].name] = value;\n });\n row2.forEach((value, idx) => {\n commonTuples[key][schema2[idx].name] = value;\n });\n } else {\n const dm1Key = dim1Values.join();\n const dm2Key = dim2Values.join();\n if (!commonTuples[dm1Key]) {\n !commonTuples[dm1Key] && (commonTuples[dm1Key] = {});\n row1.forEach((value, idx) => {\n commonTuples[dm1Key][schema1[idx].name] = value;\n });\n }\n if (!commonTuples[dm2Key]) {\n !commonTuples[dm2Key] && (commonTuples[dm2Key] = {});\n row2.forEach((value, idx) => {\n commonTuples[dm2Key][schema2[idx].name] = value;\n });\n }\n }\n }\n }\n\n const commonSchema = [...schema1, ...schema2.filter(s2 => schema1.findIndex(s1 => s1.name === s2.name) === -1)];\n const data = [...Object.values(tuples1), ...Object.values(tuples2), ...Object.values(commonTuples)];\n return [data, commonSchema];\n};\n\nconst getSymbol = type => symbol().type(symbolFns[type]);\n\nconst stackOrders = {\n [STACK_CONFIG.ORDER_NONE]: stackOrderNone,\n [STACK_CONFIG.ORDER_ASCENDING]: stackOrderAscending,\n [STACK_CONFIG.ORDER_DESCENDING]: stackOrderDescending\n};\nconst stackOffsets = {\n [STACK_CONFIG.OFFSET_DIVERGING]: stackOffsetDiverging,\n [STACK_CONFIG.OFFSET_NONE]: stackOffsetNone,\n [STACK_CONFIG.OFFSET_EXPAND]: stackOffsetExpand,\n [STACK_CONFIG.OFFSET_WIGGLE]: stackOffsetWiggle\n};\n\n// eslint-disable-next-line require-jsdoc\nconst stack = params => d3Stack().keys(params.keys).offset(stackOffsets[params.offset])\n .order(stackOrders[params.order])(params.data);\n\n/**\n * Groups the data into a hierarchical tree structure based on one or more fields.\n * @param { Object } params Configuration properties for nesting data\n * @param { Array. } params.data Data which needs to be grouped\n * @param { Array. } params.keys Field indices by which the data will be grouped\n * @return { Array. } Grouped data array\n */\nconst nestCollection = (params) => {\n const nestFn = nest();\n params.keys.forEach(key => nestFn.key(d => d[key]));\n return nestFn.entries(params.data);\n};\n\n/**\n * Returns array difference, elements in array A, not in Array B\n * @param { Array. } arr Data which needs to be grouped\n * @param { Array. } arr1 Field indices by which the data will be grouped\n * @return { Array. } Returns the array difference (A - B)\n */\nconst getArrayDiff = (arr, arr1) => arr.filter(el => arr1.indexOf(el) < 0);\n\nconst pathInterpolators = {\n curveLinear,\n curveStepAfter,\n curveStepBefore,\n curveStep,\n curveCatmullRom,\n stepAfter: curveStepAfter,\n catmullRom: curveCatmullRom,\n step: curveStep,\n stepBefore: curveStepBefore,\n linear: curveLinear\n};\n\nconst Symbols = {\n axisLeft,\n axisRight,\n axisTop,\n axisBottom,\n line,\n area,\n pie,\n arc,\n nest\n};\n\nconst Scales = {\n band: scaleBand\n};\n\nconst getSmallestDiff = (points) => {\n points = points.sort((a, b) => a - b);\n let minDiff = points[1] - points[0];\n for (let i = 2; i < points.length; i++) {\n minDiff = Math.min(minDiff, points[i] - points[i - 1]);\n }\n\n return minDiff;\n};\n\nconst timeFormats = {\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n second: '%A, %b %e, %H:%M:%S',\n minute: '%A, %b %e, %H:%M',\n hour: '%A, %b %e, %H:%M',\n day: '%A, %b %e, %Y',\n month: '%B %Y',\n year: '%Y'\n};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\n};\n\nconst require = (lookupWhat, lookupDetails) => ({\n resolvable: (store) => {\n const lookupTarget = store[lookupWhat];\n const depArr = lookupDetails.slice(0, lookupDetails.length - 1);\n const fn = lookupDetails[lookupDetails.length - 1]; // fn\n\n const deps = depArr.map(str => lookupTarget[str]);\n return {\n fn: fn(...deps),\n depArr\n };\n }\n});\n\nconst nextAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, 16);\n };\n\nconst getValueParser = config => (val) => {\n if (InvalidAwareTypes.getInvalidType(val)) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\nconst sortingOrder = (a, b) => {\n const sortOrder = !(a instanceof InvalidAwareTypes || b instanceof InvalidAwareTypes)\n ? a.localeCompare(b)\n : 1;\n return sortOrder;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => sortingOrder(firstVal, secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => sortingOrder(secondVal, firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position|null if sort order is invalid\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n if (!sortOrderMap[sortOrder]) return null;\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nconst difference = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => !set.has(fn1(value)));\n};\n\nconst partition = (array, filterFn) => array.reduce((acc, v, i) => {\n const pass = filterFn(v, i, array);\n\n pass ? acc[0].push(v) : acc[1].push(v);\n return acc;\n}, [[], []]);\n\nconst mix = superclass => ({\n with: (...mixins) => mixins.reduce((cls, mixin) => mixin(cls), superclass)\n});\n\nconst componentRegistry = (comps) => {\n const reg = Object.assign({}, comps);\n const regObj = {\n register: (def, customKey) => {\n const key = customKey || def.formalName();\n\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n\n return regObj;\n};\n\nconst getReadableTicks = (domain, steps) => {\n // scaling the axis based on steps provided\n const orderedDomain = [Math.min(...domain), Math.max(...domain)];\n if (steps < 3) {\n return orderedDomain;\n }\n\n const tempScale = scales.scaleQuantize().domain(orderedDomain).nice();\n let tempAxis = null;\n let legendTicks = null;\n\n tempAxis = Symbols.axisBottom().scale(tempScale);\n\n legendTicks = tempAxis.scale().ticks(steps);\n\n if (Math.max(...legendTicks) < orderedDomain[1]) {\n // legendTicks.pop();\n legendTicks.push(orderedDomain[1]);\n }\n if (Math.min(...legendTicks) > orderedDomain[0]) {\n // legendTicks.shift();\n legendTicks.unshift(orderedDomain[0]);\n }\n return legendTicks;\n};\n\nconst RGBAToHSLA = (r, g, b, a = 1) => {\n // Make r, g, and b fractions of 1\n r /= 255;\n g /= 255;\n b /= 255;\n\n // Find greatest and smallest channel values\n const cmin = Math.min(r, g, b);\n const cmax = Math.max(r, g, b);\n const delta = cmax - cmin;\n let h = 0;\n let s = 0;\n let l = 0;\n\n // Calculate hue\n // No difference\n if (delta === 0) {\n h = 0;\n } else if (cmax === r) {\n // Red is max\n h = ((g - b) / delta) % 6;\n } else if (cmax === g) {\n // Green is max\n h = (b - r) / delta + 2;\n } else {\n // Blue is max\n h = (r - g) / delta + 4;\n }\n h = Math.round(h * 60);\n\n // Make negative hues positive behind 360°\n if (h < 0) { h += 360; }\n // Calculate lightness\n l = (cmax + cmin) / 2;\n // Calculate saturation\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n // Multiply l and s by 100\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n\n return {\n color: `hsla(${h},${s}%,${l}%,${a})`,\n code: [h, s, l, a]\n };\n};\n\nconst transformColor = (rgbaValues, { h = 0, s = 0, l = 0, a }, datum, apply) => {\n const [origH, origS, origL, origA] = RGBAToHSLA(...rgbaValues).code;\n const sanitizedA = parseFloat(a || origA, 10);\n const newH = origH + h;\n const newS = origS + s;\n const newL = origL + l;\n let newA = sanitizedA + 1;\n\n if (!apply) {\n newA = sanitizedA - 1;\n }\n\n const finalcolor = {\n color: `hsla(${newH},${newS}%,${newL}%,${newA})`,\n hsla: [newH, newS, newL, newA]\n };\n return finalcolor;\n};\n\nconst pointWithinCircle = (c, point) => {\n const { x: cx, y: cy, r } = c;\n const { x, y } = point;\n\n const dist = Math.sqrt((cx - x) ** 2 + (cy - y) ** 2);\n return dist <= r;\n};\n\n/**\n * Generates a function which performs an intersection (dataModel select)\n * operation for multiple fields\n * @param {Array} targetData - Nested array with field and values in the format:\n * [\n * [field1, field2]\n * [val1, val2]\n * ]\n * @param {Object} dm - The dataModel instance\n * @return {Function} filter function\n */\nconst dmMultipleSelection = (targetData, dm) => {\n const targetFields = targetData[0];\n const targetVals = targetData.slice(1, targetData.length);\n const payloadMap = targetVals.reduce((acc, v) => {\n acc[v] = v;\n return acc;\n }, {});\n const measures = Object.keys(dm.getFieldspace().getMeasure());\n\n const filterFn = (fields, i) => {\n const row = `${targetFields.map((field) => {\n let val;\n if (field === ReservedFields.MEASURE_NAMES) {\n val = measures;\n } else if (field === ReservedFields.ROW_ID) {\n val = i;\n } else {\n const currentField = fields[field];\n const isFieldInvalid = currentField instanceof InvalidAwareTypes;\n\n val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue;\n }\n return val;\n })}`;\n return row in payloadMap;\n };\n return filterFn;\n};\n\nconst getIndexMap = (arr, prop) => arr.reduce((acc, v, i) => {\n const key = prop ? v[prop] : v;\n acc[key] = i;\n return acc;\n}, {});\n\nexport {\n getIndexMap,\n arraysEqual,\n componentRegistry,\n mix,\n partition,\n getArrayIndexMap,\n getValueParser,\n require,\n intersect,\n difference,\n Scales,\n Symbols,\n pathInterpolators,\n stack,\n nestCollection,\n getArrayDiff,\n getSymbol,\n transformColor,\n transformColors,\n detectColor,\n hexToHsv,\n hslToRgb,\n rgbToHsv,\n transformToHex,\n hsvToRgb,\n hslaToRgb,\n concatModels,\n toArray,\n angleToRadian,\n escapeHTML,\n generateGetterSetters,\n getArraySum,\n interpolator,\n piecewiseInterpolator,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n colorInterpolator,\n numberInterpolator,\n ERROR_MSG,\n reqAnimFrame,\n nextAnimFrame,\n transposeArray,\n cancelAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n symbolFns,\n easeFns,\n unique,\n clone,\n isEqual,\n interpolateArray,\n getMinPoint,\n defaultValue,\n getMaxPoint,\n getClosestIndexOf,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isSimpleObject,\n nextFrame,\n registerListeners,\n replaceCSSPrefix,\n getObjProp,\n extendsClass,\n assembleModelFromIdentifiers,\n isValidValue,\n hslInterpolator,\n getSmallestDiff,\n getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n getReadableTicks,\n dmMultipleSelection,\n pointWithinCircle\n};\n","export function linear(t) {\n return +t;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {event} from \"./selection/on\";\n\nexport default function() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n event.stopImmediatePropagation();\n}\n\nexport default function() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import { select, event as d3event, selection, clientPoint } from 'd3-selection';\nimport { drag as d3drag } from 'd3-drag';\nimport 'd3-transition';\nimport { mergeRecursive } from './common-utils';\n/**\n * This function takes a raw DOM element or\n * a string and returns a d3 selection of that element.\n *\n * @param {HTMLElement | string} element The element to wrap in d3 selection.\n * @return {Selection} Instance of d3 selection.\n */\nconst selectElement = element => select(element);\n\n/**\n * It creates a new d3 element on the parent element\n * @param {Selection} parent Element to which the element is to be appended\n * @param {Object} elemType Type of the new element\n * @param {Array} data Data for the new element\n * @param {Object} selector classname/id/tagname for the element\n * @return {HTMLElement} Newly Created Element\n */\nconst makeElement = (parent, elemType, data, selector, callbacks = {}, keyFn) => {\n if ((parent instanceof HTMLElement || parent instanceof SVGElement)) {\n parent = selectElement(parent);\n }\n\n const selectorVal = selector ? selector[0] : null;\n let selectorType = null;\n let actualSelector = null;\n let element = null;\n let enterSel = null;\n let mergeSel = null;\n let filter;\n if (selectorVal) {\n if (selectorVal === '#') {\n selectorType = 'id';\n actualSelector = selector;\n } else {\n selectorType = 'class';\n actualSelector = selector[0] === '.' ? selector : `.${selector}`;\n }\n } else {\n actualSelector = elemType;\n filter = true;\n }\n element = parent.selectAll(actualSelector);\n\n filter && (element = element.filter(function () {\n return this.parentNode === parent.node();\n }));\n element = element.data(data, keyFn);\n\n enterSel = element.enter()\n .append(elemType || 'div');\n callbacks.enter && enterSel.each(function (...params) {\n callbacks.enter(selectElement(this), ...params);\n });\n\n mergeSel = enterSel.merge(element);\n callbacks.update && mergeSel.each(function (...params) {\n callbacks.update(selectElement(this), ...params);\n });\n if (selectorType === 'class') {\n mergeSel.classed(selectorVal === '.' ? selector.substring(1, selector.length) : selector, true);\n } else if (selectorType === 'id') {\n mergeSel.attr('id', selector.substring(1, selector.length));\n }\n const exitSel = element.exit();\n\n if (callbacks.exit) {\n exitSel.each(function (...params) {\n callbacks.exit(selectElement(this), ...params);\n });\n } else {\n exitSel.remove();\n }\n return mergeSel;\n};\n\n/**\n * This function applies styles to an element\n * @param {Object} elem Element Selection\n * @param {Object} styleObj Style Object to be applied\n * @return {Element} Newly Created Element\n*/\nconst applyStyle = (elem, styleObj) => {\n Object.entries(styleObj).forEach((d) => {\n elem.style(d[0], d[1]);\n }, this);\n return elem;\n};\n\n/**\n * This function appends a dom element in another element.\n * @param {HTMLElement | SVGElement} element1 The element in which to append the second element\n * @param {HTMLElement | SVGElement} element2 The element which will be appended.\n */\nconst appendElement = (element1, element2) => {\n element1.appendChild(element2);\n};\n\n/**\n * Sets the attributes to the element.\n * @param {HTMLElement | SVGElement} element Element on which attributes will be applied\n * @param {Object} attrs Attributes which need to be applied\n */\nconst setElementAttrs = (element, attrs) => {\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n element.attr(key, attrs[key]);\n }\n }\n};\n\n/**\n * Sets attributes in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which attrs will be applied\n * @param {Array.} attrs Array of attributes\n * @param {string} className className of elements to select.\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setAttrs = (element, attrs, className) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n className !== undefined ? element.selectAll(`.${className}`).each(function () {\n setElementAttrs(select(this), attrs);\n }) : setElementAttrs(element, attrs);\n return element;\n};\n\n/**\n * Adds a css class to elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst addClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, true) :\n elem.classed(className, true);\n });\n};\n\n/**\n * Removes the css class from elements which passes the filter function.If filter function is not given,\n * then all elements will be applied the class.\n * @param {HTMLElement | SVGElement} element element\n * @param {string} className css class\n * @param {string} selector css selector\n * @param {Function} filterFn filter method.\n */\nconst removeClass = (element, className, selector, filterFn) => {\n select(element).selectAll(selector).each(function (data) {\n const elem = select(this);\n filterFn ? filterFn(data) && elem.classed(className, false) :\n elem.classed(className, false);\n });\n};\n\n/**\n * Sets styles in the svg or html element\n * @param {SVGElement | HTMLElement} element The element on which styles will be applied\n * @param {Array.} styles Array of style attributes\n * @return {SVGElement | HTMLElement} SVGElement or html element.\n */\nconst setStyles = (element, styles) => {\n if (!(element instanceof selection)) {\n element = selectElement(element);\n }\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n element.style(key, styles[key]);\n }\n }\n return element;\n};\n\n/**\n * Creates svg or html elements by binding data to the selection.Removes extra elements\n * on exit.\n * @param {Object} params Parameter object\n * @param {SVGElement | HTMLElement} params.container Container element where all elements will be appended\n * @param {string} params.selector Selector by which elements will be selected from dom\n * @param {string} params.append Append tag\n * @param {Function} params.each Function which will be executed for each data point and element.\n */\nconst createElements = (params) => {\n const container = select(params.container);\n let data;\n\n data = params.data;\n if (typeof data === 'number') {\n data = Array(data).fill().map((d, i) => i);\n }\n const sel = container.selectAll(params.selector).filter(function () {\n return this.parentNode === container.node();\n }).data(data);\n\n const selectionMerge = sel.enter().append(params.append).merge(sel).each(function (d, i) {\n params.each(d, select(this), i);\n });\n\n selectionMerge.attr('class', params.className || '');\n sel.exit().remove();\n};\n\n/**\n * Clips an element with given measurement. Basically it is used to hide overflowing portions\n * of any element.\n * @param {SVGElement} container svg element which needs to be clipped.\n * @param {Object} measurement Dimensions of the clipped rectangle.\n * @param {string} id Unique id of the clip element\n */\nconst clipElement = (container, measurement, id) => {\n const clipPathElement = makeElement(select(container), 'clipPath', [1], `#${id}`);\n const clipPathRect = makeElement(clipPathElement, 'rect', [1]);\n clipPathRect.attr('x', measurement.x)\n .attr('y', measurement.x)\n .attr('width', measurement.width)\n .attr('height', measurement.height);\n clipPathElement.attr('clip-path', `url(#${id})`);\n};\n\n/**\n * Returns the element of the corresponding classname.\n * @param {HTMLElement | SVGElement} node html or svg node element.\n * @param {string} className css class to be applied.\n * @return {HTMLElement | SVGElement} html or svg element.\n */\nconst getElementsByClassName = (node, className) => select(node).selectAll(className).nodes();\n\n/**\n * Gets the mouse position relative to an svg type of element\n * @param {SVGElement} element Any svg element like rect, circle, etc.\n * @param {Event} event Event object.\n * @return {Object} x and y position relative to the container element passed.\n */\nconst getMousePos = (element, event) => {\n const boundingClientRect = element.getBoundingClientRect();\n return {\n x: event.x - boundingClientRect.x,\n y: event.y - boundingClientRect.y\n };\n};\n\nconst getClientPoint = (...params) => {\n const pos = clientPoint(...params);\n return {\n x: pos[0],\n y: pos[1]\n };\n};\n\n/** This function appends a dom element in another element.\n * @param {Object} tag The tag name of the element to append\n * @param {Object} mount Mount point fo the element\n * @return {Object} selection of the appended element\n */\nconst createElement = (tag, mount) => select(mount).append(tag).node();\n\n/**\n * Gets the d3 event function\n * @return {Object} d3 event\n */\nconst getEvent = () => d3event;\n\n/**\n * Gets the d3 drag function\n * @return {Object} d3 drag\n */\nconst getD3Drag = () => d3drag;\n\nconst getSmartComputedStyle = (group, css) => {\n let textEl;\n const testText = 'W';\n const mandatoryStyle = {\n 'fill-opacity': 0\n };\n const className = typeof css === 'string' ? css : (css instanceof Array ? css.join(' ') : undefined);\n\n if (group.node() instanceof HTMLElement) {\n textEl = group.append('div').html(testText);\n } else {\n textEl = group.append('text').text(testText);\n }\n\n if (className) {\n textEl.attr('class', className);\n } else if (typeof css === 'object') {\n delete css['fill-opacity'];\n mergeRecursive(mandatoryStyle, css);\n }\n\n textEl.style(mandatoryStyle);\n const computedStyle = window.getComputedStyle(textEl.node());\n const styleForSmartLabel = {\n fontSize: computedStyle.fontSize,\n fontFamily: computedStyle.fontFamily,\n fontWeight: computedStyle.fontWeight,\n fontStyle: computedStyle.fontStyle\n };\n\n textEl.remove();\n\n return styleForSmartLabel;\n};\n\nconst hasTouch = () => 'ontouchstart' in document.documentElement;\n\nexport {\n hasTouch,\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint\n};\n","import Model from 'hyperdis';\nimport { defaultValue, getObjProp, toArray } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\n }\n};\n\n/**\n * Methods to handle changes to table configuration and reactivity are handled by this\n * class.\n */\n/**\n * Common store class\n *\n * @class Store\n */\nexport class Store {\n /**\n * Creates an instance of Store.\n * @param {Object} config The object to create the state store with.\n * @memberof Store\n */\n constructor (config) {\n // create reactive model\n this.model = Model.create(config);\n this._listeners = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\n }\n\n /**\n * This method returns a plain JSON object\n * with all the fields in the state store.\n *\n * @return {Object} Serialized representation of state store.\n * @memberof Store\n */\n serialize () {\n return this.model.serialize();\n }\n\n lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\n }\n\n /**\n * This method is used to update the value of a property in the state store.\n *\n * @param {string} propName The name of the property.\n * @param {number} value The new value of the property.\n * @memberof Store\n */\n commit (propName, value, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */registerChangeListener (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback that will execute\n * when one or more properties change.\n *\n * @param {string | Array} propNames name of property or array of props.\n * @param {Function} callBack The callback to execute.\n * @memberof Store\n */\n /* istanbul ignore next */ registerImmediateListener (...params) {\n registerListener(this, 'on', ...params);\n }\n\n /**\n * This method is used to get the name of the property\n * from the state store.\n *\n * @param {string} propName The name of the field in state store.\n * @return {any} The value of the field.\n * @memberof Store\n */\n get (propName, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\n }\n\n /**\n * This method is used to register a computed property that is computed every time\n * the store value changes.\n *\n * @param {string} propName The name of the property to create.\n * @param {Function} callBack The function to execute when depemdent props change.\n * @memberof Store\n */\n computed (propName, callBack) {\n return this.model.calculatedProp(propName, callBack);\n }\n\n append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\n}\n\n/**\n * Setter getter creator from config\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args. (Optional)\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitization: // Need for sanitization before type is checked\n * }\n * }\n *\n * @param {Object} holder an empty object on which the getters and setters will be mounted\n * @param {Object} options options config based on which the getters and setters are determined.\n * @param {Hyperdis} model optional model to attach the property. If not sent new moel is created.\n * @return {Array}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n const paramsLen = params.length;\n if (paramsLen) {\n const { takesMultipleParams = false } = meta || {};\n // If parameters are passed then it's a setter\n let val = takesMultipleParams ? params : params[0];\n\n if (meta) {\n let values;\n const prevVal = context.get(nsProp, subNamespace);\n const { sanitization, typeCheck, typeExpected } = meta;\n if (typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n const typeCheckResult = typeCheck(val);\n\n if (typeCheckResult) {\n values = val;\n }\n } else if (typeof typeCheck === 'string' && typeCheck === 'constructor') {\n if (val && val.constructor.name === typeExpected) {\n values = val;\n }\n } else {\n values = val;\n }\n\n const preset = meta.preset;\n const oldValues = toArray(context.get(nsProp, subNamespace));\n preset && preset(values, holder);\n if (takesMultipleParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values && context.commit(nsProp, values, subNamespace);\n } else {\n context.commit(nsProp, val, subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, Array.isArray(conf.value));\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\n];\n\nconst compositions = [\n 'canvas',\n 'unit',\n 'layer',\n 'axis',\n 'facet-headers',\n 'legend',\n 'caption'\n];\n\nconst EVENT_LIST = [];\n\ncompositions.forEach((composition) => {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\n\n/**\n * At first call it accepts one function\n * calling it second time accepts notification object.\n * notification object then called with first accepted function\n *\n * @param {Function} resolveFn a promise's resolve function\n * @return {Function} a function to accept notification object\n */\nconst resolver = resolveFn => notification => resolveFn(notification);\n\n/**\n * Checks if the property string is present in the source object\n *\n * @param {Object} source source object whom you want to check the property\n * @param {string} property key name that need to be checked\n * @return {boolean} returns true if the property found in the source object\n */\nconst hasOwn = (source, property) => Object.prototype.hasOwnProperty.call(source, property);\n\n/**\n * LifeCycleManager which goes as a dependendecy to a muze\n * it accepts notification from the entire library throughout\n * the exeecution life\n *\n * @export\n * @class LifeCycleManager\n */\nexport default class LifeCycleManager {\n\n /**\n * Creates an instance of LifeCycleManager.\n * @memberof LifeCycleManager\n */\n constructor () {\n this._eventList = EVENT_LIST;\n this._promises = new Map();\n this._notifiers = {};\n this._lifeCycles = {};\n this._unreleasedLifeCycles = {};\n this._boot();\n }\n\n /**\n * Fills all the notifiers with resolver callback\n *\n * @memberof LifeCycleManager\n */\n _boot () {\n this._notifiers = this._eventList.reduce((acc, name) => {\n acc[name] = resolver;\n return acc;\n }, {});\n this._preparePromises();\n }\n\n /**\n * Public method which gives the promise corresponding\n * to the event name\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} promise that is passed to the user\n * @memberof LifeCycleManager\n */\n retrieve (eventName) {\n return this._promises.get(eventName);\n }\n\n /**\n * Creates a promise that will be passed to user's callback\n *\n * @param {string} eventName name of the event like `canvas.drawn`\n * @return {promise} a pending promise waiting for resolve to be called\n * @memberof LifeCycleManager\n */\n _makeNotifierPromise (eventName) {\n return new Promise((resolve) => {\n this._notifiers[eventName] = resolver(resolve);\n });\n }\n\n /**\n * Prepares the promise map with pending promises\n * all the promises are in a pending state where their's\n * resolve function waiting to be called with notification object\n * @memberof LifeCycleManager\n */\n _preparePromises () {\n this._eventList.forEach((eventName) => {\n const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\n });\n }\n\n /**\n * Resolves the promise with notification object\n *\n * @param {string} eventName name of the event in the system\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n *\n * @memberof LifeCycleManager\n */\n _resolvePromise (eventName, notification) {\n this._notifiers[eventName](notification);\n }\n\n /**\n * Public method which is being called by different\n * subcompoents of the system at different execution atages\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n notify (notification) {\n // get the composition name from notification\n // or from static formalName() method\n const composition = notification.formalName || notification.client.constructor.formalName();\n notification.formalName = composition;\n this._releasePromisesFromCache();\n this._notify(composition, notification);\n }\n\n /**\n * Notify user the with promsie in a callback\n * if callback not found then cache it\n *\n * @param {string} composition\n * @param {Object} notification notification object\n * @param {string} notification.formalName name of the sender creating the notification\n * @param {Object} notification.client instance or array of instances sending the notification\n * @param {string} notification.action the stage name when the event happened like `beforedraw`\n * @memberof LifeCycleManager\n */\n _notify (composition, notification) {\n const stage = notification.action;\n const eventName = `${composition}.${stage}`;\n\n // resolves promise with the notification object\n this._resolvePromise(eventName, notification);\n\n // get the promise from the promise map\n const promise = this.retrieve(eventName);\n\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // if user given call back exists, then call with promise\n this._callLifeCycleCallback(composition, stage, promise);\n } else {\n // otherwise cache the promise\n this._cachePromise(composition, stage, promise);\n }\n } else {\n this._cachePromise(composition, stage, promise);\n }\n }\n\n /**\n * Calls the user's callback with callback\n *\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _callLifeCycleCallback (composition, stage, promise) {\n const eventName = `${composition}.${stage}`;\n this._lifeCycles[composition][stage](promise);\n this._resetTargetPromise(eventName);\n }\n\n /**\n * Try to clear the cached promsies once we have\n * macthed callbacks from the user\n *\n * @memberof LifeCycleManager\n */\n _releasePromisesFromCache () {\n const compositions = Object.keys(this._unreleasedLifeCycles);\n compositions.forEach((composition) => {\n const stages = Object.keys(this._unreleasedLifeCycles[composition]);\n stages.forEach((stage) => {\n if (this._lifeCycles[composition]) {\n if (this._lifeCycles[composition][stage]) {\n // take the promise from unreleased lifeCycles\n const promise = this._unreleasedLifeCycles[composition][stage];\n // call the user given callback with that promise\n this._callLifeCycleCallback(composition, stage, promise);\n // delete promise from unreleased lifeCycles\n delete this._unreleasedLifeCycles[composition][stage];\n }\n }\n });\n });\n }\n\n /**\n * Cache the promise in the map. This cache\n * then get consumed if we get user callbacks\n * @param {string} composition name of the compositon like `canvas`\n * @param {string} stage the stage name when the event happened like `beforedraw`\n * @param {promise} promise promise that is passed to the user\n * @memberof LifeCycleManager\n */\n _cachePromise (composition, stage, promise) {\n if (!hasOwn(this._unreleasedLifeCycles, composition)) {\n this._unreleasedLifeCycles[composition] = {};\n }\n\n if (!hasOwn(this._unreleasedLifeCycles[composition], stage)) {\n this._unreleasedLifeCycles[composition][stage] = {};\n }\n this._unreleasedLifeCycles[composition][stage] = promise;\n }\n\n /**\n * It register's the callbacks gievn the user\n *\n * @param {Object} [lifeCycles={}] a object with list of callbacks\n * @memberof LifeCycleManager\n */\n register (lifeCycles = {}) {\n this._lifeCycles = lifeCycles;\n // as we get all the callbacks, try to call them\n // from unreleased promise map\n this._releasePromisesFromCache();\n }\n\n /**\n * Reset the promise into pending state\n *\n * @param {string} eventName name of the event happening\n * @memberof LifeCycleManager\n */\n _resetTargetPromise (eventName) {\n setTimeout(() => {\n this._notifiers[eventName] = resolver;\n this._promises.set(eventName, this._makeNotifierPromise(eventName));\n }, 0);\n }\n}\n","import LifeCycleManager from './lifecycle-manager';\n\nexport default LifeCycleManager;\n","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\nimport RTree from './r-tree';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColor,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n hslaToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect,\n partition,\n mix,\n componentRegistry,\n getArrayDiff,\n difference,\n getArrayIndexMap,\n arraysEqual,\n getReadableTicks,\n unique,\n dmMultipleSelection,\n pointWithinCircle,\n getIndexMap\n} from './common-utils';\n\nexport {\n selectElement,\n makeElement,\n applyStyle,\n addClass,\n removeClass,\n appendElement,\n setAttrs,\n setStyles,\n createElement,\n createElements,\n clipElement,\n getElementsByClassName,\n getMousePos,\n getEvent,\n getD3Drag,\n getSmartComputedStyle,\n getClientPoint,\n hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\nexport {\n RTree\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const STACK = 'stack';\nexport const GROUP = 'group';\nexport const IDENTITY = 'identity';\nexport const ANGLE = 'angle';\nexport const RADIUS = 'radius';\nexport const SIZE = 'size';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const TEXT = 'text';\nexport const OUTER_RADIUS_VALUE = 'outerRadiusValue';\nexport const TEXT_ANCHOR_MIDDLE = 'middle';\nexport const ENCODING = {\n X: 'x',\n Y: 'y',\n X0: 'x0',\n Y0: 'y0',\n RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0',\n COLOR: 'color',\n SHAPE: 'shape',\n SIZE: 'size',\n TEXT: 'text'\n};\n\nexport const STROKE_DASHARRAY = 'stroke-dasharray';\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\n\nexport const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * This is an interface class which any new layer class has to extend.\n *\n * @example\n * class BarLayer extends BaseLayer {\n * update (params) {\n * // super.update(params);\n * // Update the bar layer\n * }\n * }\n * @class\n */\nexport default class SimpleLayer {\n\n formalName () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets or gets the dependencies.\n * @param {Object} dependencies Dependencies needed by layer\n * @return {BaseLayer} Instance of base layer.\n */\n dependencies () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the config of the layer\n *\n * @param {Object} config Configuration of layer\n * @return {Object} configuration of layer\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Acts as a getter or setter function\n * When setter\n * Returns the datamodel of the layer\n * @param { DataModel } dataModel instance of DataModel\n * @return { DataModel } DataModel instance of the layer\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized schema of the layer\n * @return {Object} Serialized schema\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the unique identifier of this layer\n * @return {string} id of the layer\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n /*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldMap field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n * @private\n */\n normalizeTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of dataModel\n * @param {Object} config configuration for transforming data\n * @return {Array.} Transformed data.\n * @private\n */\n getTransformedData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a nominal field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @return {Array} Domain values array.\n */\n _calculateDomainFromData () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, color, etc.\n * @return {Object} Axis domains\n */\n getDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for getting nearest point\n * @return {BaseLayer} Instance of base layer\n */\n getNearestPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for highlighting points\n * @return {BaseLayer} Instance of base layer\n */\n highlightPoint () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Abstract method for deselecting points\n * @return {BaseLayer} Instance of base layer\n */\n dehighlightPoint () {\n return this;\n }\n\n linkLayerStore () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Sets the container element for the layer to be renderered.\n * @param {SVGElement} mountPoint SVG element or group element.\n */\n mount () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\n","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n },\n encodingTransform: {},\n encodingFieldsInf: {},\n dependencies: {},\n dataProps: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { Symbols } from 'muze-utils';\nimport * as AxisOrientation from '../enums/axis-orientation';\n\n/**\n * @module Axis\n * This file exports constants that are used to reference axis orientations\n * in a consistent manner.\n */\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\n\n/**\n * This object is used to associate the axis orientation with the d3 class\n * used to represent that axis.\n */\nexport const axisOrientationMap = {\n [AxisOrientation.LEFT]: Symbols.axisLeft,\n [AxisOrientation.BOTTOM]: Symbols.axisBottom,\n [AxisOrientation.RIGHT]: Symbols.axisRight,\n [AxisOrientation.TOP]: Symbols.axisTop\n};\n","/**\n * @module axis\n * This file exports constants used to reference scale type\n * consistently throughout the project.\n */\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const TIME = 'temporal';\nexport const COLOR = 'color';\nexport const ORDINAL = 'ordinal';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\nexport const LOG = 'log';\nexport const POW = 'pow';\nexport const IDENTITY = 'identity';\nexport const SEQUENTIAL = 'sequential';\nexport const THRESHOLD = 'threshold';\n","export const CLASSPREFIX = 'muze';\n\nexport const CONTINOUS = 'continous';\nexport const DISCRETE = 'discrete';\nexport const SEQUENTIAL = 'sequential';\nexport const ORDINAL = 'ordinal';\nexport const LINEAR = 'linear';\nexport const BAND = 'band';\nexport const THRESHOLD = 'threshold';\nexport const QUANTIZE = 'quantize';\nexport const QUANTILE = 'quantile';\n\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\n\nexport const DOMAIN = 'domain';\nexport const HIDDEN = 'hidden';\nexport const NUMBER = 'number';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\n\nexport const RGB = 'rgb';\nexport const HEX = 'hex';\nexport const HSLA = 'hsla';\nexport const HSL = 'hsl';\n\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\n\n","import { scales, colorSchemes } from 'muze-utils';\n\nimport {\n SEQUENTIAL,\n ORDINAL,\n LINEAR,\n CONTINOUS,\n THRESHOLD,\n QUANTIZE\n} from './enums/constants';\n\nimport * as ScaleType from './enums/scale-type';\n\nconst {\n scaleLinear,\n scaleThreshold,\n scaleLog,\n scalePow,\n scaleIdentity,\n scaleOrdinal,\n scaleSequential,\n scaleQuantize,\n scaleQuantile,\n schemeCategory10,\n schemeCategory20,\n schemeCategory20b,\n scaleBand,\n scaleTime\n} = scales;\nexport const scaleMap = {\n [ScaleType.LINEAR]: scaleLinear,\n [ScaleType.BAND]: scaleBand,\n [ScaleType.QUANTIZE]: scaleQuantize,\n [ScaleType.QUANTILE]: scaleQuantile,\n [ScaleType.THRESHOLD]: scaleThreshold,\n [ScaleType.SEQUENTIAL]: scaleSequential,\n [ScaleType.LOG]: scaleLog,\n [ScaleType.POW]: scalePow,\n [ScaleType.IDENTITY]: scaleIdentity,\n [ScaleType.TIME]: scaleTime,\n [ScaleType.COLOR]: scaleLinear,\n [ScaleType.ORDINAL]: scaleOrdinal\n};\nexport const SCHEMES = {\n SCHEME1: schemeCategory10,\n SCHEME2: schemeCategory20,\n SCHEME3: schemeCategory20b\n};\n\n/**\n * Accepts a scheme in a string format and returns the scale from d3-scale-chromatic\n *\n * @export\n * @param {string} scheme a string representing the kind of scheme for the color axis\n * @return {Object} The corresponding scale from a scheme type from d3 chromatic scale\n */\nexport function getScheme (scheme) {\n if (scheme[0] === 'i') {\n return scaleSequential(colorSchemes[scheme]);\n }\n return scaleOrdinal(colorSchemes[scheme]);\n}\n\n/**\n *\n *\n * @export\n * @param {*} scheme\n *\n */\nexport function getSchemeType (scheme) {\n let schemeType = '';\n if (scheme && typeof (scheme) === 'string') {\n schemeType = scheme[0] === 'i' ? SEQUENTIAL : ORDINAL;\n } else {\n schemeType = ORDINAL;\n }\n return schemeType;\n}\n\n/**\n * This function is used to create a scale that is assigned to\n * an instance of axis.\n *\n * @export\n * @param {Object} params the input parameters to create a Scale object\n * @param {string} params.type the type of scale\n * @param {Array} params.range the range of scale\n * @return {Object} instance of scale\n */\nexport function createScale (params) {\n if (!params.type || !scaleMap[params.type]) {\n throw new Error(`${params.type} is not a valid scale type`);\n }\n if (!Array.isArray(params.range)) {\n throw new Error('range parameter must be an array');\n }\n let scaleFactory = null;\n const range = params.range;\n // @todo: do it using scale decorator\n if (params.type === LINEAR && params.interpolator) {\n scaleFactory = scaleMap[params.interpolator];\n if (params.interpolator === ScaleType.POW) {\n return scaleFactory().range(range).exponent(params.exponent);\n } else if (params.interpolator === ScaleType.LOG) {\n return scaleFactory().range(range).base([params.base]);\n }\n } else {\n scaleFactory = scaleMap[params.type];\n }\n\n if (params.type === QUANTIZE) {\n scaleFactory().nice();\n }\n return scaleFactory().range(range);\n}\n\n/**\n * This method is used to update the range of a scale\n * so that the core module can remain agnostic of the d3\n * scale api.\n *\n * @export\n * @param {Scale} scale Instance of d3 Scale.\n * @param {Array} range new range of the scale.\n * @return {Scale} Updated scale.\n */\nexport function updateScaleRange (scale, range) {\n return scale.range(range);\n}\n\n/**\n *\n *\n * @export\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} steps\n *\n */\nexport function getScaleType (domainType, rangeType, steps) {\n if (rangeType === CONTINOUS) {\n return LINEAR;\n }\n if (domainType === CONTINOUS) {\n if (steps instanceof Array) {\n return THRESHOLD;\n }\n return QUANTIZE;\n }\n return ORDINAL;\n}\n","import { getUniqueId } from 'muze-utils';\nimport { CLASSPREFIX } from '../enums/constants';\n\n/**\n *\n *\n */\nexport const defaultConfig = {\n id: getUniqueId(),\n adjustRange: false,\n axisName: {\n defClassName: 'axis-name'\n },\n axisNamePadding: 7,\n base: 10,\n classPrefix: CLASSPREFIX,\n className: `${CLASSPREFIX}-axis`,\n exponent: 1,\n interpolator: 'linear',\n fixedBaseline: true,\n labels: {\n rotation: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0,\n defaultSort: 'asc'\n};\n\n","/**\n * This file exports functionality that is used to render axis.\n */\nimport { selectElement, makeElement, angleToRadian } from 'muze-utils';\nimport * as AxisOrientation from './enums/axis-orientation';\nimport { LINEAR, HIDDEN, BOTTOM, TOP } from './enums/constants';\n\n/**\n *\n *\n * @param {*} instance\n * @param {*} container\n * @param {*} labelManager\n * @param {*} config\n */\nconst rotateAxis = (instance, tickText, labelManager) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\n const width = tickLabelDim.width * 0.5;\n const height = tickLabelDim.height * 0.5;\n\n if (rotation < 0) {\n rotation = 360 + rotation;\n }\n\n const quadrant = 4 - Math.floor(rotation / 90);\n const rotationNormalizer = ((quadrant % 2 === 0) ? rotation : 180 * Math.ceil(rotation / 180) - rotation) % 180;\n\n yShift = Math.sqrt(height ** 2 + width ** 2) * Math.sin(angleToRadian(rotationNormalizer));\n\n if ((quadrant === 3 || quadrant === 2) && !(rotationNormalizer > 67.5 && rotationNormalizer <= 90)) {\n yShift += height * 2;\n }\n xShift = width;\n\n if (rotation === 90) {\n xShift = height;\n } else if (rotation === 270) {\n xShift = -height;\n } else {\n xShift = 0;\n }\n\n if (orientation === AxisOrientation.TOP) {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n // selectElement(this).transition()\n // .duration(1000).text(datum);\n });\n return tickText;\n};\n\n/**\n *\n *\n * @param {*} tickText\n * @param {*} axisInstance\n */\nconst changeTickOrientation = (selectContainer, axisInstance, tickSize) => {\n const {\n _smartTicks\n } = axisInstance;\n const config = axisInstance.config();\n const renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\n const {\n rotation,\n smartTicks: isSmartTicks\n } = labels;\n\n const tickText = selectContainer.selectAll('.tick text');\n tickText.selectAll('tspan').remove();\n\n // rotate labels if not enough space is available\n if (rotation && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\n axisInstance.setFixedBaseline();\n }\n};\n\n/**\n *\n *\n * @param {*} textNode\n * @param {*} orientation\n * @param {*} measures\n */\nconst setAxisNamePos = (textNode, orientation, measures) => {\n const {\n axisNameHeight,\n availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(90)`);\n break;\n case AxisOrientation.TOP:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${-availableSpace.height + axisNameHeight})`);\n break;\n case AxisOrientation.BOTTOM:\n textNode.attr('transform',\n `translate(${availableSpace.width / 2},${availableSpace.height - axisNameHeight / 2})`);\n break;\n default:\n }\n return textNode;\n};\n\n/**\n * This method is used to render the axis inside an\n * svg container.\n *\n * @export\n * @param {Object} axisInstance the nput object required to render axis\n * @param {string} axisInstance.orientation the orientation of axis\n * @param {Object} axisInstance.scale instance of d3 scale\n * @param {SVGElement} axisInstance.container the container in which to render\n */\nexport function renderAxis (axisInstance) {\n const renderConfig = axisInstance.renderConfig();\n const config = axisInstance.config();\n\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\n const mount = axisInstance.mount();\n\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n\n if (!show) {\n return;\n }\n\n const selectContainer = makeElement(selectElement(mount), 'g', [axisInstance], `${className}`, {},\n key => key.config().id);\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n\n let availableSpace;\n let labelProps;\n let tickSize;\n if (axisInstance.domain().length > 0) {\n const labelManager = axisInstance.dependencies().labelManager;\n const range = axisInstance.range();\n const axis = axisInstance.axis();\n const scale = axisInstance.scale();\n\n const {\n _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n\n tickSize = axisInstance.getTickSize();\n\n // Set style for tick labels\n labelManager.setStyle(tickLabelStyle);\n\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\n\n // Get range(length of range)\n availableSpace = Math.abs(range[0] - range[1]);\n\n // Get width and height taken by axis labels\n labelProps = axisInstance.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n setFixedBaseline(axisInstance);\n if (!labels.rotation && labels.smartTicks === false) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .call(axis);\n } else {\n selectContainer.call(axis);\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n }\n\n selectContainer.selectAll('.tick').classed(`${classPrefix}-ticks`, true);\n selectContainer.selectAll('.tick line').classed(`${classPrefix}-tick-lines`, true);\n\n // Set classes for ticks\n const tickText = selectContainer.selectAll('.tick text');\n tickText.classed(`${classPrefix}-ticks`, true)\n .classed(`${classPrefix}-ticks-${id}`, true);\n }\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\n\n // Hide axis name if show is off\n textNode.classed(HIDDEN, !showAxisName);\n\n // render labels based on orientation of axis\n const labelOffset = availableSpace / 2;\n\n const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\n yOffset,\n xOffset,\n labelOffset,\n availableSpace: axisInstance.availableSpace()\n };\n // Set position for axis name\n setAxisNamePos(textNode, orientation, measures);\n}\n","import {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\n const bars = avWidth / width;\n const barWidth = avWidth / (bars + 1);\n const diff = avWidth - barWidth * bars;\n\n return diff / 2;\n};\n\nexport const getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = Math.min(minTickSpace.width, tickDimWidth);\n const minTickHeight = Math.min(minTickSpace.height, tickDimHeight);\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n\n if (heightForTicks < minTickWidth) {\n context.renderConfig({ showAxisName: false });\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimHeight / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\n\nexport const setOffset = (context) => {\n let x = 0;\n let y = 0;\n const logicalSpace = context.logicalSpace();\n const config = context.config();\n const {\n orientation,\n xOffset,\n yOffset\n } = config;\n if (orientation === LEFT) {\n x = xOffset === undefined ? logicalSpace.width : xOffset;\n }\n if (orientation === TOP) {\n y = yOffset === undefined ? logicalSpace.height : yOffset;\n }\n\n context.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return {\n allTickDimensions,\n tickSize: 0,\n tickDimensions: { height: 0, width: 0 },\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n height = ((max - min) / Math.abs(minTickDiff)) * tickDimHeight;\n }\n width += (showAxisName ? axisDimHeight : 0) + tickSize + (tickValues ? axisNamePadding : 0);\n\n return {\n height,\n width\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateBandSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\n }\n if (show === false) {\n width = 0;\n }\n return {\n width,\n height\n };\n};\n\n/**\n * Calculates the logical space of the axis\n * @return {Object} Width and height occupied by the axis.\n */\nexport const calculateContinousSpace = (context) => {\n const range = context.range();\n const axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\n mergeRecursive,\n getSmartComputedStyle,\n selectElement,\n generateGetterSetters,\n getUniqueId\n} from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { axisOrientationMap, BOTTOM, TOP } from '../enums/axis-orientation';\nimport { defaultConfig } from './default-config';\nimport { renderAxis } from '../axis-renderer';\nimport { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\n} from './helper';\nimport { PROPS } from './props';\n\nexport default class SimpleAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @memberof SimpleAxis\n */\n constructor (config, dependencies) {\n this._id = getUniqueId();\n\n this._dependencies = dependencies;\n this._mount = null;\n this._range = [];\n this._domain = [];\n this._domainLock = false;\n this._axisDimensions = {};\n this._smartTicks = [];\n\n const defCon = mergeRecursive({}, this.constructor.defaultConfig());\n const simpleConfig = mergeRecursive(defCon, config);\n\n const bodyElem = selectElement('body');\n const classPrefix = simpleConfig.classPrefix;\n this._tickLabelStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-ticks`);\n this._axisNameStyle = getSmartComputedStyle(bodyElem, `${classPrefix}-axis-name`);\n\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\n }\n\n /**\n * Returns the default configuration of simple axis\n * @return {Object} default configurations\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline () {\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n scale (...params) {\n if (params.length) {\n this._scale = params[0];\n return this;\n }\n return this._scale;\n }\n\n resetDomain () {\n this._domain = [];\n return this;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleAxis\n */\n axis (...params) {\n if (params.length) {\n this._axis = params[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const scale = createScale({\n padding,\n interpolator,\n exponent,\n base,\n range,\n type: this.constructor.type()\n });\n\n return scale;\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (width = 0, height, padding, isOffset) {\n let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n return this;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this.scale()(domainVal);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n return this.axis().tickSize();\n }\n\n /**\n * Gets the space occupied by the parts of an axis\n *\n * @return {Object} object with details about sizes of the axis.\n * @memberof SimpleAxis\n */\n getAxisDimensions (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\n return this.axisDimensions();\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateContinousSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n * Returns the value from the domain when given a value from the range.\n * @param {number} value Value from the range.\n * @return {number} Value\n */\n invert (value) {\n return this.scale().invert(value);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\n }\n\n /**\n * This method returns the width in pixels for one\n * unit along the axis. It is only applicable to band scale\n * and returns undefined for other scale type.\n *\n * @return {number} the width of one band along band scale axis\n * @memberof SimpleAxis\n */\n getUnitWidth () {\n return 0;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof SimpleAxis\n */\n serialize () {\n return {\n name: this.name,\n type: this.type,\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n get id () {\n return this._id;\n }\n\n /**\n * This method is used to render the axis inside\n * the supplied svg container.\n *\n * @param {SVGElement} svg the svg element in which to render the path\n * @memberof SimpleAxis\n */\n /* istanbul ignore next */render () {\n if (this.mount()) {\n this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getPixelToValueRatio () {\n const scale = this.scale();\n const range = scale.range();\n const domain = scale.domain();\n\n return Math.abs(range[1] - range[0]) / (domain[1] - domain[0]);\n }\n\n /**\n * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n _getRawTickValue (data) {\n return data;\n }\n\n getTicksBasedOnData (tickData) {\n const allTicks = selectElement(this.mount()).selectAll('.tick');\n let elementToBeModified = null;\n let elementNotToBeModified = null;\n if (tickData) {\n elementToBeModified = allTicks.filter(tickValue => tickData === this._getRawTickValue(tickValue));\n elementNotToBeModified = allTicks.filter(tickValue => !(tickData === this._getRawTickValue(tickValue)));\n }\n return {\n selectionSet: elementToBeModified,\n rejectionSet: elementNotToBeModified || allTicks\n };\n }\n}\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { scaleMap } from '../../scale-creator';\n\nexport default class LinearInterpolator {\n\n createScale (config) {\n const {\n range\n } = config;\n const scaleFactory = scaleMap.linear;\n this._scale = scaleFactory().range(range);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class LogInterpolator {\n\n createScale (config) {\n const {\n range,\n base\n } = config;\n const scaleFactory = scaleMap.log;\n this._scale = scaleFactory().range(range).base(base);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\n return domain;\n }\n}\n","import { scaleMap } from '../../scale-creator';\n\nexport default class PowInterpolator {\n\n createScale (config) {\n const {\n range,\n exponent\n } = config;\n const scaleFactory = scaleMap.pow;\n this._scale = scaleFactory().range(range).exponent(exponent);\n return this._scale;\n }\n\n getScaleValue (domainVal) {\n return this._scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n return domain;\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { LINEAR, LOG, POW } from '../enums/scale-type';\nimport { LogInterpolator, PowInterpolator, LinearInterpolator } from './interpolators';\nimport {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\n} from './helper';\n\nexport const interpolatorMap = {\n [LOG]: LogInterpolator,\n [POW]: PowInterpolator,\n [LINEAR]: LinearInterpolator\n};\n\nexport default class ContinousAxis extends SimpleAxis {\n constructor (config, dependencies) {\n config.tickFormat = config.tickFormat || (val => val);\n super(config, dependencies);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createScale (config) {\n const {\n base,\n padding,\n interpolator,\n exponent\n } = config;\n const range = this.range();\n const InterpolatorCls = interpolatorMap[interpolator];\n\n this._interpolator = new InterpolatorCls();\n let scale = this._interpolator.createScale({\n padding,\n exponent,\n base,\n range\n });\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ContinousAxis\n */\n static type () {\n return LINEAR;\n }\n\n getScaleValue (domainVal) {\n if (domainVal === null || domainVal === undefined) {\n return undefined;\n }\n return this._interpolator.getScaleValue(domainVal);\n }\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return tickValues;\n }\n labelDim = labelProps[orientation === BOTTOM || orientation === TOP ? 'width' : 'height'];\n\n return getNumberOfTicks(availableSpace, labelDim, axis, this);\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.renderConfig().tickValues);\n }\n\n /**\n * Sets a fixed baseline for the first ticks so that they can render effectively within\n * the given area\n *\n * @param {*} tickText\n * @param {*} config\n * @param {*} labelManager\n */\n setFixedBaseline (tickText) {\n const {\n orientation\n } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n axis.tickSizeInner(showInnerTicks ? 6 : 0);\n axis.tickSizeOuter(showOuterTicks ? 6 : 0);\n return axis.tickSize();\n }\n\n invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\n }\n\n /**\n * Gets the nearest range value from the given range values.\n * @param {number} v1 Start range value\n * @param {number} v2 End range value\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\n\n/**\n *\n *\n * @export\n * @class TimeAxis\n * @extends {SimpleAxis}\n */\nexport default class TimeAxis extends SimpleAxis {\n\n constructor (...params) {\n super(...params);\n this._minDiff = Infinity;\n }\n\n /**\n *\n *\n * @param {*} range\n *\n * @memberof TimeAxis\n */\n createScale (range) {\n let scale = super.createScale(range);\n\n scale = scale.nice();\n return scale;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n return super.getTickSize();\n }\n\n /**\n *\n *\n *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\n }\n\n /**\n * Gets the space occupied by the axis\n *\n * @return {Object} object with details about size of the axis.\n * @memberof SimpleAxis\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(calculateBandSpace(this));\n }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @memberof AxisCell\n */\n setAvailableSpace (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\n }\n _getRawTickValue (data) {\n return (new Date(data)).getTime();\n }\n}\n","export const x11Colors = {\n Pink: { hex: 'ffc0cb', rgb: '255,192,203' },\n LightPink: { hex: 'ffb6c1', rgb: '255,182,193' },\n HotPink: { hex: 'ff69b4', rgb: '255,105,180' },\n DeepPink: { hex: 'ff1493', rgb: '255,20,147' },\n PaleVioletRed: { hex: 'db7093', rgb: '219,112,147' },\n MediumVioletRed: { hex: 'c71585', rgb: '199,21,133' },\n LightSalmon: { hex: 'ffa07a', rgb: '255,160,122' },\n Salmon: { hex: 'fa8072', rgb: '250,128,114' },\n DarkSalmon: { hex: 'e9967a', rgb: '233,150,122' },\n LightCoral: { hex: 'f08080', rgb: '240,128,128' },\n IndianRed: { hex: 'cd5c5c', rgb: '205,92,92' },\n Crimson: { hex: 'dc143c', rgb: '220,20,60' },\n FireBrick: { hex: 'b22222', rgb: '178,34,34' },\n DarkRed: { hex: '8b0000', rgb: '139,0,0' },\n Red: { hex: 'ff0000', rgb: '255,0,0' },\n OrangeRed: { hex: 'ff4500', rgb: '255,69,0' },\n Tomato: { hex: 'ff6347', rgb: '255,99,71' },\n Coral: { hex: 'ff7f50', rgb: '255,127,80' },\n DarkOrange: { hex: 'ff8c00', rgb: '255,140,0' },\n Orange: { hex: 'ffa500', rgb: '255,165,0' },\n Gold: { hex: 'ffd700', rgb: '255,215,0' },\n Yellow: { hex: 'ffff00', rgb: '255,255,0' },\n LightYellow: { hex: 'ffffe0', rgb: '255,255,224' },\n LemonChiffon: { hex: 'fffacd', rgb: '255,250,205' },\n LightGoldenrodYellow: { hex: 'fafad2', rgb: '250,250,210' },\n PapayaWhip: { hex: 'ffefd5', rgb: '255,239,213' },\n Moccasin: { hex: 'ffe4b5', rgb: '255,228,181' },\n PeachPuff: { hex: 'ffdab9', rgb: '255,218,185' },\n PaleGoldenrod: { hex: 'eee8aa', rgb: '238,232,170' },\n Khaki: { hex: 'f0e68c', rgb: '240,230,140' },\n DarkKhaki: { hex: 'bdb76b', rgb: '189,183,107' },\n Cornsilk: { hex: 'fff8dc', rgb: '255,248,220' },\n BlanchedAlmond: { hex: 'ffebcd', rgb: '255,235,205' },\n Bisque: { hex: 'ffe4c4', rgb: '255,228,196' },\n NavajoWhite: { hex: 'ffdead', rgb: '255,222,173' },\n Wheat: { hex: 'f5deb3', rgb: '245,222,179' },\n BurlyWood: { hex: 'deb887', rgb: '222,184,135' },\n Tan: { hex: 'd2b48c', rgb: '210,180,140' },\n RosyBrown: { hex: 'bc8f8f', rgb: '188,143,143' },\n SandyBrown: { hex: 'f4a460', rgb: '244,164,96' },\n Goldenrod: { hex: 'daa520', rgb: '218,165,32' },\n DarkGoldenrod: { hex: 'b8860b', rgb: '184,134,11' },\n Peru: { hex: 'cd853f', rgb: '205,133,63' },\n Chocolate: { hex: 'd2691e', rgb: '210,105,30' },\n SaddleBrown: { hex: '8b4513', rgb: '139,69,19' },\n Sienna: { hex: 'a0522d', rgb: '160,82,45' },\n Brown: { hex: 'a52a2a', rgb: '165,42,42' },\n Maroon: { hex: '800000', rgb: '128,0,0' },\n DarkOliveGreen: { hex: '556b2f', rgb: '85,107,47' },\n Olive: { hex: '808000', rgb: '128,128,0' },\n OliveDrab: { hex: '6b8e23', rgb: '107,142,35' },\n YellowGreen: { hex: '9acd32', rgb: '154,205,50' },\n LimeGreen: { hex: '32cd32', rgb: '50,205,50' },\n Lime: { hex: '00ff00', rgb: '0,255,0' },\n LawnGreen: { hex: '7cfc00', rgb: '124,252,0' },\n Chartreuse: { hex: '7fff00', rgb: '127,255,0' },\n GreenYellow: { hex: 'adff2f', rgb: '173,255,47' },\n SpringGreen: { hex: '00ff7f', rgb: '0,255,127' },\n MediumSpringGreen: { hex: '00fa9a', rgb: '0,250,154' },\n LightGreen: { hex: '90ee90', rgb: '144,238,144' },\n PaleGreen: { hex: '98fb98', rgb: '152,251,152' },\n DarkSeaGreen: { hex: '8fbc8f', rgb: '143,188,143' },\n MediumSeaGreen: { hex: '3cb371', rgb: '60,179,113' },\n SeaGreen: { hex: '2e8b57', rgb: '46,139,87' },\n ForestGreen: { hex: '228b22', rgb: '34,139,34' },\n Green: { hex: '008000', rgb: '0,128,0' },\n DarkGreen: { hex: '006400', rgb: '0,100,0' },\n MediumAquamarine: { hex: '66cdaa', rgb: '102,205,170' },\n Aqua: { hex: '00ffff', rgb: '0,255,255' },\n Cyan: { hex: '00ffff', rgb: '0,255,255' },\n LightCyan: { hex: 'e0ffff', rgb: '224,255,255' },\n PaleTurquoise: { hex: 'afeeee', rgb: '175,238,238' },\n Aquamarine: { hex: '7fffd4', rgb: '127,255,212' },\n Turquoise: { hex: '40e0d0', rgb: '64,224,208' },\n MediumTurquoise: { hex: '48d1cc', rgb: '72,209,204' },\n DarkTurquoise: { hex: '00ced1', rgb: '0,206,209' },\n LightSeaGreen: { hex: '20b2aa', rgb: '32,178,170' },\n CadetBlue: { hex: '5f9ea0', rgb: '95,158,160' },\n DarkCyan: { hex: '008b8b', rgb: '0,139,139' },\n Teal: { hex: '008080', rgb: '0,128,128' },\n LightSteelBlue: { hex: 'b0c4de', rgb: '176,196,222' },\n PowderBlue: { hex: 'b0e0e6', rgb: '176,224,230' },\n LightBlue: { hex: 'add8e6', rgb: '173,216,230' },\n SkyBlue: { hex: '87ceeb', rgb: '135,206,235' },\n LightSkyBlue: { hex: '87cefa', rgb: '135,206,250' },\n DeepSkyBlue: { hex: '00bfff', rgb: '0,191,255' },\n DodgerBlue: { hex: '1e90ff', rgb: '30,144,255' },\n CornflowerBlue: { hex: '6495ed', rgb: '100,149,237' },\n SteelBlue: { hex: '4682b4', rgb: '70,130,180' },\n RoyalBlue: { hex: '4169e1', rgb: '65,105,225' },\n Blue: { hex: '0000ff', rgb: '0,0,255' },\n MediumBlue: { hex: '0000cd', rgb: '0,0,205' },\n DarkBlue: { hex: '00008b', rgb: '0,0,139' },\n Navy: { hex: '000080', rgb: '0,0,128' },\n MidnightBlue: { hex: '191970', rgb: '25,25,112' },\n Lavender: { hex: 'e6e6fa', rgb: '230,230,250' },\n Thistle: { hex: 'd8bfd8', rgb: '216,191,216' },\n Plum: { hex: 'dda0dd', rgb: '221,160,221' },\n Violet: { hex: 'ee82ee', rgb: '238,130,238' },\n Orchid: { hex: 'da70d6', rgb: '218,112,214' },\n Fuchsia: { hex: 'ff00ff', rgb: '255,0,255' },\n Magenta: { hex: 'ff00ff', rgb: '255,0,255' },\n MediumOrchid: { hex: 'ba55d3', rgb: '186,85,211' },\n MediumPurple: { hex: '9370db', rgb: '147,112,219' },\n BlueViolet: { hex: '8a2be2', rgb: '138,43,226' },\n DarkViolet: { hex: '9400d3', rgb: '148,0,211' },\n DarkOrchid: { hex: '9932cc', rgb: '153,50,204' },\n DarkMagenta: { hex: '8b008b', rgb: '139,0,139' },\n Purple: { hex: '800080', rgb: '128,0,128' },\n Indigo: { hex: '4b0082', rgb: '75,0,130' },\n DarkSlateBlue: { hex: '483d8b', rgb: '72,61,139' },\n SlateBlue: { hex: '6a5acd', rgb: '106,90,205' },\n MediumSlateBlue: { hex: '7b68ee', rgb: '123,104,238' },\n White: { hex: 'ffffff', rgb: '255,255,255' },\n Snow: { hex: 'fffafa', rgb: '255,250,250' },\n Honeydew: { hex: 'f0fff0', rgb: '240,255,240' },\n MintCream: { hex: 'f5fffa', rgb: '245,255,250' },\n Azure: { hex: 'f0ffff', rgb: '240,255,255' },\n AliceBlue: { hex: 'f0f8ff', rgb: '240,248,255' },\n GhostWhite: { hex: 'f8f8ff', rgb: '248,248,255' },\n WhiteSmoke: { hex: 'f5f5f5', rgb: '245,245,245' },\n Seashell: { hex: 'fff5ee', rgb: '255,245,238' },\n Beige: { hex: 'f5f5dc', rgb: '245,245,220' },\n OldLace: { hex: 'fdf5e6', rgb: '253,245,230' },\n FloralWhite: { hex: 'fffaf0', rgb: '255,250,240' },\n Ivory: { hex: 'fffff0', rgb: '255,255,240' },\n AntiqueWhite: { hex: 'faebd7', rgb: '250,235,215' },\n Linen: { hex: 'faf0e6', rgb: '250,240,230' },\n LavenderBlush: { hex: 'fff0f5', rgb: '255,240,245' },\n MistyRose: { hex: 'ffe4e1', rgb: '255,228,225' },\n Gainsboro: { hex: 'dcdcdc', rgb: '220,220,220' },\n LightGray: { hex: 'd3d3d3', rgb: '211,211,211' },\n Silver: { hex: 'c0c0c0', rgb: '192,192,192' },\n DarkGrey: { hex: 'a9a9a9', rgb: '169,169,169' },\n Grey: { hex: '808080', rgb: '128,128,128' },\n DimGrey: { hex: '696969', rgb: '105,105,105' },\n LightSlateGrey: { hex: '778899', rgb: '119,136,153' },\n SlateGrey: { hex: '708090', rgb: '112,128,144' },\n DarkSlateGrey: { hex: '2f4f4f', rgb: '47,79,79' },\n Black: { hex: '000000', rgb: '0,0,0' }\n};\n","import {\n LINEAR\n} from '../enums/constants';\n/**\n * Set of default colors\n */\nexport const palette = [\n '#1f77b4',\n '#ff7f0e',\n '#2ca02c',\n '#d62728',\n '#9467bd',\n '#8c564b',\n '#e377c2',\n '#7f7f7f',\n '#bcbd22',\n '#17becf'\n];\n\nexport const DEFAULT_GRADIENT_COLOR = '#eaeaea';\n\nexport const DEFAULT_CONFIG = {\n range: palette,\n value: palette[0],\n step: false,\n stops: 5,\n type: LINEAR\n};\n","import { mergeRecursive, detectColor, hexToHsv, rgbToHsv, defaultValue } from 'muze-utils';\nimport { x11Colors } from './color-maps';\nimport { palette, DEFAULT_GRADIENT_COLOR, DEFAULT_CONFIG } from './defaults';\nimport { LINEAR, RGB, HEX, HSL, HSLA } from '../enums/constants';\n\nexport const getHslString = hslArr => `hsla(${hslArr[0] * 360},${hslArr[1] * 100}%,${hslArr[2] * 100}%,\\\n${hslArr[3] || 1})`;\n\nexport const convertToXllString = baseString => (baseString.split(' ') || [])\n .reduce((x, e) => `${x}${e.charAt(0).toUpperCase()}${e.slice(1)}`, '');\n\nexport const getActualHslColor = (e, paletteColor) => {\n let color = '';\n if (typeof e === 'string') {\n e = e.replace(/ /g, '');\n e = e.toLowerCase();\n if (detectColor(e) === HSL || detectColor(e) === HSLA) {\n color = e.match(/(\\d+(\\.\\d+)?)/g);\n color = [color[0] / 360, color[1] / 100, color[2] / 100, defaultValue(Number(color[3]), 1)];\n } else if (detectColor(e) === HEX) {\n color = hexToHsv(e);\n } else if (detectColor(e) === RGB) {\n const col = e.substring(e.indexOf('(') + 1, e.lastIndexOf(')')).split(/,\\s*/);\n color = rgbToHsv(...col);\n } else if (x11Colors[convertToXllString(e)]) {\n color = rgbToHsv(...x11Colors[convertToXllString(e)].rgb.split(','));\n }\n } else if (!(e instanceof Array)) {\n color = rgbToHsv(paletteColor);\n } else {\n color = e;\n }\n return color;\n};\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => {\n const defCon = mergeRecursive({}, context.constructor.defaultConfig());\n if (config.type === LINEAR) {\n config.range = config.range || [defCon.range[0]];\n config.range = config.range.length > 1 ? config.range : [DEFAULT_GRADIENT_COLOR, ...config.range];\n }\n const oldConfig = mergeRecursive(defCon, context.config());\n const newConfig = mergeRecursive(oldConfig, config);\n\n if (newConfig.range instanceof Array) {\n newConfig.range = newConfig.range.map((e, i) => getActualHslColor(e, palette[i]));\n newConfig.stops = config.stops ?\n config.stops :\n config.range && config.range.length > 2 ?\n config.range.length :\n DEFAULT_CONFIG.stops;\n }\n newConfig.value = getActualHslColor(newConfig.value, newConfig.value);\n return newConfig;\n }\n },\n domain: {},\n scale: {},\n uniqueValues: {}\n};\n","import { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n\nexport const sanitiseConfigIntervals = (intervals) => {\n if (intervals) {\n return intervals;\n }\n return 5;\n};\n","import { piecewiseInterpolator,\n hslInterpolator,\n sanitizeDomainWhenEqual, getReadableTicks } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\n\nconst getStops = (domain, stops) => {\n let newStops = [];\n\n if (stops instanceof Array) {\n newStops = stops.slice().sort();\n newStops = [...new Set([domain[0], ...stops, domain[1]])].sort();\n } else {\n newStops = getReadableTicks(domain, stops);\n }\n return { domain, newStops };\n};\n\nconst rangeStops = (newStopsLength, range) => {\n let newRange = [];\n const maxRangeLength = Math.min(range.length, 18);\n\n if (newStopsLength > maxRangeLength) {\n const interpolator = piecewiseInterpolator()(hslInterpolator(), range.map(e => getHslString(e)));\n for (let i = 0; i < newStopsLength; i++) {\n newRange[i] = interpolator(i / (newStopsLength - 1));\n }\n } else {\n newRange = range.slice(0, newStopsLength);\n }\n return { newRange };\n};\n\n/**\n*\n*\n* @param {*} domain\n*\n*/\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomainMeasure = (domain, stops, range) => {\n const uniqueVals = domain;\n return { domain, uniqueVals, scaleDomain: [0, 1], range };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain, stops, range) => {\n const uniqueVals = domain;\n return { uniqueVals, domain, nice: true, range };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} stops\n *\n */\nconst steppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(domain, stops);\n const { newRange } = rangeStops(newStops.length - 1, range);\n\n return { uniqueVals, domain: newStops, nice: true, range: newRange };\n};\n\nconst continousSteppedDomain = (domain, stops, range) => {\n const { domain: uniqueVals, newStops } = getStops(sanitizeDomainWhenEqual(domain), range.length - 1);\n const hslRange = range.map(e => getHslString(e));\n return { uniqueVals, domain: newStops, nice: true, range: hslRange };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst uniqueRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n return scale(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\n\n/**\n *\n *\n * @param {*} stops\n */\nconst strategies = () => ({\n [`${CONTINOUS}-${CONTINOUS}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${CONTINOUS}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomainMeasure,\n value: () => indexedRange\n },\n [`${DISCRETE}-${DISCRETE}-${SEQUENTIAL}`]: {\n scale: SEQUENTIAL,\n domainRange: () => indexedDomain,\n value: () => uniqueRange\n },\n [`${DISCRETE}-${DISCRETE}-${ORDINAL}`]: {\n scale: ORDINAL,\n domainRange: () => normalDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${CONTINOUS}-${ORDINAL}`]: {\n scale: LINEAR,\n domainRange: () => continousSteppedDomain,\n value: () => normalRange\n },\n [`${CONTINOUS}-${DISCRETE}-${ORDINAL}`]: {\n scale: QUANTILE,\n domainRange: () => steppedDomain,\n value: () => normalRange\n\n }\n});\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} stops\n */\nexport const strategyGetter = (domainType, rangeType, schemeType) =>\n strategies()[`${domainType}-${rangeType}-${schemeType || ''}`];\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters, rgbToHsv, defaultValue } from 'muze-utils';\nimport { createScale, getScheme, getSchemeType, scaleMap } from '../scale-creator';\nimport { CONTINOUS, DISCRETE, ORDINAL, COLOR } from '../enums/constants';\nimport { strategyGetter } from './color-strategy';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { PROPS, getHslString, getActualHslColor } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ColorAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @param {Object | undefined} params.range Type of color range.\n * @param {string} params.name the label to show on axis.\n * @param {string} params.type The type of scale to handle.\n * @memberof ColorAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n this.config(config);\n\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n this._rangeType = (this._config.type === 'linear' && !this._config.step) ? CONTINOUS : DISCRETE;\n\n this._schemeType = getSchemeType(this._config.range);\n\n this._colorStrategy = this.setColorStrategy(this._domainType, this._rangeType, this._schemeType);\n this._scale = this.createScale(this._colorStrategy);\n\n this._id = getUniqueId();\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\n * @memberof ColorAxis\n */\n createScale (colorStrategy) {\n const { range } = this.config();\n if (range && typeof (range) === 'string') {\n return getScheme(range);\n }\n return createScale({\n type: colorStrategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getRawColor (domainVal) {\n if (this.domain() && domainVal !== undefined) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const color = this._colorStrategy.value(range)(domainVal, scale, this.domain(), this.uniqueValues());\n\n if (color) {\n if (typeof color === 'string') {\n const col = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(/,\\s*/);\n return rgbToHsv(...col);\n }\n return [...color];\n }\n }\n return [...this.config().value];\n }\n\n setRangeWithInterpolatedColors (scaleType, scaleInfo) {\n const { domain: originalDomain, range: originalRange } = scaleInfo;\n const originalDomainLen = originalDomain.length;\n const originalRangeLen = originalRange.length;\n\n if (scaleType === ORDINAL && originalDomainLen > originalRangeLen) {\n const newRange = [];\n const newDomain = originalDomain.map((d, i) => i / originalDomainLen);\n\n this._linearScale = scaleMap.linear()\n .range(this._config.range)\n .domain(newDomain);\n\n for (let i = 0, len = originalDomainLen; i < len; i++) {\n const rangeVal = (1 / len) * i;\n newRange.push([...this._linearScale(rangeVal)]);\n }\n this.scale().range(newRange);\n }\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\n * @memberof ColorAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n const scale = this.scale();\n const range = scale.range ? scale.range() : null;\n const domainRangeFn = this._colorStrategy.domainRange();\n const scaleType = this._colorStrategy.scale;\n const scaleInfo = domainRangeFn(domain, this.config().stops, range);\n\n this.domain(scaleInfo.domain);\n scaleInfo.range && this.scale().range(scaleInfo.range);\n this.uniqueValues(scaleInfo.uniqueVals);\n this.scale().domain(scaleInfo.scaleDomain || this.domain());\n\n // Interpolate colors using linear scale if domain exceeds range\n this.setRangeWithInterpolatedColors(scaleType, scaleInfo);\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n config: this.config()\n };\n }\n\n transformColor (color, transformationArr) {\n const h = color[0] * 360;\n const s = color[1] * 100;\n const l = color[2] * 100;\n const a = Math.min(defaultValue(color[3], 0), 1);\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = Math.min(a + transformationArr[3] || 0, 1);\n\n return { color: `hsla(${newH},${newS}%,${newL}%,${newA})`, hsla: [newH / 360, newS / 100, newL / 100, newA] };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n\n getHslArray (color) {\n return getActualHslColor(color);\n }\n\n}\n","export const DEFAULT_CONFIG = {\n value: 51,\n range: [51, 1000]\n};\n","import { numberInterpolator, piecewiseInterpolator, getReadableTicks } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, THRESHOLD } from '../enums/scale-type';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst indexedDomain = (domain) => {\n const uniqueVals = domain;\n const retDomain = domain.map((d, i) => (i) / (domain.length - 1));\n return { domain: retDomain, uniqueVals, scaleDomain: [0, 1] };\n};\n\n/**\n *\n *\n * @param {*} domain\n *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\n */\nconst steppedDomain = (domain, intervals) => {\n let newIntervals = [];\n if (intervals instanceof Array) {\n newIntervals = intervals.slice().sort();\n } else {\n // const interpolator = numberInterpolator()(...domain);\n // for (let i = 0; i < intervals; i++) {\n // newIntervals[i] = interpolator(i / (intervals - 1));\n // }\n newIntervals = getReadableTicks(domain, intervals);\n }\n // if (newIntervals[0] < domain[0]) {\n // newIntervals.shift();\n // }\n const retDomain = newIntervals;\n return { uniqueVals: newIntervals, domain: retDomain, nice: true };\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n * @param {*} uniqueVals\n *\n */\nconst discreteRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n const interpolator = numberInterpolator()(...scale.range());\n return treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\n */\nconst pieceWiseRange = (domainValue, scale, domain, uniqueVals) => {\n const index = uniqueVals.indexOf(domainValue);\n const numVal = domain[index];\n const fn = piecewiseInterpolator()(numberInterpolator(), [...scale.range()]);\n return fn(numVal);\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\n\n/**\n *\n *\n * @param {*} intervals\n */\nconst strategies = {\n [`${DISCRETE}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: indexedDomain,\n range: pieceWiseRange\n },\n [`${CONTINOUS}-${CONTINOUS}`]: {\n scale: LINEAR,\n domain: normalDomain,\n range: normalRange\n },\n [`${CONTINOUS}-${DISCRETE}`]: {\n scale: THRESHOLD,\n domain: steppedDomain,\n range: discreteRange\n }\n};\n\n/**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n * @param {*} intervals\n */\nexport const strategyGetter = (domainType, rangeType) =>\n strategies[`${domainType}-${rangeType}`];\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => {\n context._userRange = value.range;\n return mergeRecursive(context._config || {}, value);\n }\n },\n domain: {\n sanitization: (context, value) => {\n context.scale().domain(value);\n return value;\n }\n },\n range: {},\n scale: {},\n uniqueValues: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SIZE, CONTINOUS, DISCRETE } from '../enums/constants';\nimport { strategyGetter } from './size-strategy';\nimport { PROPS } from './props';\nimport { sanitiseConfigIntervals } from '../helper';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class SizeAxis {\n\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} config input parameters.\n * @memberof SizeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this.config(this.constructor.defaultConfig());\n this.config(config);\n // @todo: Will use configuration override using scale decorator\n this._domainType = this._config.type === 'linear' ? CONTINOUS : DISCRETE;\n\n this._config.range = this._userRange ? this._userRange : this._config.range;\n\n this._config.stops = sanitiseConfigIntervals(this._config.stops);\n this._rangeType = this._config.type === 'linear' && !!this._config.stops ? DISCRETE : CONTINOUS;\n\n this._sizeStrategy = this.setStrategy(this._domainType, this._rangeType);\n this._scale = this.createScale(this._sizeStrategy);\n this._range = this._config.range;\n\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @param {*} domainType\n * @param {*} rangeType\n * @param {*} schemeType\n *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\n * @memberof SizeAxis\n */\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof SizeAxis\n */\n getSize (domainVal = 0) {\n let sizeVal = 1;\n const {\n value\n } = this.config();\n const scale = this.scale();\n const domain = this.domain() || [1, 1];\n\n if (!scale || domain[0] === domain[1] || domain.length === 1) {\n sizeVal = value;\n } else {\n return this._sizeStrategy.range(domainVal, scale, this.domain(), this.uniqueValues());\n }\n return sizeVal;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof SizeAxis\n */\n updateDomain (domain) {\n if (domain) {\n const domainFn = this._sizeStrategy.domain;\n\n const domainInfo = domainFn(domain, this.config().stops);\n\n this.domain(domainInfo.domain);\n this.uniqueValues(domainInfo.uniqueVals);\n\n this.scale().domain(domainInfo.scaleDomain || this.domain());\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.range(),\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","export const DEFAULT_CONFIG = {\n generator: null,\n value: 'circle',\n range: ['circle', 'diamond', 'star', 'cross', 'square', 'wye', 'triangle']\n};\n","export const PROPS = {\n config: {},\n domain: {},\n scale: {},\n uniqueValues: {},\n generator: {}\n};\n\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, getSymbol, generateGetterSetters, mergeRecursive, InvalidAwareTypes } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_CONFIG } from './defaults';\nimport { SHAPE } from '../enums/constants';\nimport { shapeGenerator } from './helper';\nimport { PROPS } from './props';\n\n/**\n* This class is used to instantiate a SimpleAxis.\n* @class SimpleAxis\n*/\nexport default class ShapeAxis {\n /**\n * Creates an instance of SimpleAxis.\n * @param {Object} params input parameters.\n * @param {Object | undefined} params.range Type of color scheme.\n * @memberof ShapeAxis\n */\n constructor (config) {\n generateGetterSetters(this, PROPS);\n\n this._id = getUniqueId();\n this._config = Object.assign({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(this._config, config);\n\n this._scale = createScale({\n type: 'ordinal',\n range: this._config.range\n });\n this.updateDomain(config.domain);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\n return this.config().value;\n }\n\n if (this._generatedShapes) {\n return this._generatedShapes[value];\n }\n\n const shapeType = this.scale()(value);\n if (shapeType === 'string') {\n return getSymbol(shapeType);\n }\n\n return shapeType;\n }\n\n /**\n * This method is used to assign a domain to the axis.\n *\n * @param {Array} domain the domain of the scale\n * @memberof ShapeAxis\n */\n updateDomain (domain = []) {\n if (domain.length) {\n this.uniqueValues(domain);\n this.domain(domain);\n this.scale().domain(domain);\n\n if (this.config().generator) {\n this._generatedShapes = shapeGenerator(domain, this.config().generator);\n }\n }\n return this;\n }\n\n /**\n * This method returns an object that can be used to\n * reconstruct this instance.\n *\n * @return {Object} the serializable props of axis\n * @memberof ShapeAxis\n */\n serialize () {\n return {\n type: this.constructor.type(),\n scale: this.scale(),\n domain: this.domain(),\n range: this.config().range,\n config: this.config()\n };\n }\n\n /**\n * Returns the id of the axis.\n * @return {string} Unique identifier of the axis.\n */\n id () {\n return this._id;\n }\n}\n","/**\n *\n *\n * @param {*} domain\n * @param {*} generatorFn\n *\n */\nexport const shapeGenerator = (domain, generatorFn) => {\n const generatedShapes = {};\n domain.forEach((value) => {\n generatedShapes[value] = generatorFn(value);\n });\n return generatedShapes;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\n};\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\n}\n","/**\n * This file exports constants that are used as enums in the\n * crosstab group implementation.\n */\n/**\n * Width of the crosstab.\n */\nexport const X = 'x';\n/**\n * Width of the crosstab.\n */\nexport const Y = 'y';\n/**\n * Width of the crosstab.\n */\nexport const WIDTH = 'width';\n\n/**\n * Height of the crosstab.\n */\nexport const HEIGHT = 'height';\n\n/**\n * Field referring to object storing measurement configuration.\n */\nexport const MEASUREMENT = 'measurement';\n\n/**\n * Field referring to object storing configuration properties.\n */\nexport const CONFIG = 'config';\n\n/**\n * Width of visual unit in crosstab.\n */\nexport const MIN_UNIT_WIDTH = 'minUnitWidth';\n\n/**\n * Height of visual unit.\n */\nexport const MIN_UNIT_HEIGHT = 'minUnitHeight';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSIONS = 'dimensions';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURES = 'measures';\n\n/**\n * Field to store the array of dimensions to facet by.\n */\nexport const DIMENSION = 'dimension';\n\n/**\n * Field to store array of measures to use as x axis.\n */\nexport const MEASURE = 'measure';\n\n/**\n * Flag to specify if model should be pivoted.\n */\nexport const PIVOT = 'pivot';\n\n/**\n * Flag to specify format\n */\nexport const FORMAT = 'format';\n\n/**\n * Mount point where the variable will be hosted\n */\nexport const MOUNT = 'mount';\n\n/**\n * Data update flag\n */\nexport const HAS_DATA_UPDATED = 'hasDataUpdated';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROWS = 'rows';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMNS = 'columns';\n\n/**\n * Field referring to object storing data\n */\nexport const DATA = 'data';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COL = 'col';\n\n/**\n * Field referring to object storing set of rows\n */\nexport const ROW = 'row';\n\n/**\n * Field referring to object storing set of columns\n */\nexport const COLUMN = 'column';\n\n/**\n * Field referring to object storing color field\n */\nexport const COLOR = 'color';\n\n/**\n * Field referring to object storing shape field\n */\nexport const SHAPE = 'shape';\n\n/**\n * Field referring to object storing size field\n */\nexport const SIZE = 'size';\n\n/**\n * Field referring to object storing detail field\n */\nexport const DETAIL = 'detail';\n\n/**\n * Field referring to object storing set of layers\n */\nexport const LAYERS = 'layers';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const TRANSFORM = 'transform';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const ORDINAL = 'ordinal';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const LINEAR = 'linear';\n/**\n * Field referring to object storing the transforms\n */\nexport const LEFT = 'left';\n/**\n * Field referring to object storing the transforms\n */\nexport const RIGHT = 'right';\n/**\n * Field referring to object storing the transforms\n */\nexport const TOP = 'top';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTTOM = 'bottom';\n\n/**\n * Field referring to object storing the transforms\n */\nexport const RETINAL = 'retinal';\n/**\n * Field referring to object storing the transforms\n */\nexport const CELL = 'cell';\n/**\n * Field referring to object storing the transforms\n */\nexport const X_AXES = 'xAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const Y_AXES = 'yAxes';\n/**\n * Field referring to object storing the transforms\n */\nexport const ENTRY_CELLS = 'entryCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const INITIALIZED = 'initialized';\n/**\n * Field referring to object storing the transforms\n */\nexport const EXIT_CELLS = 'exitCell';\n/**\n * Field referring to object storing the transforms\n */\nexport const AXIS = 'axis';\n/**\n * Field referring to object storing the transforms\n */\nexport const UNIT = 'unit';\n/**\n * Field referring to object storing the transforms\n */\nexport const UPDATED = 'updated';\n/**\n * Field referring to object storing the transforms\n */\nexport const BEFORE_UPDATE = 'beforeupdate';\n/**\n * Field referring to object storing the transforms\n */\nexport const VALUE_MATRIX = 'valueMatrix';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET_HEADERS = 'facet-headers';\n/**\n * Field referring to object storing the transforms\n */\nexport const RADIUS = 'radius';\n/**\n * Field referring to object storing the transforms\n */\nexport const ANGLE = 'angle';\n\nexport const ANGLE0 = 'angle0';\n/**\n * Field referring to object storing the transforms\n */\nexport const ARC = 'arc';\n/**\n * Field referring to object storing the transforms\n */\nexport const CATEGORICAL = 'categorical';\n/**\n * Field referring to object storing the transforms\n */\nexport const TEMPORAL = 'temporal';\n/**\n * Field referring to object storing the transforms\n */\nexport const BAR = 'bar';\n/**\n * Field referring to object storing the transforms\n */\nexport const LINE = 'line';\n/**\n * Field referring to object storing the transforms\n */\nexport const POINT = 'point';\n/**\n * Field referring to object storing the transforms\n */\nexport const PRIMARY = 'Primary';\n/**\n * Field referring to object storing the transforms\n */\nexport const SECONDARY = 'Secondary';\n/**\n * Field referring to object storing the transforms\n */\nexport const BOTH = 'both';\n/**\n * Field referring to object storing the transforms\n */\nexport const INTERACTION = 'interaction';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_LINES = 'gridLines';\n/**\n * Field referring to object storing the transforms\n */\nexport const GRID_BANDS = 'gridBands';\n/**\n * Field referring to object storing the transforms\n */\nexport const HEADER = 'header';\n/**\n * Field referring to object storing the transforms\n */\nexport const FACET = 'facet';\nexport const DEFAULT = 'default';\n/**\n * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\n\nexport const DARK = 'dark';\nexport const NONE = 'none';\nexport const NORMAL = 'normal';\nexport const DARKER = 'darker';\n","/**\n * @module Axis\n * This file declares a class that is used to render an axis to add meaning to\n * plots.\n */\nimport { getUniqueId, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: 'temporal'\n};\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [DATA_TYPES.DIMENSION]: ScaleType.BAND,\n [DATA_TYPES.MEASURE]: ScaleType.LINEAR,\n [DATA_TYPES.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } from 'muze-utils';\n\n/**\n * Create multiple datasets from a single dataset by grouping the data using\n * a dimensional field.\n * @param {Array} schema Name and type of fields are stored in schema\n * @param {Array} data Data array\n * @param {Object} config Configuration object\n * @return {Array} Grouped data array\n */\nexport default (schema, data, config) => {\n const groupBy = config.groupBy instanceof Array ? config.groupBy : [config.groupBy];\n const groupByIndices = groupBy.map(fieldName => schema.findIndex(d => d.name === fieldName));\n\n if (groupByIndices.find(d => d === -1) !== undefined) {\n throw new Error(`Groupby field ${groupBy} not found in schema`);\n }\n\n const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\n};\n","/**\n * @module Transform\n * This file exports a function that is used to implement\n * the identity transform\n */\n /* eslint no-unused-vars: 0 */\n /**\n * This function accepts data and returns the data unchanged.\n * @param {Object} schema The schema.\n * @param {Array} data The data array.\n * @param {Object} config The config object.\n * @return {Array} The unchanged data.\n */\n function identityTransform (schema, data, config) {\n return data;\n }\n\n export default identityTransform;\n","/**\n * @module Transform\n * This file exports the transform factory.\n */\nimport * as TransformType from '../enums/transform-type';\nimport identity from '../identity-transform';\nimport group from '../group-transform';\nimport stack from '../stack-transform';\n\n/* istanbul ignore next */\nconst transformMap = {\n [TransformType.IDENTITY]: identity,\n [TransformType.GROUP]: group,\n [TransformType.STACK]: stack\n};\n\n/**\n * This function is used to retirn a transform associated\n * with the given type.\n *\n * @param {string} type The type of the transform.\n * @return {Function} The transform function.\n */\nfunction transformFactory (type) {\n const transform = transformMap[type];\n if (typeof transform !== 'function') {\n throw new Error('Invalid transform type supplied.');\n }\n return transform;\n}\n\nexport default transformFactory;\n","/**\n * @module Transform\n * This module exports constants that are used to reference transforms in\n * a consistent manner throughout the project.\n */\n/* eslint one-var: 0 */\n export const IDENTITY = 'identity';\n export const GROUP = 'group';\n export const STACK = 'stack';\n export const FRACTURE = 'fracture';\n","import { stack, InvalidAwareTypes } from 'muze-utils';\n\nimport group from '../group-transform';\n/*\n Normalize the data to a form which can be given to d3 stack for stacking the data\n ['Product', 'Sales', 'Region'],\n 0 ['A', 2000, 'North'],\n 1 ['A', 3000, 'South'],\n 2 ['B', 3000, 'South'],\n 3 ['B', 2000, 'North'],\n 4 ['C', 3000, 'South'],\n 5 ['C', 2000, 'North']\n |\n |\n ['Product', 'North', 'South'],\n ['A', 2000, 3000],\n ['B', 2000, 3000],\n ['C', 2000, 3000]\n*/\n// eslint-disable-next-line require-jsdoc\nconst normalizeData = (data, schema, valueField, uniqueField, groupBy) => {\n const groupedData = group(schema, data, {\n groupBy: uniqueField\n });\n const uniqueFieldIndex = schema.findIndex(d => d.name === uniqueField);\n const valueFieldIndex = schema.findIndex(d => d.name === valueField);\n const seriesKeyIndex = schema.findIndex(d => d.name === groupBy);\n const seriesKeys = data.map(d => d[seriesKeyIndex]).filter((item, pos, arr) => arr.indexOf(item) === pos).sort();\n\n const fieldNames = schema.reduce((acc, obj, i) => {\n acc[i] = obj.name;\n return acc;\n }, {});\n const dataArr = groupedData.map((arr) => {\n const tuples = {};\n const rowObj = arr.values.reduce((acc, row) => {\n acc = row.reduce((obj, value, i) => {\n if (i === seriesKeyIndex) {\n if (row[valueFieldIndex] instanceof InvalidAwareTypes) {\n row[valueFieldIndex] = null;\n }\n obj[value] = row[valueFieldIndex];\n tuples[value] = row;\n } else if (i !== valueFieldIndex) {\n obj[fieldNames[i]] = value;\n }\n return obj;\n }, acc);\n return acc;\n }, {});\n rowObj._tuple = tuples;\n // Set missing values field to zero value\n seriesKeys.forEach((seriesKey) => {\n if (rowObj[seriesKey] === undefined) {\n rowObj[seriesKey] = 0;\n const newArr = new Array(arr.values[0].length);\n newArr[uniqueFieldIndex] = arr.key;\n newArr[seriesKeyIndex] = seriesKey;\n rowObj._tuple[seriesKey] = newArr;\n }\n });\n return rowObj;\n });\n\n return {\n data: dataArr,\n keys: seriesKeys\n };\n};\n\n/**\n * Generate a stacked representation of data\n * @param {Array} schema schema Array\n * @param {Array} data data array\n * @param {Object} config Configuration object\n * @return {Array} stacked data\n */\nexport default (schema, data, config) => {\n const { uniqueField, value: valueField, groupBy } = config;\n const sort = config.sort || 'descending';\n const normalizedData = normalizeData(data, schema, valueField, uniqueField, groupBy);\n const keys = normalizedData.keys;\n const map = {};\n const orderBy = config.orderBy;\n const orderIndex = schema.findIndex(d => d.name === orderBy);\n const groupByIndex = schema.findIndex(d => d.name === groupBy);\n\n if (orderIndex !== -1) {\n keys.forEach((key) => {\n const name = data.find(d => d[groupByIndex] === key);\n map[key] = name[orderIndex];\n });\n normalizedData.keys.sort((a, b) => map[a].localeCompare(map[b]));\n }\n\n const stackData = stack({\n keys: normalizedData.keys,\n offset: config.offset || 'diverging',\n order: sort,\n data: normalizedData.data\n });\n\n stackData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n dataObj.data = dataObj.data._tuple[seriesData.key];\n });\n });\n\n return stackData;\n};\n\n","import {\n FieldType,\n getDomainFromData,\n setStyles,\n easeFns,\n selectElement,\n DimensionSubtype,\n retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps,\n defaultValue,\n isSimpleObject,\n InvalidAwareTypes\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nexport const transformColor = (colorAxis, datum, styleType, intensity, interactionType) => {\n const meta = datum.meta;\n const stateColor = defaultValue(meta.currentState[interactionType][styleType], meta.originalState[styleType]);\n const colorInfo = colorAxis.transformColor(stateColor, intensity);\n\n // meta.stateColor[styleType] = colorInfo.hsla;\n meta.currentState[interactionType][styleType] = colorInfo.hsla;\n return colorInfo;\n};\n\nexport const applyInteractionStyle = (context, selectionSet, interactionStyles, config) => {\n const elements = context.getPlotElementsFromSet(selectionSet);\n const { apply, interactionType, reset } = config;\n const mountPoint = selectElement(context.mount()).select('.muze-overlay-paths').node();\n\n elements.forEach((elem) => {\n const options = { mountPoint, apply, reset };\n context.applyLayerStyle(elem, interactionType, interactionStyles, options);\n\n // const interactionStylesEntries = Object.entries(interactionStyles.style);\n\n // for (const [type, value] of interactionStylesEntries) {\n // const style = { type, value };\n // const options = { mountPoint, apply, reset };\n // context.applyLayerStyle(elem, interactionType, style, options);\n // }\n });\n};\n\nexport const retrieveEncodingInf = (encoding, fieldsConfig, encodingNames) => {\n const encodingInf = {};\n\n encodingNames\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n return encodingInf;\n};\n\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const fields = [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT];\n return retrieveEncodingInf(encoding, fieldsConfig, fields);\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const fields = [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT];\n return retrieveEncodingInf(encoding, fieldsConfig, fields);\n }\n};\n\nexport const setNullsInStack = (transformedData, schema, value, setNulls) => {\n const uniqueFieldIndex = schema.findIndex(d => d.name === value);\n transformedData.forEach((seriesData) => {\n seriesData.forEach((dataObj) => {\n if (dataObj.data[uniqueFieldIndex] === null && !setNulls) {\n dataObj[0] = new InvalidAwareTypes();\n dataObj[1] = new InvalidAwareTypes();\n }\n });\n });\n return transformedData;\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\n */\nexport const transformData = (dataModel, config, transformType, encodingFieldInf) => {\n const data = dataModel.getData({ withUid: true });\n const schema = data.schema;\n const { transform, connectNullData: setNullData } = config;\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = encodingFieldInf;\n const uniqueField = xFieldType === FieldType.MEASURE ? yField : xField;\n const value = yFieldType === FieldType.MEASURE ? yField : xField;\n let transformedData = transformFactory(transformType)(schema, data.data, {\n groupBy: transform.groupBy,\n uniqueField,\n sort: transform.sort || 'none',\n offset: transform.offset,\n orderBy: transform.orderBy,\n value\n }, data.uids);\n\n if (transformType === STACK) {\n transformedData = setNullsInStack(transformedData, schema, value, setNullData);\n }\n return transformedData;\n};\n\nexport const getIndividualClassName = (d, i, data, context) => {\n const className = context.config().individualClassName;\n let classNameStr = '';\n if (className instanceof Function) {\n classNameStr = className(d, i, data, context);\n }\n return classNameStr;\n};\n\nexport const dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\n const {\n xFieldType,\n xFieldIndex,\n yFieldIndex,\n x0FieldIndex,\n y0FieldIndex\n } = encodingFieldInf;\n const fieldsArr = Object.keys(fieldsConfig);\n const fieldsLen = fieldsArr.length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map((data) => {\n const values = transformType === GROUP ? data.values : data;\n return values.map((d) => {\n let pointObj = {};\n let tuple;\n if (transformType === STACK) {\n tuple = d.data || [];\n let y;\n let y0;\n let x;\n let x0;\n if (d[1] >= d[0]) {\n y = x0 = d[1];\n x = y0 = d[0];\n } else {\n y = x0 = d[0];\n x = y0 = d[1];\n }\n\n pointObj = xFieldType === FieldType.MEASURE ? {\n x,\n x0,\n y: tuple[yFieldIndex],\n y0: tuple[yFieldIndex]\n } : {\n x: tuple[xFieldIndex],\n x0: tuple[xFieldIndex],\n y,\n y0\n };\n pointObj.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n const source = pointObj.source;\n pointObj.dataObj = fieldsArr.reduce((acc, name) => {\n acc[name] = source[fieldsConfig[name].index];\n return acc;\n }, {});\n return pointObj;\n });\n }).filter(d => d.length);\n }\n};\n/*\n * This method resolves the x, y, x0 and y0 values from the transformed data.\n * It also checks the type of transformed data for example, if it is a stacked data\n * then it fetches the y and y0 values from the stacked data.\n * @param {Array.} transformedData transformed data\n * @param {Object} fieldsConfig field definitions\n * @param {string} transformType type of transformed data - stack, group or identity.\n * @return {Array.} Normalized data\n*/\nexport const getNormalizedData = (transformedData, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\n const {\n xFieldSubType,\n yFieldSubType,\n xField,\n yField,\n x0Field,\n y0Field\n } = encodingFieldInf;\n const domains = {};\n const yEnc = ENCODING.Y;\n const xEnc = ENCODING.X;\n if (xField) {\n domains.x = getDomainFromData(data, x0Field || transformType === STACK ? [xEnc, ENCODING.X0] : [xEnc, xEnc],\n xFieldSubType);\n }\n if (yField) {\n domains.y = getDomainFromData(data, y0Field || transformType === STACK ? [ENCODING.Y0, ENCODING.Y] :\n [yEnc, yEnc], yFieldSubType);\n }\n\n return domains;\n }\n};\n\nconst defFn = (d) => {\n const { x, y } = d.update;\n return {\n x,\n y\n };\n};\n\nexport const attachDataToVoronoi = (voronoi, points, accessor = defFn) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== undefined).map((d) => {\n const { x, y } = accessor(d);\n return {\n x,\n y,\n data: d\n };\n }));\n};\n\n/**\n *\n *\n * @param {*} target\n * @param {*} styles\n * @param {*} remove\n */\nexport const updateStyle = (target, styles, remove) => {\n for (const key in styles) {\n if ({}.hasOwnProperty.call(styles, key)) {\n target.style(key, remove ? null : styles[key]);\n }\n }\n};\n\n/**\n *\n *\n * @param {*} mount\n * @param {*} context\n */\nexport const animateGroup = (mount, context) => {\n let groupTransition;\n let update;\n const { transition, groupAnimateStyle } = context;\n const { duration, effect, disabled } = transition;\n if (groupAnimateStyle) {\n setStyles(mount.node(), groupAnimateStyle.enter);\n update = groupAnimateStyle.update;\n if (!disabled) {\n groupTransition = mount.transition()\n .ease(easeFns[effect])\n .duration(duration)\n .on('end', function () {\n updateStyle(selectElement(this), update, true);\n });\n } else {\n groupTransition = mount;\n }\n updateStyle(groupTransition, update);\n }\n};\n\nexport const positionPoints = (context, points) => {\n const positioner = context.encodingTransform();\n if (positioner) {\n return positioner(points, context, { smartLabel: context._dependencies.smartLabel });\n }\n return points;\n};\n\n/**\n * Gets the width of each group. It gets the width from axis if it is available for\n * example when the scale is nominal else it calculates the width from the\n * range of the axis and number of data points.\n *\n * @param {SimpleAxis} axis instance of axis\n * @param {number} minDiff Minimum difference between data points\n * @return {number} width of each bar\n * @private\n*/\nexport const getGroupSpan = (axis, minDiff) => {\n let groupSpan;\n const width = axis.getUnitWidth();\n const scale = axis.scale();\n const range = scale.range();\n const domain = scale.domain();\n !width ? groupSpan = (Math.abs(range[1] - range[0]) / Math.abs(domain[1] - domain[0])) * minDiff :\n (groupSpan = width);\n\n return groupSpan;\n};\n\nexport const getPlotMeasurement = (context, dimensionalValues) => {\n const fieldInfo = context.encodingFieldsInf();\n const axes = context.axes();\n const transformType = context.transformType();\n const config = context.config();\n const bandScale = context._bandScale;\n\n return ['x', 'y'].map((type) => {\n let span = 0;\n let groupSpan = 0;\n let padding = 0;\n let offsetValues = [];\n if (fieldInfo[`${type}FieldType`] === FieldType.DIMENSION) {\n let actualGroupWidth;\n const isTemporal = fieldInfo[`${type}FieldSubType`] === DimensionSubtype.TEMPORAL;\n const timeDiff = isTemporal ? context.dataProps().timeDiffs[type] : 0;\n const axis = axes[type];\n const pad = config[`pad${type.toUpperCase()}`];\n const innerPadding = config.innerPadding;\n const keys = dimensionalValues;\n const scale = axis.scale();\n groupSpan = getGroupSpan(axis, timeDiff);\n const isAxisBandScale = axis.constructor.type() === BAND;\n const axisPadding = axis.config().padding;\n // If it is a grouped bar then the width of each bar in a grouping is retrieved from\n // a band scale. The band scale will have range equal to width of one group of bars and\n // the domain is set to series keys.\n if (transformType === 'group') {\n const groupPadding = isAxisBandScale ? 0 : axisPadding * groupSpan / 2;\n bandScale.range([groupPadding, groupSpan - groupPadding]).domain(keys).paddingInner(innerPadding);\n span = bandScale.bandwidth();\n actualGroupWidth = groupSpan - (isAxisBandScale ? 0 : axisPadding * groupSpan);\n offsetValues = keys.map(key => bandScale(key) - (isAxisBandScale ? 0 : (groupSpan / 2)));\n } else if (pad !== undefined) {\n let offset;\n if (isAxisBandScale) {\n const step = scale.step();\n offset = scale.padding() * step;\n span = scale.bandwidth() + offset;\n } else {\n span = groupSpan;\n }\n offsetValues = keys.map(() => (isAxisBandScale ? -(offset / 2) : -(span / 2)));\n } else {\n padding = isAxisBandScale ? 0 : axisPadding * groupSpan;\n span = groupSpan - padding;\n actualGroupWidth = span;\n offsetValues = keys.map(() => (isAxisBandScale ? 0 : -(span / 2)));\n }\n\n groupSpan = actualGroupWidth;\n padding = isAxisBandScale ? axisPadding * axis.scale().step() : axisPadding * groupSpan;\n }\n\n return {\n span,\n offsetValues,\n groupSpan,\n padding\n };\n });\n};\n\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n const { xField, yField, xFieldType, yFieldType } = encodingFieldInf;\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n\n return [\n !xField,\n !yField,\n !groupByField,\n getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE,\n xFieldType === FieldType.DIMENSION && yFieldType === FieldType.DIMENSION,\n dimensionField && encodingFieldInf[dimensionField] === groupByField\n ];\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates(encodingFieldInf, context, groupByField).some(value => value)) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (initialStyle, conf = {}) => ({\n originalStyle: Object.assign({}, {\n styles: initialStyle\n }, conf),\n currentState: new Map()\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n\nexport const getBoundBoxes = points => points.map((point) => {\n const { x, y } = point.update;\n const data = point.data;\n return {\n minX: x,\n maxX: x,\n minY: y,\n maxY: y,\n data\n };\n});\n\nexport const getDataFromEvent = (context, event, data) => {\n const dataPoint = data || selectElement(event.target).data()[0];\n if (isSimpleObject(dataPoint) && getObjProp(dataPoint, 'meta', 'layerId') === context.id()) {\n const values = dataPoint && dataPoint.source;\n let identifiers = null;\n if (values) {\n identifiers = context.getIdentifiersFromData(values, dataPoint.rowId);\n }\n return {\n dimensions: [dataPoint],\n id: identifiers,\n layerId: context.id()\n };\n }\n return null;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [prevData, data]) => {\n context.dataDidSet([prevData, data]);\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import { partition } from 'muze-utils';\n\nconst getLastItemInMap = map => Array.from(map)[map.size - 1];\n\nconst getPreviousStyle = (meta, interactionType) => {\n const { originalStyle, currentState } = meta;\n let stylesForCurrentLevel = Object.assign({}, originalStyle);\n\n if (currentState.size > 0) {\n interactionType = getLastItemInMap(currentState)[0];\n stylesForCurrentLevel = currentState.get(interactionType) || {};\n // const elemFill = elem.style('fill');\n // const newStyle = Object.assign({}, stylesForCurrentLevel, { fill: elemFill });\n }\n return stylesForCurrentLevel;\n};\n\nconst strokeProps = {\n 'stroke-width': 1,\n stroke: 1,\n 'stroke-opacity': 1\n};\n\nconst parseStyle = (value, { datum, datumStyle }, apply) => {\n if (typeof value === 'function') {\n if (isNaN(datumStyle)) {\n // const colorType = detectColor(datumStyle);\n const rgbaValues = datumStyle.replace(/[^\\d,.]/g, '').split(',').map(s => Number(s));\n value = value(rgbaValues, datum, apply);\n } else {\n const numValue = parseFloat(datumStyle, 10);\n value = value(numValue, datum, apply);\n }\n return value;\n }\n return value;\n};\n\nexport const applyStylesOnInteraction = (context, elem, interactionType, conf, options) => {\n const { mountPoint, apply, reset } = options;\n\n const d = elem.data()[0];\n let datum;\n\n if (Array.isArray(d)) {\n datum = d[0];\n } else {\n datum = Array.isArray(d.data) ? d.data[0] : d;\n }\n const { currentState, originalStyle } = datum.meta;\n\n let applicableStyles = {};\n\n const { style: styles, strokePosition } = conf;\n let applicableStrokePos = strokePosition;\n\n if (reset) {\n currentState.clear();\n }\n\n let applyStyle = true;\n\n if (apply) {\n const sanitizedStyles = {\n styles: {},\n strokePosition\n };\n for (const type in styles) {\n const parsedStyleVal = parseStyle(styles[type], {\n datum,\n datumStyle: elem.style(type)\n }, apply);\n\n sanitizedStyles.styles[type] = parsedStyleVal;\n }\n currentState.set(interactionType, sanitizedStyles);\n applicableStyles = sanitizedStyles.styles;\n } else if (!currentState.has(interactionType) && !reset) {\n applyStyle = false;\n } else {\n currentState.delete(interactionType);\n const currentStyle = getPreviousStyle(datum.meta, interactionType);\n applicableStyles = Object.assign({}, originalStyle.styles, currentStyle.styles);\n applicableStrokePos = currentStyle.strokePosition || originalStyle.strokePosition;\n }\n\n const styleKeys = Object.keys(applicableStyles);\n const [strokeStyles, otherStyles] = partition(styleKeys, v => v in strokeProps);\n\n applyStyle && context.applyStyles({\n strokeStyles,\n otherStyles,\n styleObj: applicableStyles,\n elem,\n datum,\n applicableStrokePos,\n mountPoint\n });\n};\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n transactor,\n defaultValue,\n getObjProp,\n InvalidAwareTypes\n} from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer,\n encodingFieldInfRetriever\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\nimport { BASE_LAYER, AREA_LAYER } from '../enums/constants';\nimport { applyStylesOnInteraction } from './helper';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\nexport const BaseLayerMixin = superclass => class extends superclass {\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\n * @param {DataModel} data Instance of DataModel to be used. This DataModel instance serves as the data for a\n * layer.\n * @param {Object} axes Axes instances to be used for rendering the layer. Axes are used for mapping data from\n * value to px.\n * @param {SimpleAxis} axes.x X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {SimpleAxis} axes.y X axis of the layer. Based on the type of variable it gets instance of BandAxis,\n * TimeAxis, ContinuousAxis\n * @param {ColorAxis} axes.color Axis for coloring a layer using color interpolators\n * @param {ShapeAxis} axes.shape Axis for providing a shape\n * @param {SizeAxis} axes.size Axis for determining size of a mark using size interpolator\n * @param {LayerConfig} config Configuration of the layer\n * @param {Object} dependencies Dependencies of the layer\n * @param {SmartLabel} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor () {\n super();\n\n generateGetterSetters(this, this.constructor.getterSetters());\n this.axes({});\n this.alias(this.constructor.formalName() + getUniqueId());\n this._points = [];\n this._cachedData = [];\n this._id = getUniqueId();\n this._measurement = {};\n this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(this.localOptions()).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: this.getRenderProps(),\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = this.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BASE_LAYER, this);\n\n transactor(this, this.constructor.localOptions(), store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\n }\n\n /**\n * Creates a layer instance\n * @return {BaseLayer} Instance of a layer\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Default configuration of the layer. This configuration gets merged to the user passed configuration using a\n * plolicy. Base layer only returns part of configuraion, any layer overridding base layer should return its own\n * configuration.\n *\n * @public\n * @static\n *\n * @return {Object} Default configuration\n */\n static defaultConfig () {\n return {\n transform: {\n type: 'identity'\n }\n };\n }\n\n static getterSetters () {\n return props;\n }\n\n static localOptions () {\n return localOptions;\n }\n /**\n * Policy defines how user config gets merged to default config. The default policy here does a deep copy\n * operation.\n * Any policy which does more than deep copying should define the policy as a static member.\n *\n * @static\n * @public\n *\n * @param {LayerConfig} conf Configuration with which the user config will be merged\n * @param {LayerConfig} userConf Configuration given by the user\n *\n * @return {LayerConfig} Merged layer configuration\n */\n static defaultPolicy (conf, userConf) {\n return mergeRecursive(conf, userConf);\n }\n\n /**\n * Provides a alias for a layer. Like it's possible to have same layer (like bar) multiple times, but among\n * multiple layers of same type if one layer has to be referred, alias is used. If no alias is given then\n * `formalName` is set as the alias name.\n *\n *\n * If used as setter\n * @param {string} alias Name of the alias\n * @return {BaseLayer} Instance of current base layer\n *\n * If used as getter\n * @return {string} Alias of the current layer\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n this._alias = params[0];\n return this;\n }\n return this._alias || this.constructor.formalName();\n }\n\n enableCaching () {\n this._cacheEnabled = true;\n return this;\n }\n\n clearCaching () {\n this._cacheEnabled = false;\n return this.data(this._cachedData[0]);\n }\n\n /**\n * Serialize the schema. Merge config is used for serialization.\n *\n * @public\n *\n * @return {LayerConfig} Serialized schema\n */\n serialize () {\n return this.config();\n }\n\n /**\n * Returns the unique identifier of this layer. Id is auto generated during the creation proceess of a schema.\n *\n * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first gets the transform method from transform factory based on type of transform. It then calls the\n * transform method with the data and passes the configuration parameters of transform such as\n * groupBy, value field, etc.\n *\n * @param {DataModel} dataModel Instance of DataModel\n * @param {Object} config Configuration for transforming data\n * @return {Array.} Transformed data.\n */\n getTransformedData (dataModel, config, transformType, encodingFieldsInf) {\n return transformData(dataModel, config, transformType, encodingFieldsInf);\n }\n\n /**\n * Calculates the domain from the data.\n * It checks the type of field and calculates the domain based on that. For example, if it\n * is a quantitative or temporal field, then it calculates the min and max from the data or\n * if it is a categorical field then it gets all the values from the data of that field.\n * @param {Array} data DataArray\n * @param {Object} fieldsConfig Configuration of fields\n * @return {Array} Domain values array.\n */\n calculateDomainFromData (data) {\n let domains = {};\n const isEmpty = this.data().isEmpty();\n\n if (!isEmpty) {\n domains = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static shouldDrawAnchors () {\n return false;\n }\n\n /**\n * Returns the domain for the axis.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getDataDomain (encodingType) {\n const { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n getUidsFromPayload ({ model, uids }, targetData) {\n let uidsArr = uids;\n let dm = model;\n\n if (targetData) {\n const targetFields = targetData[0];\n const targetVals = targetData.slice(1, targetData.length);\n const payloadMap = targetVals.reduce((acc, v) => {\n acc[v] = v;\n return acc;\n }, {});\n const measures = Object.keys(this.data().getFieldspace().getMeasure());\n\n dm = model.select((fields) => {\n const row = `${targetFields.map((field) => {\n let val;\n if (field === ReservedFields.MEASURE_NAMES) {\n val = measures;\n } else if (field === ReservedFields.ROW_ID) {\n val = fields[ReservedFields.ROW_ID];\n } else {\n const currentField = fields[field];\n const isFieldInvalid = currentField instanceof InvalidAwareTypes;\n\n val = isFieldInvalid ? currentField.value() : (currentField || {}).internalValue;\n }\n return val;\n })}`;\n return row in payloadMap;\n }, {\n saveChild: false\n });\n\n const dmUids = dm.getUids();\n uidsArr = uids.filter(d => dmUids.find(id => `${id}` === `${d[0]}`));\n }\n\n return {\n model: dm,\n uids: uidsArr,\n length: uidsArr.length\n };\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the\n * data // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, options) {\n const interactionConfig = this.config().interaction || {};\n const { apply, styles, reset } = options;\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType,\n reset\n });\n }\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\n return this._transformType;\n }\n\n /**\n * Renders the layer\n * @return {BaseLayer} Instance of the layer.\n */\n render () {\n return this;\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BASE_LAYER);\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n * Stores point in an object with key as the categorical value or temporal value\n *\n * @param {string} key categorical value or temporal value\n * @param {Object} data Information of the data point\n * @return {BarLayer} Instance of bar layer\n */\n cachePoint (key, data) {\n if (key === null) {\n return this;\n }\n const pointMap = this._pointMap;\n !pointMap[key] && (pointMap[key] = []);\n pointMap[key].push(data);\n return this;\n }\n\n getInteractionStyles () {\n return applyStylesOnInteraction;\n }\n\n addOverlayPath () {\n return null;\n }\n\n removeOverlayPath () {\n return null;\n }\n\n applyLayerStyle (elem, interactionType, style, options) {\n const interactionFn = this.getInteractionStyles();\n return interactionFn(this, elem, interactionType, style, options);\n }\n\n getIdentifiersFromData (data, rowId) {\n const schema = this.data().getSchema();\n const fieldsConfig = this.data().getFieldsConfig();\n const identifiers = [[], []];\n\n const allMeasures = schema.every(field => field.type === FieldType.MEASURE);\n schema.forEach((d, i) => {\n const name = d.name;\n const { type } = fieldsConfig[name].def;\n if (type === FieldType.DIMENSION) {\n identifiers[0].push(name);\n identifiers[1].push(data[i]);\n }\n });\n\n const measures = schema.filter(d => d.type === FieldType.MEASURE).map(d => d.name);\n if (allMeasures) {\n identifiers[0].push(...[ReservedFields.ROW_ID]);\n identifiers[1].push(...[rowId]);\n }\n if (measures.length) {\n identifiers[0].push(ReservedFields.MEASURE_NAMES);\n identifiers[1].push(measures.join());\n }\n return identifiers;\n }\n\n hasPlotSpan () {\n return false;\n }\n\n getPlotSpan () {\n return {\n x: 0,\n y: 0\n };\n }\n\n getPlotPadding () {\n return {\n x: 0,\n y: 0\n };\n }\n\n /**\n * Returns the information of the marks corresponding to the supplied identifiers.\n * Identifiers are a set of field names and their corresponding values in an array.\n * It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\n */\n getPointsFromIdentifiers (identifiers, config = {}) {\n const getAllAttrs = config.getAllAttrs;\n const getBBox = config.getBBox;\n if (!this.data()) {\n return [];\n }\n let fieldNames;\n let values;\n if (identifiers instanceof DataModel) {\n const dataObj = identifiers.getData();\n fieldNames = dataObj.schema.map(d => d.name);\n values = dataObj.data;\n } else {\n fieldNames = identifiers[0];\n values = identifiers.slice(1, identifiers.length);\n }\n\n const points = this._points;\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPoints = [].concat(...points).filter((point) => {\n const { source, rowId } = point;\n\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n return getAllAttrs ? filteredPoints : filteredPoints.map((d) => {\n const obj = clone(d);\n if (getBBox) {\n const update = obj.update || obj;\n if (obj.size !== undefined) {\n const sizeVal = Math.sqrt(obj.size / Math.PI) * 2;\n update.width = sizeVal;\n update.height = sizeVal;\n update.x -= sizeVal / 2;\n update.y -= sizeVal / 2;\n } else {\n if (update.width === undefined) {\n update.width = 2;\n }\n if (update.height === undefined) {\n update.height = 2;\n }\n }\n }\n\n return obj.update || obj;\n }).sort((a, b) => a.y - b.y);\n }\n\n getTransformedDataFromIdentifiers (identifiers, idx = 0) {\n const { data: identifierData, schema: identifierSchema } = identifiers.getData();\n const normalizedData = this._normalizedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const {\n yField,\n xField,\n yFieldType,\n xFieldType\n } = this.encodingFieldsInf();\n let measureIndex;\n let enc;\n if (xFieldType === FieldType.MEASURE) {\n measureIndex = fieldsConfig[xField].index;\n enc = 'x';\n } else if (yFieldType === FieldType.MEASURE) {\n const layerName = this.constructor.formalName();\n measureIndex = fieldsConfig[yField].index;\n enc = 'y';\n if (layerName === AREA_LAYER) {\n enc = (idx % 2 === 0) ? 'y' : 'y0';\n }\n }\n\n const transformedData = [];\n normalizedData.forEach((dataArr) => {\n dataArr.forEach((dataObj) => {\n const tupleArr = dataObj.source;\n const exist = identifierSchema.every((obj, i) =>\n identifierData.findIndex(d => tupleArr[fieldsConfig[obj.name].index] === d[i]) !== -1);\n if (exist) {\n const transformedVal = dataObj[enc] || 0;\n const row = dataObj.source;\n const tuple = {};\n for (const key in fieldsConfig) {\n const index = fieldsConfig[key].index;\n tuple[key] = row[index];\n if (index === measureIndex) {\n tuple[key] = transformedVal;\n }\n }\n transformedData.push(tuple);\n }\n });\n });\n\n return [transformedData, this.data().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids,\n * it returns all the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n /**\n * Called when the layer datamodel is set.\n *\n * @param {Array} arr Old and new datamodel instance.\n * @param {DataModel} arr[0] Previous datamodel instance.\n * @param {DataModel} arr[1] Current datamodel instance.\n *\n * @return {BaseLayer} Instance of layer.\n */\n dataDidSet ([, data]) {\n const config = this.config();\n\n if (data && config) {\n if (this._cacheEnabled) {\n this._cachedData.push(data);\n } else {\n this._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = this.retrieveEncodingFields(encodingValue, this.coord(), data);\n this.encodingFieldsInf(encodingFieldsInf);\n this.resolveTransformType();\n this._transformedData = this.getTransformedData(data, config,\n this.transformType(), encodingFieldsInf);\n this._normalizedData = this.getNormalizedData(this._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = this.calculateDomainFromData(this._normalizedData,\n this.encodingFieldsInf(), this.data().getFieldsConfig());\n this.domain(domain);\n }\n }\n }\n return this;\n }\n\n retrieveEncodingFields (encoding, coord, data) {\n const fieldsConfig = data.getFieldsConfig();\n\n return encodingFieldInfRetriever[coord](encoding, fieldsConfig);\n }\n\n static getRenderProps () {\n return [`${layerNs[1]}.${PROPS.DATA}`, ...['x', 'y', 'radius'].map(type =>\n `${groupNs}.domain.${type}`)];\n }\n\n applyStyles ({ strokeStyles, otherStyles, styleObj, elem, mountPoint, applicableStrokePos, datum }) {\n strokeStyles.forEach((type) => {\n this.addOverlayPath(\n elem.node(),\n datum,\n { type, value: styleObj[type] },\n applicableStrokePos,\n mountPoint\n );\n });\n\n this.applyElementStyles(elem, otherStyles, styleObj);\n }\n\n applyElementStyles (elem, styles, styleObj) {\n styles.forEach((type) => {\n elem.style(type, styleObj[type]);\n });\n }\n\n getBoundBoxes () {\n return null;\n }\n};\n","import {\n mix\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport { BaseLayerMixin } from './base-mixin';\nimport { BASE_LAYER } from '../enums/constants';\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\n * - calculating data domain\n * - linking dependent layers\n * - merging policy of configuration\n * - interaction sideffect helpers\n * - retrieving dom elements from data using id\n * - retrieving the physical dimensions of marks\n * - disposing layer\n *\n * Every layer has to extend base layer and give concrete definition.\n * This layer does not have any default visual. A new layer has to define the logic of `render` for rendering the\n * visuals\n *\n * @public\n * @class\n * @module BaseLayer\n */\nexport default class BaseLayer extends mix(SimpleLayer).with(BaseLayerMixin) {\n /**\n * Determines a name for a layer. This name of the layer is used in the input data to refer to this layer.\n * ```\n * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return BASE_LAYER;\n }\n}\n","import {\n selectElement,\n makeElement,\n pathInterpolators,\n Symbols,\n setStyles\n} from 'muze-utils';\nimport { updateStyle } from '../../helpers';\n\nconst line = Symbols.line;\n\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\n\nconst containsNull = (elem) => {\n const { x, y } = elem ? elem.update : {};\n if (x === null || y === null) {\n return true;\n }\n return false;\n};\n\nconst settIndexPrevOrNext = (arr, index, indexesObj) => {\n const prevContainsNull = containsNull(arr[index - 1], index - 1);\n const nextContainsNull = containsNull(arr[index + 1], index + 1);\n\n !prevContainsNull && indexesObj.prevOfNull.push(index - 1);\n !nextContainsNull && indexesObj.nextOfNull.push(index + 1);\n};\n\nconst getborderIndexes = (arr) => {\n const indexes = {\n prevOfNull: [],\n nextOfNull: []\n };\n arr.forEach((value, index) => {\n const { update } = value;\n if (update.y === null || update.x === null) {\n settIndexPrevOrNext(arr, index, indexes);\n }\n });\n return indexes;\n};\n\nconst makeStartEndPair = (arr, borderIndexes) => {\n const pairArray = [];\n const { prevOfNull, nextOfNull } = borderIndexes;\n const length = prevOfNull.length;\n if (!length) {\n return pairArray;\n }\n\n for (let i = 0; i < length; i++) {\n const pair = [];\n const prevValue = arr[prevOfNull[i]];\n const nextValue = arr[nextOfNull[i]];\n if (prevValue) {\n pair.push(prevValue);\n }\n if (nextValue) {\n pair.push(nextValue);\n }\n pairArray.push(pair);\n }\n return pairArray;\n};\n\nconst sanitizeNullConfig = (arr) => {\n const borderIndexes = getborderIndexes(arr);\n return makeStartEndPair(arr, borderIndexes);\n};\n\nconst getElementsForLine = (params) => {\n const { mount, data, className, layer, strokeStyle, linepath, transition, updateFns } = params;\n let element = makeElement(mount, 'path', data.length ? [data] : [], className, updateFns);\n element.attr('class', (d, i) => d[i].className);\n setStyles(element, strokeStyle);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n element.attr('d', linepath(data))\n .style('fill-opacity', 0);\n return element;\n};\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nexport const drawLine = (context) => {\n const { layer, container, points, interpolate, connectNullData, className, style, transition } = context;\n const containerSelection = selectElement(container);\n const strokeStyle = layer.config().nullDataLineStyle;\n const nullDataLineClass = layer.config().nullDataLineClass;\n const mount = containerSelection.attr('class', className);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(d => d.update.x)\n .y(d => d.update.y)\n .defined(filterFn);\n\n const graphicElems = layer._graphicElems;\n const updateFns = {\n update: (group, d) => {\n d.forEach((dd) => {\n graphicElems[dd.rowId] = containerSelection;\n });\n }\n };\n\n updateStyle(mount, style);\n\n const elementWithNullData = getElementsForLine({\n mount,\n data: points,\n strokeStyle: undefined,\n layer,\n linepath,\n transition,\n updateFns\n });\n const sanitizedPoints = sanitizeNullConfig(points);\n\n sanitizedPoints.map((d) => {\n if (connectNullData && d.length > 1) {\n getElementsForLine({\n mount,\n data: d,\n strokeStyle,\n className: `.${className}-${nullDataLineClass}`,\n layer,\n linepath,\n transition,\n updateFns\n });\n }\n return null;\n });\n return elementWithNullData;\n};\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-line',\n className: '',\n interpolate: 'linear',\n transform: {\n type: 'group'\n },\n interaction: {\n fade: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n focus: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n brushStroke: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n crossline: true,\n nearestPointThreshold: 20,\n encoding: {\n color: {},\n x: {},\n y: {},\n strokeOpacity: {\n value: 1\n },\n fillOpacity: {\n value: 0\n },\n strokeWidth: {\n value: '2px'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false,\n nullDataLineStyle: {},\n nullDataLineClass: 'null'\n};\n","import {\n Voronoi,\n getQualifiedClassName,\n selectElement,\n makeElement,\n FieldType,\n InvalidAwareTypes,\n getObjProp\n} from 'muze-utils';\nimport { drawLine } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData,\n getBoundBoxes\n} from '../../helpers';\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport const LineLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of LineLayer.\n *\n * @param {*} args\n * @memberof LineLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n }\n\n static formalName () {\n return 'line';\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Default configuration of line layer\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = super.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField && !transform.groupBy) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n /**\n * Returns the draw method for line\n * @return {Function} Draw method of line layer\n */\n getDrawFn () {\n return drawLine;\n }\n\n static shouldDrawAnchors () {\n return true;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @param {number} seriesIndex index of series\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const axes = this.axes();\n const encoding = this.config().encoding;\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = this.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const style = {\n stroke: resolvedEncodings.color,\n 'fill-opacity': encoding.fillOpacity.value,\n 'stroke-width': encoding.strokeWidth.value\n };\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style,\n rowId: d.rowId,\n source: d.source,\n data: d.dataObj,\n meta: getColorMetaInf(style)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n getTranslatedData (normalizedData, colorValFn, colorFieldIndex, axes) {\n return normalizedData.map((data, i) => {\n let color;\n const colorVal = data.find(d => d.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(data, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n return {\n data: this.translatePoints(data),\n style: this.getPathStyle(color)\n };\n });\n }\n\n /**\n * Renders the line plot\n * @param {SVGElement} container svg element\n * @return {LineLayer} instance of line layer\n */\n render (container) {\n const config = this.config();\n const {\n encoding,\n interpolate,\n className,\n defClassName,\n transition\n } = config;\n const normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const keys = transformedData.map(d => d.key);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n const colorField = encoding.color.field;\n const colorFieldIndex = fieldsConfig[colorField] && fieldsConfig[colorField].index;\n\n this._points = [];\n this._pointMap = {};\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n\n const colorValFn = encoding.color.value;\n const translatedPoints = this.getTranslatedData(normalizedData, colorValFn, colorFieldIndex, axes);\n\n makeElement(container, 'g', translatedPoints, null, {\n enter: (group) => {\n animateGroup(group, {\n transition,\n groupAnimateStyle: {\n enter: {\n 'stroke-opacity': 0,\n 'fill-opacity': this.getPathStyle()['fill-opacity']\n },\n update: {\n 'stroke-opacity': encoding.strokeOpacity.value\n }\n }\n });\n },\n update: (group, dataArr, i) => {\n const points = dataArr.data;\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n const style = dataArr.style;\n\n this._points.push(points);\n this.getDrawFn()({\n layer: this,\n container: group.node(),\n interpolate,\n points,\n className: seriesClassName,\n transition,\n style: style || {},\n connectNullData: config.connectNullData\n });\n }\n }, d => d.data[0].source[colorFieldIndex] || d.data[0].rowId);\n\n attachDataToVoronoi(this._voronoi, this._points);\n return this;\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n stroke: color,\n 'fill-opacity': '0'\n };\n }\n\n /**\n * Gets the nearest point closest to the given position\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point information\n */\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n const point = this._voronoi.find(x, y, searchRadius);\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n\n applyStyles ({ strokeStyles, otherStyles, styleObj, elem }) {\n [...otherStyles, ...strokeStyles].forEach((type) => {\n elem.style(type, styleObj[type]);\n });\n }\n\n getBoundBoxes () {\n return getBoundBoxes(this._points.flat());\n }\n};\n","import { CLASSPREFIX, STACK } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-area',\n className: '',\n interpolate: 'linear',\n transform: {\n type: STACK\n },\n interaction: {\n fade: {\n style: {\n 'fill-opacity': 0.7\n }\n },\n focus: {\n style: {\n 'fill-opacity': 0.7\n }\n },\n brushStroke: {\n style: {\n 'fill-opacity': 0.7\n }\n }\n },\n crossline: true,\n nearestPointThreshold: 10,\n encoding: {\n color: {},\n x: {},\n y: {},\n y0: {},\n strokeOpacity: {\n value: 1\n },\n fillOpacity: {\n value: 0.3\n }\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n connectNullData: false\n};\n","import {\n easeFns,\n selectElement,\n pathInterpolators,\n Symbols\n} from 'muze-utils';\n\nconst area = Symbols.area;\n\n/**\n * Draws a line from the points\n * Generates a svg path string\n * @param {Object} params Contains container, points and interpolate attribute.\n */\nconst /* istanbul ignore next */ drawArea = (params) => {\n const { layer, container, style, points, transition, className, interpolate, connectNullData } = params;\n const graphicElems = layer._graphicElems;\n const { effect: easeEffect, duration } = transition;\n const mount = selectElement(container);\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const selection = mount.selectAll('path').data(points.length ? [points] : []);\n const [enterAreaPath, updateAreaPath] = ['enter', 'update'].map(e => area().curve(curveInterpolatorFn)\n .x(d => d[e].x)\n .y1(d => d[e].y)\n .y0(d => d[e].y0)\n .defined(d => d[e].y !== null));\n\n mount.attr('class', className);\n\n let filteredPoints = points;\n if (connectNullData) {\n filteredPoints = filteredPoints.filter(d => d.update.y !== null);\n }\n const selectionEnter = selection\n .enter()\n .append('path')\n .attr('d', enterAreaPath(filteredPoints))\n .each((d) => {\n d.forEach((dd) => {\n if (dd.rowId !== null) {\n graphicElems[dd.rowId] = mount.select('path');\n }\n });\n });\n\n selection.merge(selectionEnter).transition().ease(easeFns[easeEffect])\n .duration(duration)\n .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function () {\n const element = selectElement(this);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport drawArea from './renderer';\nimport './styles.scss';\nimport { STACK, ENCODING } from '../../enums/constants';\nimport {\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport const AreaLayerMixin = superclass => class extends superclass {\n\n /** Default configuration of area layer\n *\n * @return {Object} Default configuration of layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n * Calculates the domain from data. It calls its parent class's method which is line layer\n * to get the domain and overwrites the domain according to its need.\n * @return {Array} Domain values\n */\n calculateDomainFromData (data, encodingFieldsInf, fieldsConfig) {\n const domains = super.calculateDomainFromData(data, fieldsConfig);\n [ENCODING.X, ENCODING.Y].forEach((type) => {\n const { [`${type}FieldType`]: fieldType } = encodingFieldsInf;\n if (fieldType === FieldType.MEASURE && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\n }\n });\n return domains;\n }\n\n /**\n * Returns the drawing method of this layer\n * @return {Function} Draw method\n */\n getDrawFn () {\n return drawArea;\n }\n\n getNearestPoint (x, y, config) {\n let searchRadius = config.searchRadius;\n const data = this.data();\n\n if (!data || (data && data.isEmpty())) {\n return null;\n }\n\n searchRadius = searchRadius !== undefined ? searchRadius : this.config().nearestPointThreshold;\n let point = this._voronoi.find(x, y, searchRadius);\n let index;\n let nearestPoint = null;\n\n if (!point && config.dimValue && this._pointMap) {\n const pointArr = this._pointMap[config.dimValue[1][0]] || [];\n\n for (let i = 0, len = pointArr.length; i < len; i++) {\n const { y: pointY, y0: pointY0 } = pointArr[i].update;\n if (pointY < y && y < pointY0) {\n index = i;\n nearestPoint = pointArr[i];\n break;\n }\n }\n\n // Index is a number(0 or more)\n if (index !== undefined) {\n point = {\n index,\n data: {\n x,\n y,\n data: nearestPoint\n }\n };\n }\n }\n\n const dimensions = getObjProp(point, 'data', 'data', 'update');\n\n if (point) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y0: dimensions.y0,\n y: dimensions.y,\n width: 2,\n height: 2\n }],\n layerId: this.id()\n };\n }\n return null;\n }\n\n /**\n * Generates the x and y positions for each point\n * @param {Array} data Data Array\n * @param {Object} encoding Visual Encodings of the layer\n * @param {Object} axes Contains the axis\n * @return {Array} Array of points\n */\n translatePoints (data) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const encoding = config.encoding;\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.encodingFieldsInf();\n const { x: xAxis, y: yAxis } = axes;\n const classNameFn = config.individualClassName;\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y);\n const y0Px = (y0Field || transformType === STACK) ? yAxis.getScaleValue(d.y0) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const style = {\n fill: color,\n 'fill-opacity': encoding.fillOpacity.value\n };\n\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n data: d.dataObj,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta: getColorMetaInf(style)\n };\n point.className = getIndividualClassName(d, i, data, this);\n this.cachePoint(d[key], point);\n return point;\n });\n points = positionPoints(this, points);\n points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Get the css styles need to be applied on the line path\n * @param {string} color Color value\n * @return {Object} Path styles\n */\n getPathStyle (color) {\n return {\n fill: color,\n 'fill-opacity': 0.30\n };\n }\n};\n","import { mix } from 'muze-utils';\nimport { AREA_LAYER } from '../../enums/constants';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { LineLayerMixin } from '../line/line-mixin';\nimport { AreaLayerMixin } from './area-mixin';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\n */\nexport default class AreaLayer extends mix(BaseLayer).with(BaseLayerMixin, LineLayerMixin, AreaLayerMixin) {\n static formalName () {\n return AREA_LAYER;\n }\n}\n\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-arc',\n padding: { top: 1, bottom: 1, left: 1, right: 1 },\n className: '',\n interaction: {\n highlight: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.1\n }, data, apply).color\n }\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.3\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n height: 100,\n width: 100,\n sort: '',\n colors: ['#F44336', 'blue', 'green', 'yellow', 'orange', 'purple'],\n transform: {\n type: 'identity'\n },\n encoding: {\n 'stroke-width': {\n value: '2px'\n },\n 'stroke-linejoin': {\n value: 'round'\n },\n angle: {\n value: '1'\n },\n radius: {\n value: '1'\n },\n opacity: {\n value: '1'\n },\n color: {\n value: '1'\n },\n shape: {\n value: '1'\n },\n size: {\n value: '1'\n }\n },\n transition: {\n effect: 'cubic',\n duration: 500\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-arc-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-arc-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-arc-selected`\n }\n }\n};\n\n","import {\n makeElement,\n selectElement,\n getQualifiedClassName,\n isSimpleObject,\n Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\nexport const ArcLayerMixin = superclass => class extends superclass {\n constructor (data, axes, config, dependencies) {\n super(data, axes, config, dependencies);\n this._prevPieData = {};\n }\n\n /**\n * returns the default configuration of the layer\n *\n * @static\n * @return {Object} Default configuration for arc layer\n * @memberof ArcLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\n }\n\n getNearestPoint (x, y, config = {}) {\n return this.getDataFromEvent(config.event);\n }\n\n getDataFromEvent (event) {\n const dataPoint = selectElement(event.target).data()[0];\n if (isSimpleObject(dataPoint)) {\n const { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf({\n fill: color\n }),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, this);\n return `${qualClassName[0]}-path ${qualClassName[1]}-path-${d.index}\n ${individualClass}`;\n });\n };\n const consecutiveExits = [];\n let exitCounter = 0;\n const tweenExit = (elem, d) => {\n let exitArr = consecutiveExits[exitCounter];\n const oldExitCounter = exitCounter;\n if (!exitArr) {\n exitArr = [{ elem, datum: d }];\n } else if (exitArr[exitArr.length - 1].datum.index === d.index - 1) {\n exitArr.push({ elem, datum: d });\n } else {\n exitCounter++;\n }\n consecutiveExits[oldExitCounter] = exitArr;\n };\n // Creating groups for all the arcs present individually\n makeElement(g, 'g', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\n\n getPointsFromIdentifiers (identifiers) {\n if (!this.data()) {\n return [];\n }\n const fieldNames = identifiers[0];\n const values = identifiers.slice(1, identifiers.length);\n const pieSlices = selectElement(this.mount()).selectAll('path').data();\n const fieldsConfig = this.data().getFieldsConfig();\n\n const filteredPies = pieSlices.filter((tData) => {\n const { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n};\n\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\n const mid = (Math.PI * 2 * startAngle) / ((Math.PI * 2) + startAngle - endAngle);\n\n consecutiveExitArr.forEach((e) => {\n const { elem, datum } = e;\n\n elem.each(function () {\n const gElem = selectElement(this);\n gElem.selectAll('path')\n .transition()\n .duration(transition.duration)\n .attrTween('d', () => function (t) {\n return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\n })(t));\n })\n .remove();\n gElem.remove();\n });\n });\n });\n }\n};\n\nexport const getFieldIndices = (encoding, fieldsConfig) => {\n const [angleField, radiusField, colorField, sizeField] = [ANGLE, RADIUS, COLOR, SIZE]\n .map(e => encoding[e].field);\n const [angleIndex, sizeIndex, radiusIndex] = [angleField, sizeField, radiusField]\n .map((e) => {\n const conf = fieldsConfig[e];\n if (conf && conf.def.type === FieldType.MEASURE) {\n return conf.index;\n }\n return null;\n });\n const colorIndex = getObjProp(fieldsConfig, colorField, 'index');\n return {\n angleIndex,\n sizeIndex,\n radiusIndex,\n colorIndex\n };\n};\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayerMixin, BaseLayer } from '../../base-layer';\nimport { ArcLayerMixin } from './arc-mixin';\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\n */\nexport default class ArcLayer extends mix(BaseLayer).with(BaseLayerMixin, ArcLayerMixin) {\n static formalName () {\n return 'arc';\n }\n}\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { LineLayerMixin } from './line-mixin';\nimport { LINE_LAYER } from '../../enums/constants';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\n */\nexport default class LineLayer extends mix(BaseLayer).with(BaseLayerMixin, LineLayerMixin) {\n static formalName () {\n return LINE_LAYER;\n }\n}\n","import {\n setAttrs,\n setStyles,\n selectElement,\n makeElement,\n getSmartComputedStyle\n} from 'muze-utils';\n\n/**\n * Draws svg text in the specified container.\n * @param {SVGElement} container Container where labels will be appended.\n * @param {Array.} data Data of the elements.\n * @return {Selection} d3 selection of the elements.\n */\nconst drawText = (container, data, config, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\n\n const selectionMerge = selection.enter().append('g')\n .each(function (dataObj) {\n setAttrs(this, dataObj.enter);\n })\n .merge(selection);\n const style = getSmartComputedStyle(selectElement(container), config.className);\n const fontSize = parseInt(style.fontSize, 10);\n\n smartLabel.setStyle(style);\n selectionMerge.each(function (dataObj) {\n const element = selectElement(this);\n graphicElems[dataObj.rowId] = element;\n const { update, text, color, textanchor, style: textStyle } = dataObj;\n const background = dataObj.background;\n let backgroundVal;\n if (backgroundVal = background.value) {\n const backgroundPadding = background.padding;\n let diff;\n const { width, height } = smartLabel.getOriSize(dataObj.text);\n const backgroundEl = makeElement(element, 'rect', [1]);\n\n if (textanchor === 'end') {\n diff = width;\n } else if (textanchor === 'start') {\n diff = 0;\n } else {\n diff = width / 2;\n }\n\n setAttrs(backgroundEl.node(), {\n x: update.x - diff - backgroundPadding / 2,\n y: update.y - fontSize - backgroundPadding / 2,\n width: width + backgroundPadding,\n height: height + backgroundPadding\n });\n background && setStyles(backgroundEl, {\n background: backgroundVal\n });\n }\n const textEl = makeElement(element, 'text', d => [d]).text(text);\n const textNode = textEl.node();\n textStyle && setStyles(textNode, textStyle);\n color && setStyles(textNode, {\n fill: color\n });\n dataObj.className && textEl.classed(dataObj.className, true);\n setAttrs(textNode, update);\n textEl.attr('text-anchor', textanchor);\n textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\n });\n selection.exit().remove();\n return selection;\n};\n\nexport default drawText;\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-text',\n classPrefix: CLASSPREFIX,\n className: '',\n transform: {\n type: 'identity'\n },\n interaction: {\n highlight: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: -15\n }, data, apply).color\n }\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n }\n },\n crossline: false,\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n color: {},\n size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-text-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-text-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-text-selected`\n }\n }\n};\n","import {\n getQualifiedClassName,\n selectElement,\n setStyles,\n createElements\n} from 'muze-utils';\nimport drawText from './renderer';\nimport { defaultConfig } from './default-config';\nimport {\n positionPoints,\n getIndividualClassName,\n resolveEncodingValues,\n getColorMetaInf,\n toCartesianCoordinates,\n getDataFromEvent\n} from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: { ...{ layerId: layerInst.id() },\n ...getColorMetaInf({\n fill: resolvedVal.color\n }) },\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const textFieldIndex = textField ? fieldsConfig[textField] && fieldsConfig[textField].index : -1;\n const xEnc = ENCODING.X;\n const yEnc = ENCODING.Y;\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const row = d.source;\n const textValue = textField ? row[textFieldIndex] : value;\n\n const [xPx, yPx] = [xEnc, yEnc].map(type => (axes[type] ? axes[type].getScaleValue(d[type]) +\n axes[type].getUnitWidth() / 2 : 0));\n\n const color = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: { ...{ layerId: layerInst.id() },\n ...getColorMetaInf({\n fill: resolvedEncodings.color\n }) },\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport const TextLayerMixin = superclass => class extends superclass {\n /**\n * Returns the default configuration of the text layer\n * @return {Object} Default configuration of the text layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'text';\n }\n\n elemType () {\n return 'text';\n }\n\n getPointTranslator (val) {\n return pointTranslators[val];\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {textLayer} Instance of text layer\n */\n render (container) {\n const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\n }\n });\n return this;\n }\n\n getNearestPoint (x, y, { event }) {\n if (!this.data()) {\n return null;\n }\n return this.getDataFromEvent(event);\n }\n\n getDataFromEvent (event) {\n return getDataFromEvent(this, event);\n }\n};\n\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer, BaseLayerMixin } from '../../base-layer';\nimport { TextLayerMixin } from './text-mixin';\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\n */\nexport default class TextLayer extends mix(BaseLayer).with(BaseLayerMixin, TextLayerMixin) {\n static formalName () {\n return 'text';\n }\n}\n","/* global Element, document */\nimport {\n makeElement,\n selectElement,\n easeFns,\n objectIterator,\n getSymbol,\n setStyles\n} from 'muze-utils';\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, groupElement) {\n const { shape, size, update, style } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n if (newShape.nodeName === 'path' || newShape.nodeName === 'image') {\n shapeElement.attr('transform', `scale(${size / 100})`);\n } else {\n shapeElement.attr('height', size);\n shapeElement.attr('width', size);\n }\n shapeElement.attr('x', -size / 2);\n shapeElement.attr('y', -size / 2);\n makeElement(groupElement, () => newShape, [1]);\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = getSymbol(shape).size(size)(update);\n }\n const pathEl = makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n setStyles(pathEl, style);\n } else {\n d.shape = 'circle';\n createShape(d, groupElement);\n }\n};\n\n/**\n * Draws symbols using d3 symbol api\n * @param {Object} params Contains the svg container, points and other symbol related attributes.\n */\n/* istanbul ignore next */ const drawSymbols = (params) => {\n const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\n};\n\nexport default drawSymbols;\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-point',\n className: '',\n classPrefix: CLASSPREFIX,\n defColorStyle: 'stroke',\n interaction: {\n highlight: {\n className: 'highlight-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n // fill: 'red'\n },\n strokePosition: 'center'\n },\n focusStroke: {\n className: 'focus-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n commonDoubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n brushStroke: {\n className: 'brush-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n // fill: 'blue'\n },\n strokePosition: 'outside'\n },\n doubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n innerPadding: 0.1,\n nearestPointThreshold: 5,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n encoding: {\n size: {\n value: 30\n },\n color: {},\n stroke: {\n value: '#000'\n },\n 'stroke-width': {\n value: 0\n },\n fill: {},\n shape: {\n value: 'circle'\n },\n x: {},\n y: {},\n 'stroke-opacity': {\n value: 1\n },\n 'fill-opacity': {\n value: 0.5\n },\n strokePosition: {\n value: 'center'\n },\n interaction: {\n anchors: 'highlight',\n 'persistent-anchors': 'focusStroke',\n 'brush-anchors': 'brushStroke'\n }\n },\n shapes: ['circle', 'cross', 'diamond', 'square', 'star', 'wye', 'triangle'],\n sizes: [20, 30, 40, 50, 60, 70]\n};\n","import { FieldType, COORD_TYPES } from 'muze-utils';\nimport { ENCODING } from '../../enums/constants';\nimport {\n getIndividualClassName,\n resolveEncodingValues,\n getColorMetaInf,\n positionPoints\n} from '../../helpers';\n\nexport const prepareDrawingInf = ({ data, datum, i, layerInst, xPx, yPx }) => {\n const axes = layerInst.axes();\n const { shape: shapeAxis, color: colorAxis, size: sizeAxis } = axes;\n let shape = shapeAxis.getShape(datum.shape);\n let size = sizeAxis.getSize(datum.size);\n let color = colorAxis.getColor(datum.color);\n const layerEncoding = layerInst.config().encoding;\n const stroke = layerEncoding.stroke.value;\n const strokeWidth = layerEncoding['stroke-width'].value;\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n stroke,\n 'stroke-width': strokeWidth,\n size,\n shape,\n data: datum\n },\n data: datum\n }, i, data, layerInst);\n const { rowId, source } = datum;\n ({ shape, size, color } = resolvedEncodings);\n const style = {\n fill: color,\n stroke: resolvedEncodings.stroke,\n 'stroke-width': resolvedEncodings['stroke-width']\n };\n const { x, y } = resolvedEncodings;\n const pos = { x, y };\n return {\n enter: pos,\n update: pos,\n shape,\n source,\n rowId,\n style,\n data: datum.dataObj,\n meta: Object.assign({\n layerId: layerInst.id()\n }, getColorMetaInf(style, {\n strokePosition: layerEncoding.strokePosition.value\n })),\n size\n };\n};\n\nexport const pointTranslators = {\n [COORD_TYPES.CARTESIAN]: (data, config, layerInst) => {\n let points = [];\n const encoding = layerInst.config().encoding;\n const axes = layerInst.axes();\n const { x, y } = encoding;\n const xField = x.field;\n const yField = y.field;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n const isXDim = fieldsConfig[xField] && fieldsConfig[xField].def.type === FieldType.DIMENSION;\n const isYDim = fieldsConfig[yField] && fieldsConfig[yField].def.type === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const { x: offsetX, y: offsetY } = config.offset;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n\n let [xPx, yPx] = [ENCODING.X, ENCODING.Y].map((type) => {\n const value = d[type] === null ? undefined : d[type];\n const measure = type === ENCODING.X ? measurement.width : measurement.height;\n return !encoding[type].field ? measure / 2 : axes[type].getScaleValue(value);\n });\n\n xPx += offsetX;\n yPx += offsetY;\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = prepareDrawingInf({\n data,\n datum: d,\n i,\n layerInst,\n xPx,\n yPx\n });\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\nexport const getStrokeWidthByPosition = (position, radius) => {\n const strokeWidthWithOffsetMap = {\n center: -radius,\n inside: -(radius * Math.PI),\n outside: +(radius * Math.PI)\n };\n return strokeWidthWithOffsetMap[position];\n};\n","import {\n Voronoi,\n Scales,\n makeElement,\n getQualifiedClassName,\n selectElement,\n appendElement,\n getSymbol,\n pointWithinCircle\n} from 'muze-utils';\nimport drawSymbols from './renderer';\nimport { defaultConfig } from './default-config';\nimport {\n attachDataToVoronoi,\n getPlotMeasurement,\n getMarkId,\n getBoundBoxes\n} from '../../helpers';\nimport './styles.scss';\nimport { pointTranslators, getStrokeWidthByPosition } from './helper';\n\nexport const PointLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of PointLayer.\n * @param {*} args\n * @memberof PointLayer\n */\n constructor (...args) {\n super(...args);\n this._voronoi = new Voronoi();\n this._bandScale = Scales.band();\n this._overlayPath = {};\n this.formattedUids = [];\n }\n\n elemType () {\n return 'g';\n }\n\n /**\n * Returns the default configuration of the point layer\n * @return {Object} Default configuration of the point layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = super.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const transform = config.transform;\n const colorField = encoding.color && encoding.color.field;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n static drawFn () {\n return drawSymbols;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n /**\n * Renders the plot in the given container.\n *\n * @param {SVGElement} container SVGElement which will hold the plot\n * @return {BarLayer} Instance of bar layer\n */\n render (container) {\n let maxSize = 0;\n let seriesClassName;\n const config = this.config();\n const keys = this._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\n const containerSelection = selectElement(container);\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n this._points = [];\n this._pointMap = {};\n\n containerSelection.classed(qualifiedClassName.join(' '), true).classed(className, true);\n\n this._points = this.generateDataPoints(normalizedData, keys);\n this._graphicElems = {};\n\n const schema = this.data().getSchema();\n makeElement(container, 'g', this._points, null, {\n update: (group, points) => {\n maxSize = Math.max(maxSize, ...points.map(d => d.size || 0));\n seriesClassName = `${qualifiedClassName[0]}`;\n this.constructor.drawFn()({\n layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\n this._maxSize = Math.sqrt(maxSize / Math.PI) * 2;\n this.attachDataToVoronoi(this._points);\n return this;\n }\n\n attachDataToVoronoi (points) {\n attachDataToVoronoi(this._voronoi, points);\n }\n\n generateDataPoints (normalizedData, keys) {\n const [widthMetrics, heightMetrics] = getPlotMeasurement(this, keys);\n const offsetXValues = widthMetrics.offsetValues || [];\n const offsetYValues = heightMetrics.offsetValues || [];\n return normalizedData.map((dataArr, i) => {\n const measurementConf = this.getMeasurementConfig(offsetXValues[i], offsetYValues[i], widthMetrics.span,\n heightMetrics.span);\n return this.translatePoints(dataArr, measurementConf);\n }).filter(d => d.length);\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0) + widthSpan / 2,\n y: (offsetY || 0) + heightSpan / 2\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n /**\n * Gets the nearest point from a position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Point details\n */\n getNearestPoint (x, y) {\n const nearestPointThreshold = this.config().nearestPointThreshold;\n const distanceLimit = Math.max(this._maxSize, nearestPointThreshold);\n\n if (!this.data()) {\n return null;\n }\n\n const point = this._voronoi.find(x, y, distanceLimit);\n const dimensions = point && point.data.data.update;\n const radius = point ? Math.sqrt(point.data.data.size / Math.PI) : 0;\n\n if (point) {\n const insideShape = pointWithinCircle({\n x: dimensions.x,\n y: dimensions.y,\n r: radius + nearestPointThreshold\n }, { x, y });\n if (insideShape) {\n const { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\n return {\n id: identifiers,\n dimensions: [{\n x: dimensions.x,\n y: dimensions.y,\n width: radius,\n height: radius\n }],\n layerId: this.id()\n };\n }\n }\n return null;\n }\n\n addOverlayPath (refElement, data, style, strokePosition) {\n const container = refElement.parentElement;\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n pathElement = makeElement(container, 'path', [data.update], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n if (style.type === 'stroke-width') {\n const position = strokePosition;\n // get radius as per stroke position\n let radius = Math.sqrt(data.size / Math.PI);\n radius = getStrokeWidthByPosition(position, radius);\n\n const size = data.size + radius;\n if (typeof data.shape === 'string') {\n const path = getSymbol(data.shape).size(size);\n pathElement.attr('d', path);\n }\n }\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(refElement, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n }\n }\n\n getBoundBoxes () {\n return getBoundBoxes(this._points.flat());\n }\n\n applyElementStyles (elem, styles, styleObj) {\n styles.forEach((type) => {\n elem.select('path').style(type, styleObj[type]);\n });\n }\n};\n","import {\n mix\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { POINT_LAYER } from '../../enums/constants';\nimport { PointLayerMixin } from './point-mixin';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\n */\nexport default class PointLayer extends mix(BaseLayer).with(PointLayerMixin) {\n static formalName () {\n return POINT_LAYER;\n }\n}\n","import { makeElement, easeFns } from 'muze-utils';\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} datum\n * @param {*} index\n * @param {*} context\n */\nconst transitionBars = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\n const update = datum.update || datum;\n const updateStyle = datum.style || {};\n datum.className && selection.classed(datum.className, true);\n Object.entries(update).forEach(attr => (!isNaN(attr[1]) && selTransition.attr(attr[0], attr[1])));\n Object.entries(updateStyle).forEach(styleObj => selection.style(styleObj[0], styleObj[1]));\n};\n\n/**\n *\n *\n * @param {*} elem\n * @param {*} d\n */\nconst barEnterFn = (elem, d) => {\n const selection = elem;\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && selection.attr(attr[0], attr[1])));\n};\n\n/**\n * Draws rectangles by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Bar Selection\n */\n/* istanbul ignore next */ export const drawRects = (params) => {\n const { layer, points, container, keyFn, className } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) {\n barEnterFn(elem, d);\n },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\n };\n\n return makeElement(container, 'g', points, null, {\n update: (group, d) => {\n makeElement(group.node(), 'rect', data => [data], null, updateFns, keyFn);\n group.attr('class', `${className}-${d.rowId}`);\n group.classed(d.className, true);\n }\n }, keyFn);\n};\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'layer-bar',\n className: '',\n interaction: {\n highlight: {\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'center'\n },\n focusStroke: {\n className: 'focus-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n brushStroke: {\n className: 'brush-stroke-class',\n style: {\n stroke: 'black',\n 'stroke-width': '1px'\n },\n strokePosition: 'outside'\n },\n doubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n commonDoubleStroke: {\n style: {\n stroke: 'black',\n 'stroke-width': '2px'\n },\n strokePosition: 'outside'\n },\n fade: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.3\n }, data, apply).color\n }\n },\n focus: {\n style: {\n fill: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n a: -0.5\n }, data, apply).color\n }\n }\n },\n transform: {\n type: 'stack'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n innerPadding: 0.1,\n encoding: {\n color: {},\n x: {},\n y: {},\n x0: {},\n y0: {},\n stroke: {\n value: '#000'\n },\n strokeWidth: {\n value: '0px'\n },\n strokePosition: {\n value: 'center'\n }\n }\n};\n","import { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport {\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\n */\nconst resolveDimByField = (type, axesInfo, config, data) => {\n const spaceType = type === 'x' ? 'width' : 'height';\n const [fieldType, axis] = [config[`${type}FieldType`], axesInfo[`${type}Axis`]];\n const {\n transformType,\n sizeEncoding,\n sizeConfig,\n measurement\n } = config;\n\n const sizeValue = sizeEncoding.value;\n let enter = 0;\n let pos;\n let space = 0;\n let enterSpace = 0;\n if (fieldType !== undefined) {\n if (config[`${type}0Field`]) {\n const minVal = data[type];\n const maxVal = data[`${type}0`];\n let min;\n let max;\n if (minVal === null || maxVal === null) {\n return {\n enterSpace: undefined,\n enter: undefined,\n pos: undefined,\n space: undefined\n };\n } else if (fieldType === MeasureSubtype.CONTINUOUS || fieldType === DimensionSubtype.TEMPORAL) {\n min = Math.min(minVal, maxVal);\n max = Math.max(minVal, maxVal);\n } else {\n min = minVal;\n max = maxVal;\n }\n const scales = type === 'x' ? [min, max] : [max, min];\n pos = axis.getScaleValue(scales[0]) + axis.getUnitWidth() / 2;\n space = Math.abs(axis.getScaleValue(scales[1]) - pos) + axis.getUnitWidth() / 2;\n\n enter = pos;\n enterSpace = 0;\n } else if (fieldType === DimensionSubtype.CATEGORICAL || fieldType === DimensionSubtype.TEMPORAL) {\n pos = axis.getScaleValue(data[type]) +\n (sizeConfig[type === 'x' ? 'barWidthOffset' : 'barHeightOffset'] || 0);\n\n space = sizeConfig[type === 'x' ? 'barWidth' : 'barHeight'];\n if (sizeValue !== undefined) {\n const diffPx = sizeValue * space;\n space -= diffPx;\n pos += diffPx / 2;\n }\n enter = pos;\n enterSpace = space;\n } else {\n const minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\n }\n } else {\n pos = 0;\n space = measurement[spaceType];\n }\n\n return {\n enterSpace,\n enter,\n pos,\n space\n };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} config\n * @param {*} axes\n *\n */\nconst resolveDimensions = (data, config, axes) => {\n const axesInfo = {\n xAxis: axes.x,\n yAxis: axes.y\n };\n const {\n enterSpace: enterWidth,\n enter: enterX,\n pos: xPos,\n space: width\n } = resolveDimByField('x', axesInfo, config, data);\n\n const {\n enterSpace: enterHeight,\n enter: enterY,\n pos: yPos,\n space: height\n } = resolveDimByField('y', axesInfo, config, data);\n return {\n enter: {\n x: enterX,\n y: enterY,\n width: enterWidth,\n height: enterHeight\n },\n update: {\n x: xPos,\n y: yPos,\n width,\n height\n }\n };\n};\n\nexport const strokeWidthPositionMap = ({ width, position }) => {\n const offset = width / 2;\n const strokeWidthWithOffsetMap = {\n center: {\n M: { x: 0, y: 0 },\n L1: { x: 0, y: 0 },\n L2: { x: 0, y: 0 },\n L3: { x: 0, y: 0 }\n },\n inside: {\n M: { x: +offset, y: +offset },\n L1: { x: -offset, y: +offset },\n L2: { x: -offset, y: -offset },\n L3: { x: +offset, y: -offset }\n },\n outside: {\n M: { x: -offset, y: -offset },\n L1: { x: +offset, y: -offset },\n L2: { x: +offset, y: +offset },\n L3: { x: -offset, y: +offset }\n }\n };\n return strokeWidthWithOffsetMap[position];\n};\n\n/**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\nexport const getTranslatedPoints = (context, data, sizeConfig) => {\n let points = [];\n const encoding = context.config().encoding;\n const axes = context.axes();\n const colorAxis = axes.color;\n const sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.measurement();\n const isXDim = xFieldSubType === DimensionSubtype.CATEGORICAL || xFieldSubType === DimensionSubtype.TEMPORAL;\n const isYDim = yFieldSubType === DimensionSubtype.CATEGORICAL || yFieldSubType === DimensionSubtype.TEMPORAL;\n const key = isXDim ? 'x' : (isYDim ? 'y' : null);\n const transformType = context.transformType();\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const dimensions = resolveDimensions(d, {\n xFieldType: xFieldSubType,\n yFieldType: yFieldSubType,\n x0Field,\n y0Field,\n transformType,\n measurement,\n sizeConfig,\n sizeEncoding\n }, axes);\n\n let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n // const layerEncoding = layerInst.config().encoding;\n\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n const style = {\n fill: color,\n stroke: encoding.stroke.value,\n 'stroke-width': encoding.strokeWidth.value\n };\n const conf = {\n strokePosition: encoding.strokePosition.value\n };\n\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n data: d.dataObj,\n style,\n meta: Object.assign({\n layerId: context.id()\n }, getColorMetaInf(style, conf))\n };\n point.className = getIndividualClassName(d, i, data, context);\n points.push(point);\n // Store each point in a hashmap with key as the dimensional or temporal field value\n context.cachePoint(d[key], point);\n }\n }\n\n points = positionPoints(context, points);\n return points;\n};\n","import {\n getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n FieldType,\n Scales,\n getObjProp,\n makeElement,\n appendElement,\n RTree\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn, getDataFromEvent } from '../../helpers';\nimport './styles.scss';\nimport { getTranslatedPoints, strokeWidthPositionMap } from './bar-helper';\n\nconst { MEASURE } = FieldType;\n\nexport const BarLayerMixin = superclass => class extends superclass {\n /**\n * Creates an instance of bar layer\n */\n constructor (...params) {\n super(...params);\n this._bandScale = Scales.band();\n this._plotPadding = {\n x: 0,\n y: 0\n };\n this._plotSpan = {\n x: 0,\n y: 0\n };\n this._pointMap = {};\n this._overlayPath = {};\n this._rtree = new RTree();\n }\n\n elemType () {\n return 'rect';\n }\n\n /**\n * Returns the default configuration of the bar layer\n * @return {Object} Default configuration of the bar layer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n static defaultPolicy (conf, userConf) {\n const config = BaseLayer.defaultPolicy(conf, userConf);\n const encoding = config.encoding;\n const colorField = encoding.color.field;\n const transform = config.transform;\n\n if (colorField) {\n transform.groupBy = colorField;\n }\n return config;\n }\n\n calculateDomainFromData (data, encodingFieldInf, fieldsConfig) {\n const domain = super.calculateDomainFromData(data, encodingFieldInf, fieldsConfig);\n ['x', 'y'].forEach((d) => {\n if (encodingFieldInf[`${d}FieldType`] === MEASURE && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\n }\n });\n return domain;\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the bars from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @param {Object} conf config object for point generation\n * @return {Array.} Array of points\n */\n translatePoints (data, sizeConfig) {\n return getTranslatedPoints(this, data, sizeConfig);\n }\n\n /**\n * Renders the plot in the given container\n * @param {SVGGroup} container SVGGroup where plot will be rendered.\n * @return {BarLayer} Instance of bar layer.\n */\n render (container) {\n const config = this.config();\n const transition = config.transition;\n const normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\n const keys = transformedData.map(d => d.key);\n const fieldsConfig = this.data().getFieldsConfig();\n const axes = this.axes();\n const height = axes.y && axes.y.scale().range()[0];\n const width = axes.x && axes.x.scale().range()[1];\n const defClassName = config.defClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const className = config.className;\n const containerSelection = selectElement(container);\n const dimensions = Object.values(fieldsConfig).filter(e => e.def.type === FieldType.DIMENSION)\n .map(e => e.index);\n containerSelection.classed(qualifiedClassName.join(' '), true);\n containerSelection.classed(className, true);\n clipElement(container, {\n x: 0,\n y: 0,\n width,\n height\n }, `id-${this.id()}`);\n\n this._points = this.generateDataPoints(normalizedDataArr, keys);\n this._graphicElems = {};\n const paths = Object.keys(this._overlayPath);\n paths.forEach(path => this._overlayPath[path].remove());\n this._overlayPath = {};\n\n const barContainer = makeElement(containerSelection, 'g', [1], 'muze-layer-bars', {}, null);\n makeElement(containerSelection, 'g', [1], 'muze-overlay-paths', {}, null);\n createElements({\n data: this._points,\n container: barContainer.node(),\n selector: 'g',\n append: 'g',\n each: (points, group, i) => {\n const seriesClassName = `${qualifiedClassName[0]}-${keys[i] || i}`.toLowerCase();\n group.style('display', 'block');\n drawRects({\n layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n const elements = this.getBoundBoxes().flat().filter(d => d !== null);\n this._rtree = new RTree();\n this._rtree.load(elements);\n return this;\n }\n\n generateDataPoints (normalizedData, keys) {\n const [barWidthMetrics, barHeightMetrics] = getPlotMeasurement(this, keys);\n const barWidthOffsets = barWidthMetrics.offsetValues || [];\n const barHeightOffsets = barHeightMetrics.offsetValues || [];\n this._plotSpan = {\n x: barWidthMetrics.groupSpan || 0,\n y: barHeightMetrics.groupSpan || 0\n };\n this._plotPadding = {\n x: barWidthMetrics.padding || 0,\n y: barHeightMetrics.padding || 0\n };\n\n this._pointMap = {};\n return normalizedData.map((data, i) => this.translatePoints(data,\n {\n barWidth: barWidthMetrics.span,\n barWidthOffset: barWidthOffsets[i] || 0,\n barHeight: barHeightMetrics.span,\n barHeightOffset: barHeightOffsets[i] || 0\n }));\n }\n\n getPlotPadding () {\n return this._plotPadding;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\n }\n\n /**\n * Gets the nearest point of the position passed.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Object} Nearest point.\n */\n getNearestPoint (x, y) {\n if (!this.data()) {\n return null;\n }\n const data = this._rtree.search({\n minX: Math.max(x - 1, 0),\n minY: Math.max(y - 1, 0),\n maxX: x + 1,\n maxY: y + 1\n });\n\n if (data.length) {\n return this.getDataFromEvent(null, data[0].point);\n }\n return null;\n }\n\n getDataFromEvent (event, data) {\n return getDataFromEvent(this, event, data);\n }\n\n getPlotSpan () {\n return this._plotSpan;\n }\n\n hasPlotSpan () {\n return true;\n }\n\n addOverlayPath (refElement, data, style, strokePosition, mountPoint) {\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n const pathGroup = makeElement(mountPoint, 'g', [1], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement = makeElement(pathGroup, 'path', [data], null, {}, d => `${d.update.x} ${data.rowId}`);\n\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n if (style.type === 'stroke-width') {\n const { L1, L2, L3, M } = strokeWidthPositionMap({\n width: parseInt(style.value, 10),\n position: strokePosition\n });\n\n pathElement.attr('d', d => `M ${d.update.x + M.x} ${d.update.y + M.y}\n L ${d.update.x + d.update.width + L1.x} ${d.update.y + L1.y}\n L ${d.update.x + d.update.width + L2.x} ${d.update.y + d.update.height + L2.y}\n L${d.update.x + L3.x} ${d.update.y + d.update.height + L3.y} Z`);\n }\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(mountPoint, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n\n // Apply the path shape get the correct path position\n currentPath.attr('d', d => `M ${d.update.x} ${d.update.y}\n L ${d.update.x + d.update.width} ${d.update.y}\n L ${d.update.x + d.update.width} ${d.update.y + d.update.height}\n L${d.update.x} ${d.update.y + d.update.height} Z`);\n }\n }\n\n getBoundBoxes () {\n const points = this._points.flat();\n\n return points.map((point) => {\n const { x, y, width, height } = point.update;\n const data = point.data;\n return {\n minX: x,\n maxX: x + width,\n minY: y,\n maxY: y + height,\n data,\n point\n };\n });\n }\n};\n\n","import { mix } from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { BAR_LAYER } from '../../enums/constants';\nimport { BarLayerMixin } from './bar-mixin';\nimport { BaseLayerMixin } from '../../base-layer/base-mixin';\nimport './styles.scss';\n\n/**\n * Bar layer creates rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\n */\nexport default class BarLayer extends mix(BaseLayer).with(BaseLayerMixin, BarLayerMixin) {\n static formalName () {\n return BAR_LAYER;\n }\n}\n","import { transformColor } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\n\nexport const defaultConfig = {\n defClassName: 'layer-tick',\n className: '',\n classPrefix: CLASSPREFIX,\n nearestPointThreshold: 10,\n interaction: {\n fade: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n },\n focus: {\n style: {\n stroke: (rgbaValues, data, apply) => transformColor(rgbaValues, {\n l: +15\n }, data, apply).color\n }\n }\n },\n innerPadding: 0.1,\n transform: {\n type: 'identity'\n },\n transition: {\n effect: 'cubic',\n duration: 1000\n },\n interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\n strokeOpacity: {\n value: 0.5\n },\n fillOpacity: {\n value: 0.5\n }\n },\n states: {\n highlight: {\n className: `${CLASSPREFIX}-layer-tick-highlight`\n },\n fadeout: {\n className: `${CLASSPREFIX}-layer-tick-fadeout`\n },\n selected: {\n className: `${CLASSPREFIX}-layer-tick-selected`\n }\n }\n};\n\n","import {\n selectElement,\n Symbols,\n pathInterpolators,\n makeElement\n} from 'muze-utils';\n\nconst line = Symbols.line;\n\n/**\n * Draws ticks by using d3 selection\n * @param {Object} params Contains container element and points\n * @return {Selection} Ticks Selection\n */\nexport default /* istanbul ignore next */ (params) => {\n const { points, container, keyFn, className, interpolate, layer, transition } = params;\n const { disabled } = transition;\n\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const enter = d.enter || {};\n Object.entries(enter).forEach(attr => (!isNaN(attr[1]) && group.attr(attr[0], attr[1])));\n },\n update: (group, d) => {\n const pathElem = makeElement(group, 'path', [1]);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n group.attr('class', className);\n group.classed(d.className, true);\n\n const x0 = update.x0 !== undefined ? update.x0 : update.x;\n const y0 = update.y0 !== undefined ? update.y0 : update.y;\n const curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n\n d.className && group.classed(d.className, true);\n pathElem.attr('d', linepath([[update.x, update.y], [x0, y0]]));\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n Object.entries(style).forEach(styleObj => group.style(styleObj[0], styleObj[1]));\n },\n exit: (exitGroup) => {\n exitGroup.remove();\n }\n }, keyFn);\n};\n","import { FieldType, makeElement, appendElement } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates, attachDataToVoronoi } from '../../helpers';\nimport { strokeWidthPositionMap } from './helper';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedVal.color\n };\n\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style,\n source: d.source,\n rowId: d.rowId,\n data: d,\n meta: { ...{ layerId: layerInst.id() }, ...getColorMetaInf(style) }\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { x: xAxis, y: yAxis } = axes;\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.encodingFieldsInf();\n const isXDim = xFieldType === FieldType.DIMENSION;\n const isYDim = yFieldType === FieldType.DIMENSION;\n const key = isXDim ? ENCODING.X : (isYDim ? ENCODING.Y : null);\n const measurement = layerInst.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const { x: xSpan, y: ySpan } = config.span;\n for (let i = 0, len = data.length; i < len; i++) {\n let xPx;\n let x0Px;\n let y0Px;\n let yPx;\n const d = data[i];\n const row = d.source;\n if (xField) {\n xPx = xAxis.getScaleValue(d.x) + offsetX;\n x0Px = xPx + xSpan;\n }\n\n if (yField) {\n yPx = yAxis.getScaleValue(d.y) + offsetY;\n y0Px = yPx !== null ? yPx + ySpan : null;\n }\n\n if (!xField) {\n xPx = 0;\n x0Px = measurement.width;\n if (!isNaN(yPx)) {\n yPx += ySpan / 2;\n y0Px = yPx;\n }\n }\n\n if (!yField) {\n yPx = 0;\n y0Px = measurement.height;\n x0Px = xPx += xSpan / 2;\n }\n\n if (x0Field) {\n x0Px = xAxis.getScaleValue(d.x0) + xSpan;\n yPx += ySpan / 2;\n y0Px -= ySpan / 2;\n }\n\n if (y0Field) {\n y0Px = yAxis.getScaleValue(d.y0) + ySpan;\n xPx += xSpan / 2;\n x0Px -= xSpan / 2;\n }\n const color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedEncodings.color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style,\n source: row,\n rowId: d.rowId,\n data: d.dataObj,\n meta: { ...{ layerId: layerInst.id() }, ...getColorMetaInf(style) }\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport const TickLayerMixin = superclass => class extends superclass {\n static defaultConfig () {\n return defaultConfig;\n }\n\n static formalName () {\n return 'tick';\n }\n\n static drawFn () {\n return drawTicks;\n }\n\n elemType () {\n return 'path';\n }\n\n /**\n * Generates an array of objects containing x, y, width and height of the points from the data\n * @param {Array.} data Data Array\n * @param {Object} encoding Config\n * @param {Object} axes Axes object\n * @return {Array.} Array of points\n */\n translatePoints (data, config) {\n return pointTranslators[this.coord()](data, config, this);\n }\n\n attachDataToVoronoi (points) {\n attachDataToVoronoi(this._voronoi, points, (d) => {\n const { x, x0, y, y0 } = d.update;\n\n return {\n x: x + (x0 - x) / 2,\n y: y + (y0 - y) / 2\n };\n });\n }\n\n getMeasurementConfig (offsetX, offsetY, widthSpan, heightSpan) {\n return {\n offset: {\n x: (offsetX || 0),\n y: (offsetY || 0)\n },\n span: {\n x: widthSpan,\n y: heightSpan\n }\n };\n }\n\n addOverlayPath (refElement, data, style, strokePosition) {\n let pathElement;\n\n if (this._overlayPath[data.rowId]) {\n pathElement = this._overlayPath[data.rowId];\n } else {\n pathElement = makeElement(refElement, 'path', [data.update], null, {}, d => `${d.x} ${data.rowId}`);\n pathElement.style('fill', 'none');\n pathElement.style('fill-opacity', 0);\n pathElement.attr('id', data.rowId);\n this._overlayPath[data.rowId] = pathElement;\n }\n\n let offsetM = { x: 0, y: 0 };\n let offsetL = { x: 0, y: 0 };\n\n if (style.type === 'stroke-width') {\n const { L, M } = strokeWidthPositionMap({\n width: parseInt(style.value, 10),\n position: strokePosition\n });\n offsetM = M;\n offsetL = L;\n }\n\n pathElement.attr('d', (d) => {\n if (d.update) {\n return `M ${d.update.x + offsetM.x} ${d.update.y + offsetM.y}\n L ${d.update.x0 + offsetL.x} ${d.update.y0 + offsetL.y}`;\n }\n return `M ${d.x + offsetM.x} ${d.y + offsetM.y}\n L ${d.x0 + offsetL.x} ${d.y0 + offsetL.y}`;\n });\n\n let styleVal = style.value;\n if (typeof styleVal === 'function') {\n const currentStyle = pathElement.style(style.type);\n styleVal = styleVal(currentStyle);\n }\n pathElement.style(style.type, styleVal);\n appendElement(refElement, pathElement.node());\n }\n\n removeOverlayPath (data, style) {\n const currentPath = this._overlayPath[data.rowId];\n if (currentPath) {\n currentPath.node().removeAttribute('style');\n Object.keys(style).forEach(s => currentPath.style(s, style[s]));\n currentPath.style('fill-opacity', 0);\n }\n }\n};\n","export const strokeWidthPositionMap = ({ width, position = 'center' }) => {\n const offset = width ? width / 2 : 1;\n const strokeWidthWithOffsetMap = {\n center: {\n M: { x: 0, y: 0 },\n L: { x: 0, y: 0 }\n },\n inside: {\n M: { x: +offset, y: +offset },\n L: { x: -offset, y: +offset }\n },\n outside: {\n M: { x: -offset, y: -offset },\n L: { x: +offset, y: -offset }\n }\n };\n return strokeWidthWithOffsetMap[position];\n};\n","import { mix } from 'muze-utils';\nimport { PointLayerMixin } from '../point';\nimport { BaseLayerMixin, BaseLayer } from '../../base-layer';\nimport { TickLayerMixin } from './tick-mixin';\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends mix(BaseLayer).with(BaseLayerMixin, PointLayerMixin, TickLayerMixin) {\n static formalName () {\n return 'tick';\n }\n}\n","export const AREA_LAYER = 'area';\nexport const ARC_LAYER = 'arc';\nexport const LINE_LAYER = 'line';\nexport const TEXT_LAYER = 'text';\nexport const POINT_LAYER = 'point';\nexport const BAR_LAYER = 'bar';\nexport const TICK_LAYER = 'tick';\nexport const SIMPLE_LAYER = 'simple';\nexport const BASE_LAYER = 'base';\n","import { isSimpleObject, mergeRecursive, getObjProp } from 'muze-utils';\n\nconst parseLayerDefinition = (sink, definition, layerDef, layerType) => {\n for (const key in definition) {\n if (Object.hasOwnProperty.call(definition, key)) {\n let strs;\n let propValue;\n const def = definition[key];\n if (isSimpleObject(def)) {\n sink[key] = {};\n parseLayerDefinition(sink[key], def, layerDef, layerType);\n } else if (typeof def === 'string' && (strs = def.split('.')) && strs[0] === layerType) {\n propValue = getObjProp(layerDef, ...strs.slice(1, strs.length));\n if (propValue !== undefined) {\n sink[key] = propValue;\n }\n } else {\n sink[key] = def;\n }\n }\n }\n};\n\nconst sanitizeEncoding = (encoding) => {\n // Create object for each encoding value if encoding value is a string\n for (const key in encoding) {\n if (typeof encoding[key] === 'string') {\n encoding[key] = {\n field: encoding[key]\n };\n }\n }\n};\n\n/**\n * Layer Factory creates layers based on the layer type. All types of layers needs to register in\n * the layer factory. For getting a layer instance, getLayer method needs to invoked with the\n * layerType and other arguments. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\n */\nconst layerFactory = (() => {\n const compositeLayers = {};\n const factoryObj = {\n setLayerRegistry: (reg) => {\n factoryObj._layerRegistry = reg;\n },\n getSerializedConf: (mark, layerDef) => {\n let serializedDefs;\n const defs = compositeLayers[mark];\n const newConf = mergeRecursive({}, layerDef);\n\n // If it is a composite layer then resolve all the definitions of each unit layer\n if (defs) {\n serializedDefs = defs.map((unitLayerDef) => {\n const sDef = {};\n parseLayerDefinition(sDef, unitLayerDef, newConf, mark);\n sanitizeEncoding(sDef.encoding);\n return sDef;\n });\n } else {\n const encoding = newConf.encoding;\n // Create object for each encoding value if encoding value is a string\n sanitizeEncoding(encoding);\n serializedDefs = newConf;\n }\n\n return serializedDefs;\n },\n getLayerInstance: (layerDef, ...params) => {\n const layerRegistry = factoryObj._layerRegistry;\n layerDef = !(layerDef instanceof Array) ? [layerDef] : layerDef;\n const instances = layerDef.map((layerObj) => {\n const layerConstructor = layerRegistry[layerObj.mark];\n return layerConstructor.create(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\n */\n composeLayers: (layerType, layerDefs) => {\n compositeLayers[layerType] = layerDefs;\n },\n sanitizeLayerConfig: (layerDef) => {\n const newConf = mergeRecursive({}, layerDef);\n sanitizeEncoding(newConf.encoding);\n return newConf;\n }\n };\n return factoryObj;\n})();\n\nexport default layerFactory;\n","import layerFactory from './layer-factory';\n\nexport default layerFactory;\n","import { AreaLayer } from './layers/area';\nimport { ArcLayer } from './layers/arc';\nimport { LineLayer } from './layers/line';\nimport { TextLayer } from './layers/text';\nimport { PointLayer } from './layers/point';\nimport { BarLayer } from './layers/bar';\nimport { BaseLayer } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { DEFAULT_LAYERS } from './defaults';\n\nexport default (layers = DEFAULT_LAYERS) => {\n const reg = Object.assign({}, layers);\n const regObj = {\n register: (def) => {\n const key = def.formalName();\n\n reg[key] = def;\n return regObj;\n },\n get: () => reg\n };\n return regObj;\n};\n","import { AreaLayer, AreaLayerMixin } from './layers/area';\nimport { ArcLayer, ArcLayerMixin } from './layers/arc';\nimport { LineLayer, LineLayerMixin } from './layers/line';\nimport { TextLayer, TextLayerMixin } from './layers/text';\nimport { PointLayer, PointLayerMixin } from './layers/point';\nimport { BarLayer, BarLayerMixin } from './layers/bar';\nimport { TickLayer, TickLayerMixin } from './layers/tick';\nimport { SimpleLayer } from './simple-layer';\nimport { BaseLayer, BaseLayerMixin } from './base-layer';\nimport * as LAYER_TYPES from './enums/layer-types';\nimport layerFactory from './layer-factory';\nimport layerRegistry from './layer-registry';\nimport { ENCODING } from './enums/constants';\nimport * as pointLayerHelpers from './layers/point/helper';\nimport * as commonHelpers from './helpers';\nimport * as enums from './enums';\n\nconst helpers = Object.assign(commonHelpers, {\n pointLayerHelpers\n});\n\nconst layerMixins = {\n BarLayerMixin,\n BaseLayerMixin,\n LineLayerMixin,\n AreaLayerMixin,\n PointLayerMixin,\n TextLayerMixin,\n TickLayerMixin,\n ArcLayerMixin\n};\n\nexport {\n BaseLayer,\n BarLayer,\n LineLayer,\n AreaLayer,\n PointLayer,\n ArcLayer,\n TextLayer,\n TickLayer,\n layerFactory,\n SimpleLayer,\n layerRegistry,\n LAYER_TYPES,\n ENCODING,\n helpers,\n enums,\n layerMixins\n};\n","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue,\n RTree\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\n\nexport const getDimensionMeasureMap = (layers, fieldsConfig) => {\n const retinalEncodingsAndMeasures = {};\n\n layers.forEach((layer) => {\n const {\n colorField,\n sizeField,\n shapeField,\n xField,\n yField\n } = layer.encodingFieldsInf();\n const measures = [xField, yField].filter(field => fieldsConfig[field] && fieldsConfig[field].def.type ===\n FieldType.MEASURE);\n [colorField, sizeField, shapeField].forEach((field) => {\n if (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\n !retinalEncodingsAndMeasures[field] && (retinalEncodingsAndMeasures[field] = []);\n retinalEncodingsAndMeasures[field].push(...measures);\n }\n });\n });\n\n for (const key in retinalEncodingsAndMeasures) {\n if ({}.hasOwnProperty.call(retinalEncodingsAndMeasures, key)) {\n retinalEncodingsAndMeasures[key] = [...new Set(retinalEncodingsAndMeasures[key])];\n }\n }\n return retinalEncodingsAndMeasures;\n};\n\nexport const transformDataModels = (transform, dataModel) => {\n const dataModels = {};\n for (const key in transform) {\n if ({}.hasOwnProperty.call(transform, key)) {\n const transformVal = transform[key];\n dataModels[key] = transformVal(dataModel);\n }\n }\n\n return dataModels;\n};\n\nexport const getLayerFromDef = (context, definition, existingLayer, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\n }\n const layers = {};\n const instanceArr = toArray(instances);\n definition = toArray(definition);\n definition.reduce((acc, def, idx) => {\n const instance = instanceArr[idx];\n instance.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\n if (def.name) {\n instance.alias(def.name);\n }\n layers[instance.alias()] = instance;\n return acc;\n }, {});\n return layers;\n};\n\nexport const resolveEncodingTransform = (layerInst, store) => {\n const encodingTransform = layerInst.config().encodingTransform || {};\n const resolvable = encodingTransform.resolvable;\n let depArr = [];\n if (resolvable) {\n const resolved = resolvable(store);\n depArr = resolved.depArr;\n layerInst.encodingTransform(resolved.fn);\n } else if (encodingTransform instanceof Function) {\n layerInst.encodingTransform(encodingTransform);\n }\n return depArr;\n};\n\nexport const sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\n};\n\nexport const attachDataToLayers = (layers, dm, transformedDataModels) => {\n layers.forEach((layer) => {\n const dataSource = layer.config().source;\n const dataModel = dataSource instanceof Function ? dataSource(dm) :\n (transformedDataModels[dataSource] || dm);\n layer.data(dataModel);\n });\n};\n\nexport const attachAxisToLayers = (axes, layers, layerAxisIndex) => {\n layers.forEach((layer) => {\n const layerId = layer.id();\n const axesObj = {};\n\n objectIterator(axes, (key) => {\n const axisInf = layerAxisIndex[layerId];\n if (axisInf) {\n const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\n\nexport const getLayerAxisIndex = (layers, fields) => {\n const layerAxisIndex = {};\n layers.forEach((layer) => {\n const { axis, encoding } = layer.config();\n const id = layer.id();\n [X, Y, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\n index = fields[type].findIndex(fieldInst => fieldInst.getMembers().indexOf(field) !== -1);\n } else {\n index = 0;\n }\n !layerAxisIndex[id] && (layerAxisIndex[id] = {});\n layerAxisIndex[id][type] = index;\n });\n });\n return layerAxisIndex;\n};\n\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\n};\n\nexport const unionDomainFromLayers = (layers, axisFields, layerAxisIndex, fieldsConfig) => {\n let domains = {};\n layers = layers.filter(layer => layer.getDataDomain() !== null);\n layers.forEach((layer) => {\n let domainValues = {};\n const config = layer.config();\n // const encoding = config.encoding;\n const layerDomain = layer.getDataDomain();\n const layerId = layer.id();\n\n if (layerDomain !== null && config.calculateDomain !== false) {\n domainValues = Object.entries(layerDomain);\n domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\n }\n });\n return domains;\n};\n\nexport const renderLayers = (context, container, layers, measurement) => {\n context._lifeCycleManager.notify({ client: layers, action: 'beforedraw', formalName: 'layer' });\n const config = context.config();\n const classPrefix = config.classPrefix;\n const orderedLayers = layers.sort((a, b) => a.config().order - b.config().order);\n const layerParentGroup = makeElement(container, 'g', [1], `${classPrefix}-layer-group`);\n const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]).filter(d => d !== undefined);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\n });\n return this;\n};\n\nexport const getNearestDimensionalValue = (context, position) => {\n const fields = context.fields();\n if (!fields.x.length || !fields.y.length) {\n return null;\n }\n const data = context.data();\n const axes = context.axes();\n const fieldsConfig = data.getFieldsConfig();\n const xField = getObjProp(fields, 'x', 0).getMembers()[0];\n const yField = getObjProp(fields, 'y', 0).getMembers()[0];\n const xFieldType = fieldsConfig[xField].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\n\n const entryVal = [['x', xFieldType, xField], ['y', yFieldType, yField]].find(entry =>\n entry[1] === DimensionSubtype.CATEGORICAL || entry[1] === DimensionSubtype.TEMPORAL);\n\n if (!entryVal || (xFieldType !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\n return null;\n }\n const field = entryVal[2];\n const index = fieldsConfig[field].index;\n let key = axes[entryVal[0]][0].invert(position[entryVal[0]]);\n if (entryVal[1] === DimensionSubtype.TEMPORAL) {\n const filterData = [...new Set(data.getData().data.map(d => d[index]))];\n key = getNearestValue(filterData, key);\n }\n\n return key !== undefined ? [[field], [key]] : null;\n};\n\nexport const getLayersBy = (layers, searchBy, value) => layers.filter((layer) => {\n const name = searchBy === 'type' ? layer.constructor.formalName() : layer.alias();\n return name === value;\n});\n\nexport const removeLayersBy = (layers, searchBy, value) => {\n layers.filter((inst) => {\n const name = searchBy === 'type' ? inst.config().mark : inst.alias();\n if (name === value) {\n inst.remove();\n return false;\n }\n return true;\n });\n};\n\nexport const createSideEffectGroup = (container, className) => makeElement(container, 'g', [1], className).node();\n\nexport const createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const createRTree = (context) => {\n const elements = [].concat(...context.layers().filter(layer => layer.config().interactive !== false)\n .map((layer) => {\n const points = layer.getBoundBoxes();\n return points;\n })).flat().filter(d => d !== null);\n\n const rtree = new RTree();\n rtree.load(elements);\n return rtree;\n};\n","export const CONFIG = 'config';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const MOUNT = 'mount';\nexport const TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const RETINAL_FIELDS = 'retinalFields';\nexport const PARENT_ALIAS = 'parentAlias';\nexport const LAYERS = 'layers';\nexport const CACHED_DATA = 'cachedData';\nexport const STORE = 'store';\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\nexport const LONGTOUCH = 'longtouch';\nexport const TOUCHDRAG = 'touchdrag';\nexport const ALL_ACTIONS = '*';\n","const SELECTION_NEW_ENTRY = 1;\nconst SELECTION_NEW_EXIT = -1;\nconst SELECTION_NULL = 0;\nconst SELECTION_OLD_ENTRY = 2;\nconst SELECTION_OLD_EXIT = -2;\n\nexport {\n SELECTION_NEW_ENTRY,\n SELECTION_NEW_EXIT,\n SELECTION_NULL,\n SELECTION_OLD_ENTRY,\n SELECTION_OLD_EXIT\n};\n","import SelectionSet from './selection-set';\n\nexport default SelectionSet;\n","import { ReservedFields } from 'muze-utils';\nimport {\n SELECTION_NEW_ENTRY, SELECTION_NEW_EXIT, SELECTION_NULL, SELECTION_OLD_ENTRY, SELECTION_OLD_EXIT\n} from '../enums/selection';\n/* eslint-disable guard-for-in */\n\n/**\n * This component is used to keep track of the row tuples of the data which gets added and removed. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\n * @param {Array.} completeSet Set of unique ids.\n */\n constructor ({ keys, fields }, _volatile) {\n this.completeSet = keys;\n this._set = {};\n this._uidMap = {};\n this._measureNames = {};\n this._dimVals = {};\n\n for (const key in keys) {\n this._set[key] = SELECTION_NULL;\n this._uidMap[key] = keys[key].uid;\n this._measureNames[key] = keys[key].measureNames;\n this._dimVals[key] = keys[key].dims;\n }\n this._fields = fields;\n this._fieldIndices = fields.reduce((acc, v, i) => {\n acc[v] = i;\n return acc;\n }, {});\n this._volatile = _volatile;\n this._completeSetCount = Object.keys(keys).length;\n this._resetted = true;\n }\n\n /**\n * Adds a set of ids to the selection set. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n add (ids) {\n this._resetted = false;\n\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n if (i in set) {\n set[i] = SELECTION_NEW_ENTRY;\n }\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_ENTRY && set[key] !== SELECTION_OLD_ENTRY) {\n set[key] = set[key] < 0 ? SELECTION_OLD_EXIT : SELECTION_NEW_EXIT;\n }\n }\n return this;\n }\n\n /**\n * Adds an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n update (ids) {\n const set = this._set;\n // from exitset to entryset\n ids.forEach((i) => {\n if (i in set) {\n set[i] = SELECTION_OLD_ENTRY;\n }\n });\n\n return this;\n }\n\n /**\n * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateEntry () {\n const set = this._set;\n\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_ENTRY ? SELECTION_OLD_ENTRY : set[key];\n }\n return this;\n }\n\n /**\n * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\n * @return {SelectionSet} Instance of selection set.\n */\n updateExit () {\n const set = this._set;\n // from exitset to entryset\n for (const key in set) {\n set[key] = set[key] === SELECTION_NEW_EXIT ? SELECTION_OLD_EXIT : set[key];\n }\n return this;\n }\n\n /**\n * Removes an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\n * @return {SelectionSet} Instance of selection set\n */\n remove (ids) {\n this._resetted = false;\n\n const set = this._set;\n ids.forEach((i) => {\n i in set && (set[i] = SELECTION_NEW_EXIT);\n });\n\n for (const key in set) {\n if (set[key] !== SELECTION_NEW_EXIT && set[key] !== SELECTION_OLD_EXIT) {\n set[key] = set[key] === 0 ? SELECTION_NEW_ENTRY : SELECTION_OLD_ENTRY;\n }\n }\n\n return this;\n }\n\n getSets (config = {}) {\n const set = this._set;\n const uidMap = this._uidMap;\n const retObj = {\n entrySet: [[], []],\n exitSet: [[], []],\n mergedEnter: [],\n mergedExit: [],\n completeSet: []\n };\n const dimVals = this._dimVals;\n const { keepDims, fields = [], keys = false } = config;\n const measureNames = this._measureNames;\n\n for (const key in set) {\n const measureNamesArr = measureNames[key] || [];\n let val;\n if (keepDims) {\n val = fields.map((field) => {\n if (field === ReservedFields.MEASURE_NAMES) {\n return measureNamesArr;\n } else if (field === ReservedFields.ROW_ID) {\n return uidMap[key];\n }\n return dimVals[key][this._fieldIndices[field]];\n });\n } else if (keys) {\n val = key;\n } else {\n val = measureNamesArr.length ? [uidMap[key], measureNamesArr] : [uidMap[key]];\n }\n\n if (set[key] > 0) {\n [SELECTION_OLD_ENTRY, SELECTION_NEW_ENTRY].forEach((v, i) => {\n if (set[key] === v) {\n retObj.entrySet[i].push(val);\n }\n });\n if (set[key] === SELECTION_OLD_ENTRY || set[key] === SELECTION_NEW_ENTRY) {\n retObj.mergedEnter.push(val);\n }\n } else if (set[key] < 0) {\n [SELECTION_OLD_EXIT, SELECTION_NEW_EXIT].forEach((v, i) => {\n if (set[key] === v) {\n retObj.exitSet[i].push(val);\n }\n });\n if (set[key] === SELECTION_OLD_EXIT || set[key] === SELECTION_NEW_EXIT) {\n retObj.mergedExit.push(val);\n }\n }\n retObj.completeSet.push(val);\n }\n\n return retObj;\n }\n\n /**\n * Resets an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\n * @return {SelectionSet} Instance of selection set.\n */\n reset (ids) {\n const set = this._set;\n if (ids) {\n ids.forEach((i) => {\n i in set && (set[i] = SELECTION_NULL);\n });\n } else {\n for (const key in set) {\n set[key] = SELECTION_NULL;\n }\n }\n this._resetted = true;\n return this;\n }\n\n /**\n * Gets the set of ids which are added in the selection set.\n *\n * @public\n *\n * @return {Array.} Array of unique ids\n */\n getEntrySet () {\n const set = this._set;\n const addSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_ENTRY && addSet.push(key);\n }\n\n return addSet;\n }\n\n /**\n * Returns a set of unique ids which are already present in entry set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old entry set or new entry set\n */\n getExistingEntrySet (addSet) {\n const set = this._set;\n return addSet.filter(d => set[d] === SELECTION_NEW_ENTRY || set[d] === SELECTION_OLD_ENTRY);\n }\n\n /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\n */\n getExistingExitSet (removeSet) {\n const set = this._set;\n return removeSet.filter(d => set[d] === SELECTION_NEW_EXIT || set[d] === SELECTION_OLD_EXIT);\n }\n\n /**\n * Gets the array of ids which are in the exit set.\n *\n * @public\n * @return {Array.} Array of unique ids\n */\n getExitSet () {\n const set = this._set;\n const removeSet = [];\n\n for (const key in set) {\n set[key] === SELECTION_NEW_EXIT && removeSet.push(key);\n }\n return removeSet;\n }\n\n /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\n */\n getCompleteSet () {\n const set = this._set;\n const completeSet = [];\n\n for (const key in set) {\n completeSet.push(key);\n }\n\n return completeSet;\n }\n\n getCompleteSetCount () {\n return this._completeSetCount;\n }\n\n resetted () {\n return this._resetted;\n }\n}\n\nexport default SelectionSet;\n","export const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const target = SideEffect.target();\n if (target === context.target() || target === 'all') {\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n }\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\n};\n\nexport const initializeBehaviouralActions = (context, actions) => {\n const dispatchableBehaviours = {};\n\n actions = actions instanceof Array ? actions : Object.values(actions);\n actions.forEach((Action) => {\n dispatchableBehaviours[Action.formalName()] = new Action(context);\n });\n return dispatchableBehaviours;\n};\n\nexport const initializePhysicalActions = (context, actions) => {\n const physicalActions = {};\n\n for (const name in actions) {\n if (!({}).hasOwnProperty.call(name, actions)) {\n physicalActions[name] = actions[name](context);\n }\n }\n return physicalActions;\n};\n\nexport const changeSideEffectAvailability = (context, fn, toEnable) => {\n const sideEffects = context.sideEffects();\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n let change = true;\n if (fn && fn(key) === false) {\n change = false;\n }\n if (change) {\n toEnable ? sideEffects[key].enable() : sideEffects[key].disable();\n }\n }\n }\n};\n\nexport const getMergedSet = set => [...new Set([...set[0], ...set[1]])];\n\nexport const getSourceFields = (propagationInf, criteria = {}) => {\n const sourceIdentifiers = propagationInf.sourceIdentifiers;\n let sourceFields;\n if (sourceIdentifiers) {\n sourceFields = sourceIdentifiers.fields.map(d => d.name);\n } else if (criteria instanceof Array) {\n sourceFields = criteria[0];\n } else {\n sourceFields = Object.keys(criteria || {});\n }\n return sourceFields;\n};\n\nexport const getSideEffects = (behaviour, behaviourEffectMap) => {\n const sideEffects = [];\n for (const key in behaviourEffectMap) {\n const behaviours = key.split(',');\n const found = behaviours.some(d => d === behaviour);\n if (found) {\n sideEffects.push({\n effects: behaviourEffectMap[key],\n behaviours\n });\n }\n }\n return sideEffects;\n};\n\n","import {\n mergeRecursive,\n hasTouch,\n selectElement,\n isSimpleObject,\n getDataModelFromRange,\n ReservedFields,\n FieldType,\n defaultValue\n} from 'muze-utils';\nimport { ALL_ACTIONS } from './enums/actions';\nimport SelectionSet from './selection-set';\nimport {\n initializeBehaviouralActions,\n initializeSideEffects,\n changeSideEffectAvailability,\n initializePhysicalActions,\n getSideEffects,\n setSideEffectConfig\n} from './helper';\n\nexport const getUidsFromCriteria = (data, { dm, dimensionsMap, dimsMapGetter, addMeasures = true }) => {\n const fieldsConfig = Object.assign({}, dm.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(dm.getFieldsConfig()).length,\n def: {\n name: ReservedFields.ROW_ID,\n type: FieldType.DIMENSION\n }\n }\n });\n\n if (data === null) {\n return null;\n }\n\n const criteriaFields = data[0];\n const fields = criteriaFields.length ? criteriaFields.map((d, i) => ({\n name: d,\n index: i\n })) : [];\n\n const fieldIndexMap = fields.reduce((acc, v, i) => {\n acc[v.name] = i;\n return acc;\n }, {});\n\n const uids = [];\n const measureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES);\n const propDims = fields.filter(d => d.name in fieldsConfig).map(d => d.name);\n\n const dimsMap = dimsMapGetter(propDims, fieldsConfig);\n for (let i = 1, len = data.length; i < len; i++) {\n const row = data[i];\n const dimKey = propDims.map(field => row[fieldIndexMap[field]]);\n const origRow = dimsMap[dimKey];\n if (origRow) {\n origRow.forEach((rowVal) => {\n const rowId = rowVal[rowVal.length - 1];\n if (!measureNameField) {\n const measuresArr = dimensionsMap[rowId].length ? dimensionsMap[rowId] : [[]];\n measuresArr.forEach((measures) => {\n uids.push([rowId, ...(addMeasures ? measures : [])]);\n });\n } else {\n let measuresArr = row[fieldIndexMap[measureNameField]];\n\n if (!measuresArr.length) {\n measuresArr = dimensionsMap[rowId].length ? dimensionsMap[rowId] : [];\n if (measuresArr.length) {\n measuresArr.forEach((measures) => {\n uids.push([rowId, measures]);\n });\n } else {\n uids.push([rowId]);\n }\n } else {\n uids.push(measuresArr.length ? [rowId, measuresArr] : [rowId]);\n }\n }\n });\n }\n }\n\n return uids;\n};\n\nconst cloneObj = (behaviourEffectMap) => {\n const keys = Object.keys(behaviourEffectMap);\n\n return keys.reduce((acc, key) => {\n const value = behaviourEffectMap[key];\n const cloned = value.map((d) => {\n let clonedVal = d;\n if (isSimpleObject(d)) {\n clonedVal = mergeRecursive({}, d);\n }\n return clonedVal;\n });\n acc[key] = cloned;\n return acc;\n }, {});\n};\n\nconst getKeysFromCriteria = (criteria, firebolt) => {\n if (criteria) {\n const data = firebolt.data();\n const { dimensionsMap } = firebolt._metaData;\n\n let values = [];\n if (isSimpleObject(criteria)) {\n const dm = getDataModelFromRange(data, criteria);\n dm.getData({ withUid: true }).data.forEach((row) => {\n const id = row[row.length - 1];\n const measures = criteria[ReservedFields.MEASURE_NAMES] || dimensionsMap[id] || [];\n if (measures.length) {\n measures.forEach((measureArr) => {\n values.push(`${[id, ...measureArr]}`);\n });\n } else {\n values.push([id]);\n }\n });\n } else {\n const dimsMapGetter = firebolt._dimsMapGetter;\n values = getUidsFromCriteria(criteria, {\n dm: firebolt.data(),\n dimensionsMap,\n dimsMapGetter\n });\n }\n return values;\n }\n return null;\n};\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\n */\nexport default class Firebolt {\n constructor (context, actions, sideEffects, behaviourEffectMap) {\n this.context = context;\n this._sideEffectDefinitions = {};\n this._sideEffects = {};\n this._propagationInf = {};\n this._sourceSelectionSet = {};\n this._actions = {\n behavioural: {},\n physical: {}\n };\n this._selectionSet = {};\n this._volatileSelectionSet = {};\n this._propagationFields = {};\n this._sideEffectPolicies = {};\n this._propagationBehaviourMap = {};\n this._behaviourPolicies = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\n this._handlers = {};\n this._payloadGenerators = {};\n this._payloads = {};\n\n this.mapSideEffects(cloneObj(behaviourEffectMap));\n this.registerBehaviouralActions(actions.behavioural);\n this.registerSideEffects(sideEffects);\n this.registerPhysicalBehaviouralMap(actions.physicalBehaviouralMap);\n this.registerPhysicalActions(actions.physical);\n }\n\n config (...config) {\n if (config.length) {\n this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\n return this;\n }\n return this._config;\n }\n\n mapSideEffects (behEffectMap) {\n const behaviourEffectMap = this._behaviourEffectMap;\n for (const key in behEffectMap) {\n if ({}.hasOwnProperty.call(behEffectMap, key)) {\n const sideEffects = behEffectMap[key] || [];\n let preventDefaultActions = false;\n let effectNames;\n if (isSimpleObject(sideEffects)) {\n effectNames = sideEffects.effects;\n preventDefaultActions = sideEffects.preventDefaultActions;\n } else {\n effectNames = sideEffects;\n }\n effectNames = effectNames.map((effect) => {\n if (!isSimpleObject(effect)) {\n return {\n name: effect\n };\n }\n return effect;\n });\n !behaviourEffectMap[key] && (behaviourEffectMap[key] = []);\n this._behaviourEffectMap[key] = [...new Set(preventDefaultActions ? effectNames :\n [...behaviourEffectMap[key], ...effectNames])];\n }\n }\n return this;\n }\n\n registerBehaviouralActions (actions) {\n const behaviours = initializeBehaviouralActions(this, actions);\n this.prepareSelectionSets(behaviours);\n Object.assign(this._actions.behavioural, behaviours);\n return this;\n }\n\n prepareSelectionSets () {\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n return this;\n }\n\n applySideEffects (sideEffects, selectionSet, payload) {\n const sideEffectStore = this.sideEffects();\n const actionHistory = this._actionHistory;\n const queuedSideEffects = this._queuedSideEffects;\n sideEffects.forEach((sideEffect) => {\n const effects = sideEffect.effects;\n const behaviours = sideEffect.behaviours;\n effects.forEach((effect) => {\n let options = {};\n let name;\n if (typeof effect === 'object') {\n name = effect.name;\n options = effect.options || {};\n } else {\n name = effect;\n }\n const sideEffectInstance = sideEffectStore[name];\n if (sideEffectInstance && sideEffectInstance.isEnabled()) {\n if (!sideEffectInstance.constructor.mutates() &&\n Object.values(actionHistory).some(d => d.isMutableAction)) {\n queuedSideEffects[`${name}-${behaviours.join()}`] = {\n name,\n params: [selectionSet, payload, options]\n };\n } else {\n this.dispatchSideEffect(name, selectionSet, payload, options);\n }\n }\n });\n });\n return this;\n }\n\n dispatchSideEffect (name, selectionSet, payload, options = {}) {\n const sideEffectStore = this.sideEffects();\n const sideEffect = sideEffectStore[name];\n const { setTransform } = options;\n selectionSet = setTransform ? setTransform(selectionSet, payload, sideEffect) : selectionSet;\n sideEffect.apply(selectionSet, payload, options);\n }\n\n registerPropagationBehaviourMap (map) {\n this._propagationBehaviourMap = Object.assign(this._propagationBehaviourMap, map || {});\n return this;\n }\n\n shouldApplyHighlightEffect () {\n return true;\n }\n\n dispatchBehaviour (behaviour, payload, propagationInfo = {}) {\n // payload = this.sanitizePayload(payload);\n const propagate = propagationInfo.propagate !== undefined ? propagationInfo.propagate : true;\n const behaviouralActions = this._actions.behavioural;\n const action = behaviouralActions[behaviour];\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(behaviour, behaviourEffectMap);\n this._propagationInf = propagationInfo;\n this._payloads[behaviour] = payload;\n\n if (action) {\n action.dispatch(payload);\n this._entryExitSet[behaviour] = action.entryExitSet();\n const shouldApplySideEffects = this.shouldApplySideEffects(propagationInfo);\n const shouldApplyHighlightEffect = this.shouldApplyHighlightEffect(behaviour);\n\n if (shouldApplyHighlightEffect) {\n if (propagate) {\n this.propagate(behaviour, payload, action.propagationIdentifiers(), { sideEffects });\n }\n\n if (shouldApplySideEffects) {\n const applicableSideEffects = this.getApplicableSideEffects(sideEffects, payload, propagationInfo);\n this.applySideEffects(applicableSideEffects, this.getEntryExitSet(behaviour), payload);\n }\n }\n }\n return this;\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet.find(d => !d.sourceSelectionSet);\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n changeBehaviourStateOnPropagation (behaviour, value, key = 'default') {\n const behaviourConditions = this._behaviourPolicies[behaviour] || (this._behaviourPolicies[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sideEffectPolicies[sideEffect] ||\n (this._sideEffectPolicies[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sideEffectPolicies[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._behaviourPolicies[behaviour][key];\n return this;\n }\n\n propagate () {\n return this;\n }\n\n sideEffects (...sideEffects) {\n if (sideEffects.length) {\n this._sideEffects = sideEffects[0];\n return this;\n }\n return this._sideEffects;\n }\n\n enableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, true);\n return this;\n }\n\n disableSideEffects (fn) {\n changeSideEffectAvailability(this, fn, false);\n return this;\n }\n\n dissociateBehaviour (behaviour, physicalAction) {\n const actionBehaviourMap = this._actionBehaviourMap;\n for (const key in actionBehaviourMap) {\n if (key === physicalAction) {\n const behaviourMap = actionBehaviourMap[key];\n behaviourMap.behaviours = behaviourMap.behaviours.filter(d => d !== behaviour);\n this.mapActionsAndBehaviour(key);\n }\n }\n\n return this;\n }\n\n dissociateSideEffect (sideEffect, behaviour) {\n const behaviourEffectMap = this._behaviourEffectMap;\n behaviourEffectMap[behaviour] = behaviourEffectMap[behaviour].filter(d => (d.name || d) !== sideEffect);\n return this;\n }\n\n getApplicableSideEffects (sideEffects) {\n return sideEffects;\n }\n\n attachPropagationListener (dataModel, handler = this.onDataModelPropagation()) {\n dataModel.unsubscribe('propagation');\n dataModel.on('propagation', handler);\n return this;\n }\n\n onDataModelPropagation () {\n return (propValue) => {\n const payload = propValue.payload;\n const action = payload.action;\n\n this.dispatchBehaviour(action, payload, {\n propagate: false\n });\n };\n }\n\n createSelectionSet (uniqueIds, behaviouralActions) {\n const behaviours = behaviouralActions || this._actions.behavioural;\n const selectionSet = this._selectionSet;\n const volatileSelectionSet = this._volatileSelectionSet;\n\n for (const key in behaviours) {\n if ({}.hasOwnProperty.call(behaviours, key)) {\n selectionSet[key] = new SelectionSet(uniqueIds);\n volatileSelectionSet[key] = new SelectionSet(uniqueIds, true);\n this._entryExitSet[key] = null;\n }\n }\n\n this._volatileSelectionSet = volatileSelectionSet;\n this.selectionSet(selectionSet);\n return this;\n }\n\n selectionSet (...selectionSet) {\n if (selectionSet.length) {\n this._selectionSet = selectionSet[0];\n return this;\n }\n return this._selectionSet;\n }\n\n initializeSideEffects () {\n const sideEffectDefinitions = this._sideEffectDefinitions;\n this.sideEffects(initializeSideEffects(this, sideEffectDefinitions));\n return this;\n }\n\n target () {\n return 'all';\n }\n\n registerPhysicalActions (actions, context = this) {\n const initedActions = initializePhysicalActions(context, actions);\n Object.assign(this._actions.physical, initedActions);\n return this;\n }\n\n /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\n if (action === ALL_ACTIONS) {\n for (const key in behaviouralActions) {\n this._propagationFields[key] = {\n fields,\n append\n };\n }\n } else {\n this._propagationFields[action] = {\n fields,\n append\n };\n }\n return this;\n }\n\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\n let target;\n const mapObj = map[action];\n target = mapObj.target;\n const touch = mapObj.touch;\n if (!target) {\n target = this.context.getDefaultTargetContainer();\n }\n const bind = hasTouch() ? touch === true || touch === undefined : !touch;\n bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n this.registerPhysicalActionHandlers();\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(this._actionBehaviourMap, map);\n return this;\n }\n\n /**\n * Binds a target element with an action.\n *\n * @param {Function} action Action method\n * @param {string} target Class name of element\n * @param {Array} behaviourList Array of behaviours\n * @return {FireBolt} Instance of firebolt\n */\n bindActionWithBehaviour (action, targets, behaviourList) {\n if (typeof (targets) === 'string') {\n targets = [targets];\n }\n targets.forEach((target) => {\n const mount = this.context.mount();\n const nodes = target.node instanceof Function ? target : selectElement(mount).selectAll(target);\n if (!nodes.empty()) {\n if (nodes instanceof Array) {\n nodes.forEach((node) => {\n action(selectElement(node), behaviourList);\n });\n } else {\n action(nodes, behaviourList);\n }\n }\n });\n return this;\n }\n\n getPropagationInf () {\n return this._propagationInf;\n }\n\n getAddSetFromCriteria (criteria, propagationInf = {}) {\n return {\n model: propagationInf.data ? propagationInf.data : null,\n uids: criteria ? getKeysFromCriteria(criteria, this) : null\n };\n }\n\n getSelectionSet (action) {\n return this.selectionSet()[action];\n }\n\n getFullData () {\n return this.context.data();\n }\n\n resetted () {\n return this._resetted;\n }\n\n /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n\n data () {\n return this.context.data();\n }\n\n currentData () {\n return this.data();\n }\n\n triggerPhysicalAction (event, payload) {\n const handlers = this._handlers[event] || [];\n const genericHandlers = this._handlers['*'];\n\n const allHandlers = [...Object.values(handlers), ...Object.values(genericHandlers)];\n allHandlers.forEach((fn) => {\n fn(event, payload);\n });\n\n return this;\n }\n\n onPhysicalAction (event, fn, namespace) {\n !this._handlers[event] && (this._handlers[event] = {});\n this._handlers[event][namespace] = fn;\n\n return this;\n }\n\n registerPhysicalActionHandlers () {\n this.onPhysicalAction('*', (event, payload) => {\n const { behaviours } = this._actionBehaviourMap[event];\n behaviours.forEach(beh => this.dispatchBehaviour(beh, payload));\n });\n }\n\n id () {\n return this.context.id();\n }\n\n getRangeFromIdentifiers (...params) {\n return this.context.getRangeFromIdentifiers(...params);\n }\n\n sanitizePayload (payload) {\n return payload;\n }\n\n payloadGenerators (...params) {\n if (params.length) {\n Object.assign(this._payloadGenerators, params[0]);\n }\n return this._payloadGenerators;\n }\n\n getPayloadGeneratorFor (action) {\n const defaultFn = this._payloadGenerators.__default;\n const fn = this._payloadGenerators[action];\n\n return defaultValue(fn, defaultFn);\n }\n\n getPayload (action) {\n return this._payloads[action];\n }\n\n actions () {\n return this._actions;\n }\n}\n","import { retrieveNearestGroupByReducers } from 'muze-utils';\n\nexport class EntryExitSet {\n constructor ({ uids, data, filteredModel }) {\n this._uids = uids;\n this._data = data;\n this._filteredModel = filteredModel;\n this._model = null;\n }\n\n get uids () {\n return this._uids;\n }\n\n get model () {\n if (!this._model) {\n this._model = this._filteredModel(this._data);\n }\n return this._model;\n }\n\n get length () {\n return this._uids.length;\n }\n\n get aggFns () {\n return retrieveNearestGroupByReducers(this._model);\n }\n}\n","import {\n isSimpleObject,\n DimensionSubtype,\n partition,\n ReservedFields\n} from 'muze-utils';\nimport { getSourceFields } from '../../helper';\nimport { EntryExitSet } from '../../entry-exit-set';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\n */\n dispatch (payload) {\n const criteria = payload.criteria;\n const firebolt = this.firebolt;\n const formalName = this.constructor.formalName();\n const selectionSet = firebolt.getSelectionSet(formalName);\n const propInf = this.firebolt.getPropagationInf();\n const {\n model: filteredDataModel,\n uids\n } = this.getAddSetFromCriteria(criteria, this.firebolt.getPropagationInf());\n this._payload = payload;\n\n this.setSelectionSet(uids, selectionSet, {\n filteredDataModel,\n payload\n });\n if (!propInf.sourceId) {\n this.propagationIdentifiers(selectionSet, payload);\n }\n this.entryExitSet(selectionSet, filteredDataModel, payload);\n }\n\n getAddSetFromCriteria (...params) {\n return this.firebolt.getAddSetFromCriteria(...params);\n }\n\n /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\n */\n setSelectionSet () {\n return this;\n }\n\n entryExitSet (...params) {\n if (params.length) {\n const [selectionSet, filteredDataModel, payload] = params;\n const {\n entrySet,\n exitSet,\n mergedEnter,\n mergedExit,\n completeSet\n } = selectionSet.getSets();\n const propagationInf = this.firebolt.getPropagationInf();\n\n this._entryExitSet = {\n entrySet: [this.getSetInfo('oldEntry', entrySet[0], filteredDataModel),\n this.getSetInfo('newEntry', entrySet[1], filteredDataModel)],\n exitSet: [this.getSetInfo('oldEntry', exitSet[0], filteredDataModel),\n this.getSetInfo('newExit', exitSet[1], filteredDataModel)],\n mergedEnter: this.getSetInfo('mergedEnter', mergedEnter, filteredDataModel),\n mergedExit: this.getSetInfo('mergedExit', mergedExit, filteredDataModel),\n completeSet: this.getSetInfo('complete', completeSet, filteredDataModel),\n fields: getSourceFields(propagationInf, payload.criteria)\n };\n\n return this;\n }\n return this._entryExitSet;\n }\n\n getSetInfo (type, set, filteredDataModel) {\n const { sourceId } = this.firebolt.getPropagationInf();\n const data = this.firebolt.data();\n\n return new EntryExitSet({\n uids: set,\n filteredModel: (fullData) => {\n let model = null;\n if (type === 'complete') {\n return fullData;\n } else if (type === 'mergedEnter' && sourceId) {\n model = filteredDataModel;\n } else {\n const uidMap = set.reduce((acc, v) => {\n acc[v[0]] = 1;\n return acc;\n }, {});\n model = fullData.select(fields => fields[ReservedFields.ROW_ID] in uidMap, {\n saveChild: false\n });\n }\n return model;\n },\n data\n });\n }\n\n propagationIdentifiers (...params) {\n if (params.length) {\n let propData = null;\n const [selectionSet, payload] = params;\n const fieldsConfig = this.firebolt.data().getFieldsConfig();\n const { criteria } = payload;\n const propagationFields = this._propagationFields;\n\n if (selectionSet.resetted() || criteria === null) {\n propData = null;\n } else if (isSimpleObject(criteria)) {\n const fields = Object.keys(criteria);\n const [, otherFields] =\n partition(fields, (d => (fieldsConfig[d] ? fieldsConfig[d].def.subtype ===\n DimensionSubtype.CATEGORICAL : d === ReservedFields.MEASURE_NAMES)));\n const allFields = fields.filter(d => d === ReservedFields.ROW_ID ||\n fieldsConfig[d] && fieldsConfig[d].def.subtype === DimensionSubtype.CATEGORICAL);\n const { mergedEnter } = selectionSet.getSets({ keepDims: true, fields: allFields });\n propData = {\n fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : {\n name: d\n })),\n range: this.firebolt.getRangeFromIdentifiers({\n criteria,\n entrySet: selectionSet.getSets().mergedEnter,\n fields: otherFields\n }),\n identifiers: [[...allFields, ReservedFields.MEASURE_NAMES], ...mergedEnter]\n };\n } else {\n const fields = propagationFields ? [...propagationFields, ReservedFields.MEASURE_NAMES] :\n criteria[0];\n const { mergedEnter } = selectionSet.getSets({ keepDims: true, fields });\n\n propData = {\n fields: fields.map(d => (fieldsConfig[d] ? fieldsConfig[d].def : {\n name: d\n })),\n identifiers: [fields, ...mergedEnter]\n };\n }\n this._propagationIdentifiers = propData;\n return this;\n }\n return this._propagationIdentifiers;\n }\n\n static mutates () {\n return false;\n }\n\n enable () {\n this._enabled = true;\n }\n\n disable () {\n this._enabled = false;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n propagateWith (...params) {\n this._propagationFields = params[0];\n\n return this;\n }\n}\n\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class VolatileBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keys: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n","import VolatileBehaviour from './volatile';\nimport { HIGHLIGHT } from '../../enums/behaviours';\n\nexport default class HighlightBehaviour extends VolatileBehaviour {\n static formalName () {\n return HIGHLIGHT;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport * as BEHAVIOURNAMES from '../../enums/behaviours';\n\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class BrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BEHAVIOURNAMES.BRUSH;\n }\n}\n","import VolatileBehaviour from './volatile';\nimport { FILTER } from '../../enums/behaviours';\n\nexport default class FilterBehaviour extends VolatileBehaviour {\n static formalName () {\n return FILTER;\n }\n\n static mutates () {\n return true;\n }\n}\n","import GenericBehaviour from './generic';\nimport { getMergedSet } from '../../helper';\nimport * as SELECTION from '../../enums/selection';\n\nexport default class PersistentBehaviour extends GenericBehaviour {\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.sourceId) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets({ keys: true });\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n }\n\n return this;\n }\n}\n","import PersistentBehaviour from './persistent';\nimport { SELECT } from '../../enums/behaviours';\nimport { SELECTION } from '../..';\nimport { getMergedSet } from '../../helper';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return SELECT;\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt.getPropagationInf();\n // new add set\n const existingAddSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_NEW_ENTRY\n || selectionSet._set[d] === SELECTION.SELECTION_OLD_ENTRY);\n if (propagationInf.sourceId) {\n selectionSet.updateExit();\n const { entrySet } = selectionSet.getSets();\n selectionSet.reset(getMergedSet(entrySet));\n selectionSet.add(addSet);\n selectionSet.update(existingAddSet);\n } else {\n // existing add set\n if (existingAddSet.length) {\n selectionSet.updateExit();\n selectionSet.remove(existingAddSet);\n } else {\n selectionSet.updateEntry();\n selectionSet.add(addSet);\n }\n const { exitSet } = selectionSet.getSets({ keys: true });\n const mergedExitSet = getMergedSet(exitSet);\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n\n return this;\n }\n}\n\n","import { COORD_TYPES } from 'muze-utils';\n\nconst dragCriteriaRetriever = {\n [COORD_TYPES.CARTESIAN]: (firebolt, sourceInfo, { startPos, endPos }) => {\n if (startPos.x === endPos.x && startPos.y === endPos.y) {\n return {\n criteria: null\n };\n }\n const ranges = firebolt.context.getRangeFromPositions({\n startPos,\n endPos\n });\n const dimensions = {};\n dimensions.x = [startPos.x, endPos.x];\n dimensions.y = [startPos.y, endPos.y];\n\n return {\n criteria: ranges,\n dimensions\n };\n },\n [COORD_TYPES.POLAR]: () => ({\n criteria: null\n })\n};\n\n/**\n * Gets the drag action configuration\n * @param {VisualUnit} instance instance of visual unit\n * @param {Object} config x y positions\n * @return {Object} Payload of behaviour\n*/\n/* istanbul ignore next */ const getDragActionConfig = (firebolt, config) => {\n const context = firebolt.context;\n const sourceInfo = context.getSourceInfo();\n const coordType = context.coord();\n return dragCriteriaRetriever[coordType](firebolt, sourceInfo, config);\n};\n\nexport default getDragActionConfig;\n","import {\n getEvent,\n getD3Drag\n} from 'muze-utils';\nimport getDragActionConfig from './drag-action-config';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const attachDragEvent = (targetEl, action, firebolt, touch) => {\n let startPos = {};\n let endPos = {};\n let drawingInf;\n\n const d3Drag = getD3Drag();\n let touchStart;\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n drawingInf = firebolt.context.getDrawingContext();\n touchStart = new Date().getTime();\n }).on('drag', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n\n if (touch && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n const newStartPos = Object.assign({}, startPos);\n const newEndPos = Object.assign({}, endPos);\n if (startPos.x > endPos.x) {\n newStartPos.x = endPos.x;\n newEndPos.x = startPos.x;\n }\n\n if (startPos.y > endPos.y) {\n const y = startPos.y;\n newStartPos.y = endPos.y;\n newEndPos.y = y;\n }\n const payload = getDragActionConfig(firebolt, {\n startPos: newStartPos,\n endPos: newEndPos\n });\n payload.dragging = true;\n payload.dragDiff = Math.abs(startPos.x - endPos.x) + Math.abs(startPos.y - endPos.y);\n firebolt.triggerPhysicalAction(action, payload);\n }).on('end', () => {\n const event = getEvent();\n endPos = {\n x: event.x,\n y: event.y\n };\n const duration = new Date().getTime() - touchStart;\n\n if (touch && duration > 100 && Math.abs(startPos.x - endPos.x) <= 5) {\n return;\n }\n endPos.x = Math.max(0, Math.min(endPos.x, drawingInf.width));\n endPos.y = Math.max(0, Math.min(endPos.y, drawingInf.height));\n if (startPos.x > endPos.x) {\n const x = startPos.x;\n startPos.x = endPos.x;\n endPos.x = x;\n }\n\n if (startPos.y > endPos.y) {\n const y = startPos.y;\n startPos.y = endPos.y;\n endPos.y = y;\n }\n\n const payload = getDragActionConfig(firebolt, {\n startPos,\n endPos\n });\n payload.dragEnd = true;\n payload.hideSelBox = true;\n firebolt.triggerPhysicalAction(action, payload);\n }));\n};\n\n","import { getClientPoint, getEvent } from 'muze-utils';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} instance instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const context = firebolt.context;\n const tooltipConf = context.config().interaction.tooltip;\n const mode = tooltipConf.mode;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n getAllPoints: true,\n data: args,\n event\n });\n const payload = {\n criteria: nearestPoint ? nearestPoint.id : null,\n getAllPoints: false,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos,\n mode\n };\n // console.log('payload', payload.criteria);\n firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, payload);\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n firebolt.triggerPhysicalAction(ACTION_NAMES.HOVER, {\n criteria: null\n });\n });\n};\n\nexport default hover;\n","import { getClientPoint } from 'muze-utils';\n\nexport const generatePayloadFromEvent = function (args, event, firebolt) {\n const context = firebolt.context;\n const pos = getClientPoint(context.getDrawingContext().svgContainer, event.touches ? event.touches[0] : event);\n const nearestPoint = context.getNearestPoint(pos.x, pos.y, {\n data: args,\n event\n });\n return {\n criteria: nearestPoint ? nearestPoint.id : null,\n showInPosition: nearestPoint.showInPosition,\n target: nearestPoint.target,\n position: pos\n };\n};\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\nimport getDragActionConfig from './helpers/drag-action-config';\nimport { ACTIONS } from '../..';\n\nexport const selectionBoxDrag = firebolt => (targetEl) => {\n let subject;\n let drawingInf;\n const context = firebolt.context;\n const onDrag = (payload) => {\n firebolt.triggerPhysicalAction(ACTIONS.SELECTIONDRAG, payload);\n };\n const d3Drag = getD3Drag();\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n drawingInf = context.getDrawingContext();\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n subject.x += event.dx;\n subject.y += event.dy;\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(firebolt, {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n });\n onDrag(payload);\n }\n }).on('end', () => {\n const width = drawingInf.width;\n const height = drawingInf.height;\n const x = Math.min(width - subject.width, Math.max(subject.x, 0));\n const y = Math.min(height - subject.height, Math.max(subject.y, 0));\n const y2 = y + subject.height;\n const x2 = x + subject.width;\n\n if (x >= 0 && x2 <= width && y >= 0 && y2 <= height) {\n const payload = getDragActionConfig(firebolt, {\n startPos: {\n x,\n y\n },\n endPos: {\n x: x2,\n y: y2\n }\n });\n payload.dragEnd = true;\n onDrag(payload);\n }\n }));\n};\n","import { getEvent } from 'muze-utils';\nimport { generatePayloadFromEvent } from './helpers';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const click = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = generatePayloadFromEvent(args, event, firebolt);\n firebolt.triggerPhysicalAction(ACTION_NAMES.CLICK, payload);\n event.stopPropagation();\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport { longtouch } from './longtouch';\nimport { touchdrag } from './touch-drag';\nimport { selectionBoxDrag } from './selection-box-drag';\nimport * as ACTION_NAMES from '../../enums/actions';\nimport click from './click';\n\nexport const physicalActions = {\n [ACTION_NAMES.DRAG]: drag,\n [ACTION_NAMES.HOVER]: hover,\n [ACTION_NAMES.CLICK]: click,\n [ACTION_NAMES.LONGTOUCH]: longtouch,\n [ACTION_NAMES.TOUCHDRAG]: touchdrag,\n [ACTION_NAMES.SELECTIONDRAG]: selectionBoxDrag\n};\n\n","import { attachDragEvent } from './helpers/drag-event';\nimport * as ACTION_NAMES from '../../enums/actions';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl) => {\n attachDragEvent(targetEl, ACTION_NAMES.DRAG, firebolt);\n};\n\nexport default drag;\n","/* global setTimeout */\nimport { getEvent } from 'muze-utils';\nimport * as ACTION_NAMES from '../../enums/actions';\nimport { generatePayloadFromEvent } from './helpers';\n\n/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nexport const longtouch = firebolt => (targetEl) => {\n let event;\n let touchEnd;\n const dispatchBehaviour = function (args) {\n const payload = generatePayloadFromEvent(args, event, firebolt);\n firebolt.triggerPhysicalAction(ACTION_NAMES.LONGTOUCH, payload);\n event.stopPropagation();\n };\n\n touchEnd = false;\n event = getEvent();\n targetEl.on('touchstart', (args) => {\n event = getEvent();\n touchEnd = false;\n setTimeout(() => {\n if (!touchEnd) {\n dispatchBehaviour(args);\n } else {\n firebolt.triggerPhysicalAction(ACTION_NAMES.LONGTOUCH, {\n criteria: null\n });\n }\n }, 100);\n }).on('touchend', () => {\n touchEnd = true;\n });\n};\n","import { attachDragEvent } from './helpers/drag-event';\n\n/**\n * Adds dragging action to the target element.\n * @param {VisualUnit} instance Instance of visual unit.\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\nexport const touchdrag = firebolt => (targetEl, behaviours) => {\n attachDragEvent(targetEl, behaviours, firebolt, true);\n};\n\n","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\nconst FRAGMENTED_TOOLTIP = 'fragmented-tooltip';\nconst AXIS_LABEL_HIGHLIGHTER = 'axis-label-highlighter';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP,\n FRAGMENTED_TOOLTIP,\n AXIS_LABEL_HIGHLIGHTER\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\n */\nexport default class GenericSideEffect {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n this._strategy = 'default';\n this._config = {};\n this._id = getUniqueId();\n this._strategies = {};\n generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n this.sourceInfo(() => this.firebolt.context.getSourceInfo());\n this.layers(() => this.firebolt.context.layers());\n this.plotPointsFromIdentifiers((...args) => this.firebolt.context.getPlotPointsFromIdentifiers(...args));\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\n */\n config (...params) {\n if (params.length) {\n this._config = mergeRecursive(this._config, params[0]);\n return this;\n }\n return this._config;\n }\n\n disable () {\n this._enabled = false;\n return this;\n }\n\n enable () {\n this._enabled = true;\n return this;\n }\n\n isEnabled () {\n return this._enabled;\n }\n\n /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n\n sourceInfo (...sourceInfo) {\n if (sourceInfo.length) {\n this._sourceInfo = sourceInfo[0];\n return this;\n }\n return this._sourceInfo();\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers();\n }\n\n plotPointsFromIdentifiers (...params) {\n if (params.length && params[0] instanceof Function) {\n this._plotPointsFromIdentifiers = params[0];\n return this;\n }\n return this._plotPointsFromIdentifiers(...params);\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\n applyInteractionStyle (set, config = {}, layers) {\n const { interactionType, apply, reset = false } = config;\n const allLayers = layers || this.firebolt.context.layers();\n allLayers.forEach((layer) => {\n const { interactive } = layer.config();\n if (interactive !== false) {\n const layerFields = layer.data().getFieldsConfig();\n const filteredUids = set.uids.filter(([, measures = []]) => measures.every(m => m in layerFields))\n .map(d => d[0]);\n const options = { apply, reset, styles: null };\n layer.applyInteractionStyle(interactionType, filteredUids, options);\n }\n });\n return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\n * ```\n */\n drawingContext (...drawingContext) {\n if (drawingContext.length) {\n this._drawingContext = drawingContext[0];\n return this;\n }\n return this._drawingContext();\n }\n\n show () {\n return this;\n }\n\n hide () {\n return this;\n }\n}\n","import { selectElement } from 'muze-utils';\n\nexport const getBoxDimensionsFromPayload = (payload, axes, axisFields) => {\n let x1;\n let x2;\n let y1;\n let y2;\n let xRange;\n let yRange;\n const criteria = payload.criteria;\n const dimensions = payload.dimensions || {};\n const { x: xDim, y: yDim } = dimensions;\n\n if (!criteria) return null;\n\n if (axes.x && axes.y) {\n const xAxis = axes.x[0];\n const yAxis = axes.y[0];\n const xLinear = xAxis.constructor.type() === 'linear';\n const yLinear = yAxis.constructor.type() === 'linear';\n const xField = `${axisFields.x[0]}`;\n const yField = `${axisFields.y[0]}`;\n const xCriteria = criteria[xField];\n const yCriteria = criteria[yField];\n\n if (xCriteria && xCriteria[0] instanceof Array) {\n xRange = xCriteria[0];\n yRange = xCriteria[1];\n } else {\n xRange = xCriteria || [];\n yRange = yCriteria || [];\n }\n\n if (xRange && xRange.length) {\n const domain = xAxis.domain();\n const bandScale = xAxis.constructor.type() === 'band';\n let x1Val = xRange[0];\n let x2Val = xRange[xRange.length - 1];\n\n if (bandScale) {\n let x1DomainIndex = domain.indexOf(xRange[0]);\n let x2DomainIndex = domain.indexOf(xRange[xRange.length - 1]);\n [x1DomainIndex, x2DomainIndex] = [x1DomainIndex, x2DomainIndex].sort((a, b) => a - b);\n x1Val = domain[x1DomainIndex];\n x2Val = domain[x2DomainIndex];\n }\n\n x1 = xAxis.getScaleValue(x1Val);\n x2 = xAxis.getScaleValue(x2Val);\n x2 += bandScale ? xAxis.getUnitWidth() : 0;\n }\n\n if (yRange && yRange.length) {\n const domain = yAxis.domain();\n const bandScale = yAxis.constructor.type() === 'band';\n let y1Val = yRange[0];\n let y2Val = yRange[yRange.length - 1];\n\n if (bandScale) {\n let y1DomainIndex = domain.indexOf(yRange[0]);\n let y2DomainIndex = domain.indexOf(yRange[yRange.length - 1]);\n [y1DomainIndex, y2DomainIndex] = [y1DomainIndex, y2DomainIndex].sort(((a, b) => b - a));\n y1Val = domain[y1DomainIndex];\n y2Val = domain[y2DomainIndex];\n }\n\n y1 = yAxis.getScaleValue(y1Val);\n y2 = yAxis.getScaleValue(y2Val);\n y2 += yAxis.constructor.type() === 'band' ? yAxis.getUnitWidth() : 0;\n }\n\n if ((yLinear && xLinear) || !payload.dragEnd) {\n if (xDim) {\n [x1, x2] = xDim;\n }\n if (yDim) {\n [y1, y2] = yDim;\n }\n }\n }\n\n return {\n dimension: {\n x1,\n x2,\n y1,\n y2\n },\n direction: 'both'\n };\n};\n\nexport const changeVisibility = (context, sideEffectGroup, visible) => {\n const config = context.config();\n const className = config.defClassName;\n const classPrefix = config.classPrefix;\n selectElement(sideEffectGroup).selectAll(`.${classPrefix}-${className}`)\n .style('display', visible ? 'block' : 'none');\n};\n","import {\n getQualifiedClassName,\n selectElement,\n makeElement,\n isValidValue\n} from 'muze-utils';\nimport { SELECTIONDRAG } from '../../enums/actions';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport './styles.scss';\nimport SpawnableSideEffect from '../spawnable';\nimport { selectionBoxDrag } from '../../actions/physical/selection-box-drag';\nimport { getBoxDimensionsFromPayload, changeVisibility } from './helper';\nimport { BEHAVIOURS } from '../..';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\nclass SelectionBox extends SpawnableSideEffect {\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n defClassName: 'selection-box-group',\n className: '',\n classPrefix: CLASSPREFIX,\n box: {\n defClassName: 'selection-box',\n className: ''\n },\n transition: {\n duration: 200\n },\n persistent: false\n };\n }\n\n static formalName () {\n return 'selectionBox';\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n * @param {Object} dimension Dimensions of the selection box.\n * @param {number} dimension.x1 Starting x position\n * @param {number} dimension.x2 Ending x position\n * @param {number} dimension.y1 Starting y position\n * @param {number} dimension.y2 Ending y position\n * @param {Object} conf Configuration needed to draw the selection box\n * @param {number} unitWidth Width of the visual unit.\n * @param {number} unitHeight Height of the visual unit.\n */\n apply (selectionSet, payload) {\n let x = 0;\n let y = 0;\n let width;\n let height;\n const config = this._config;\n const boxConf = config.box;\n const firebolt = this.firebolt;\n const drawingInf = this.drawingContext();\n const mountPoint = drawingInf.sideEffectGroup;\n const unitWidth = drawingInf.width;\n const unitHeight = drawingInf.height;\n const classPrefix = config.classPrefix;\n const selectionGroupClassName = config.defClassName;\n\n width = unitWidth;\n height = unitHeight;\n\n // Hide selection-box on dragEnd or when criteria is empty\n if (!payload.criteria || (payload.hideSelBox && !config.persistent)) {\n this.hide(drawingInf);\n return this;\n }\n\n const sourceInf = this.sourceInfo();\n const { dimension, direction } =\n getBoxDimensionsFromPayload(payload, sourceInf.axes, sourceInf.fields);\n const transition = payload.dragEnd && config.transition;\n\n if (direction === 'both') {\n x = Math.min(dimension.x1, dimension.x2);\n y = Math.min(dimension.y1, dimension.y2);\n width = Math.abs(dimension.x2 - dimension.x1);\n height = Math.abs(dimension.y2 - dimension.y1);\n }\n\n this.show(drawingInf);\n // Create the data array for drawing the rectangle\n const points = [\n {\n x,\n y,\n width,\n height\n }\n ];\n // Create the container group for selection box.\n const selectionGroup = makeElement(selectElement(mountPoint), 'g', [1],\n `.${classPrefix}-${selectionGroupClassName}`);\n const sideEffect = this;\n const selection = selectionGroup.selectAll('rect').data(points);\n const selectionBox = selection.enter().append('rect')\n .each(function () {\n // Add selectiondrag entry in firebolt._actionBehaviourMap\n firebolt.registerPhysicalBehaviouralMap({\n [SELECTIONDRAG]: {\n target: [selectElement(this)],\n behaviours: [BEHAVIOURS.BRUSH]\n }\n });\n selectionBoxDrag(firebolt)(selectElement(this), ['brush'], sideEffect);\n })\n .merge(selection)\n .each(function (attrs) {\n let element = selectElement(this);\n transition && (element = element.transition().duration(transition.duration));\n for (const key in attrs) {\n if ({}.hasOwnProperty.call(attrs, key)) {\n isValidValue(attrs[key]) && element.attr(key, attrs[key]);\n }\n }\n });\n // Get the qualified class name for selection box rectangle\n const boxClassName = getQualifiedClassName(boxConf.defClassName, this._id, classPrefix);\n selectionBox.classed(boxClassName.join(' '), true);\n selectionBox.classed(boxConf.className, true);\n\n return this;\n }\n\n hide (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, false);\n }\n\n show (drawingInf) {\n changeVisibility(this, drawingInf.sideEffectGroup, true);\n }\n}\n\nexport default SelectionBox;\n","export const CLASSPREFIX = 'muze';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const NULL = 'null';\nexport const UNDEFINED = 'undefined';\n","import { CLASSPREFIX } from './constants';\n\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'tooltip-box',\n parentClassName: 'tooltip-parent-container',\n connectorClassName: 'tooltip-connectors',\n className: '',\n row: {\n margin: 0\n },\n spacing: 5,\n content: {\n spacing: 5,\n iconContainerSize: 10,\n iconScale: 1,\n iconShape: 'circle',\n iconColor: '#ff0000',\n rowMargin: '4px 0 4px 0',\n margin: 10,\n separator: ':',\n className: 'tooltip-content-container',\n parentClassName: 'tooltip-content-parent-container'\n },\n arrow: {\n size: 10,\n disabled: false,\n defClassName: 'tooltip-arrow',\n className: '',\n color: 'rgba(195,195,195,0.85)'\n }\n};\n","export const CLASSPREFIX = 'muze';\nexport const ARROW_RIGHT = 'right';\nexport const ARROW_TOP = 'top';\nexport const ARROW_BOTTOM = 'bottom';\nexport const ARROW_LEFT = 'left';\nexport const TOOLTIP_LEFT = 'left';\nexport const TOOLTIP_RIGHT = 'right';\nexport const TOOLTIP_BOTTOM = 'bottom';\nexport const TOOLTIP_TOP = 'top';\nexport const INITIAL_STYLE = {\n position: 'absolute',\n width: 0,\n height: 0\n};\nexport const TABLE_FORMAT = 'table';\n","import {\n selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { TABLE_FORMAT } from './constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class is used to manage the content of tooltip.\n */\nexport default class Content {\n /**\n * Creates an instance of content.\n */\n constructor () {\n this._model = null;\n this._formatter = null;\n this._config = this.constructor.defaultConfig();\n }\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n const config = defaultConfig.content;\n config.classPrefix = defaultConfig.classPrefix;\n return config;\n }\n\n config (...c) {\n if (c.length > 0) {\n this._config = mergeRecursive(this._config, c[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Update model. The format contains presentation strategy which determines how to show the content.\n * If no strategy is mentioned then default is to show key value pair\n */\n update (item) {\n this._model = item.model;\n this._formatter = item.formatter;\n return this;\n }\n\n context (ctx) {\n this._context = ctx;\n return this;\n }\n\n render (mount) {\n let data;\n const config = this._config;\n const iconContainerSize = config.iconContainerSize;\n const formatter = this._formatter;\n const rowMargin = config.rowMargin;\n const model = this._model;\n const { classPrefix } = config;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n const mountHtmlTooltip = makeElement(mount, 'div', [1], `${classPrefix}-tooltip-html-container`);\n mountHtmlTooltip.html(data());\n } else {\n let content = data;\n let displayFormat = 'default';\n\n if (isSimpleObject(data)) {\n content = data.content;\n displayFormat = data.displayFormat;\n }\n\n const body = makeElement(mount, 'div', [displayFormat], `${classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === TABLE_FORMAT) {\n const table = makeElement(body, 'table', [1], `${classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, '', {\n update: (elem, elemData) => elem.attr('class', elemData.className)\n });\n const cells = makeElement(rows, 'span', d => d.data, `${classPrefix}-tooltip-content`);\n cells.attr('class', `${classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block' // 'margin-right': `${config.spacing}px`\n });\n\n cells.each(function (d) {\n const el = selectElement(this);\n el.html('');\n if (d instanceof Object) {\n if (d.type === 'icon') {\n const svg = makeElement(el, 'svg', [1]);\n const path = makeElement(svg, 'path', [1]);\n const shape = d.shape instanceof Function ? d.shape : getSymbol(d.shape);\n\n setAttrs(svg, {\n x: 0,\n y: 0,\n width: iconContainerSize,\n height: iconContainerSize\n });\n setAttrs(path, {\n d: shape.size(d.size)(),\n transform: `translate(${iconContainerSize / 2}, ${iconContainerSize / 2})`\n });\n setStyles(path, {\n fill: d.color\n });\n setStyles(svg, {\n width: `${iconContainerSize}px`,\n height: `${iconContainerSize}px`\n });\n } else {\n el.html(d.value);\n d.className && el.classed(d.className, true);\n setStyles(el, d.style);\n }\n } else {\n el.html(d);\n }\n });\n }\n }\n return this;\n }\n\n clear () {\n this._model = null;\n return this;\n }\n}\n","import {\n mergeRecursive,\n getQualifiedClassName,\n getUniqueId,\n selectElement,\n makeElement,\n getMaxPoint\n} from 'muze-utils';\nimport { ARROW_BOTTOM, ARROW_LEFT, ARROW_RIGHT, TOOLTIP_LEFT, TOOLTIP_RIGHT, TOOLTIP_BOTTOM,\n TOOLTIP_TOP } from './constants';\nimport { defaultConfig } from './default-config';\nimport { reorderContainers } from './helper';\nimport './styles.scss';\nimport Content from './content';\n\n/**\n * This component is responsible for creating a tooltip element. It appends the tooltip\n * in the body element.\n * @class Tooltip\n */\nexport default class Tooltip {\n /**\n * Initializes the tooltip with the container element and configuration\n * @param {HTMLElement} container container where the tooltip will be mounted.\n * @param {string} className Class name of the tooltip.\n */\n constructor (htmlContainer, svgContainer) {\n let connectorContainer = svgContainer;\n this._id = getUniqueId();\n this._config = {};\n this.config({});\n const tooltipConf = this._config;\n const classPrefix = tooltipConf.classPrefix;\n const contentClass = tooltipConf.content.parentClassName;\n const container = makeElement(htmlContainer, 'div', [1], `${classPrefix}-tooltip-container`);\n this._container = container;\n this._tooltipContainer = container.append('div').style('position', 'absolute');\n this._contentContainer = this._tooltipContainer.append('div').attr('class',\n `${classPrefix}-${tooltipConf.defClassName} ${classPrefix}-${contentClass}\n ${tooltipConf.className}`);\n\n if (!svgContainer) {\n connectorContainer = htmlContainer.append('svg').style('pointer-events', 'none');\n }\n\n this._contents = {};\n this._tooltipConnectorContainer = selectElement(connectorContainer)\n .append('g')\n .attr('class', `${tooltipConf.classPrefix}-${tooltipConf.connectorClassName}`);\n const id = this._id;\n const defClassName = tooltipConf.parentClassName;\n const qualifiedClassName = getQualifiedClassName(defClassName, id, tooltipConf.classPrefix);\n\n this.addClass(qualifiedClassName.join(' '));\n this.hide();\n }\n\n /**\n * Sets the configuration of tooltip.\n * @param {Object} config Configuration of tooltip\n * @return {Tooltip} Instance of tooltip\n */\n config (...config) {\n if (config.length > 0) {\n const defConf = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConf, config[0]);\n return this;\n }\n return this._config;\n }\n\n /**\n * Returns the default configuration of tooltip\n * @return {Object} Configuration of tooltip.\n */\n static defaultConfig () {\n return defaultConfig;\n }\n /**\n * Sets the class name of tooltip\n * @param {string} className tooltip class name\n * @return {Tooltip} Instance of tooltip.\n */\n addClass (className) {\n this._tooltipContainer.classed(className, true);\n return this;\n }\n\n context (...ctx) {\n if (ctx.length) {\n this._context = ctx[0];\n return this;\n }\n return this._context;\n }\n\n content (name, data, contentConfig = {}) {\n const config = this.config();\n const { classPrefix } = config;\n const contentClass = config.content.className;\n const formatter = config.formatter;\n const className = `${classPrefix}-${contentClass}-${name}`;\n const specificClass = `${classPrefix}-${contentConfig.className}`;\n const content = this._contents[name] = this._contents[name] || new Content();\n const container = makeElement(this._contentContainer, 'div', [contentConfig.order], className);\n container.attr('class', `${classPrefix}-${contentClass} ${className} ${specificClass}`);\n reorderContainers(this._contentContainer, `.${classPrefix}-${contentClass}`);\n const contentConf = config.content;\n contentConfig.classPrefix = this._config.classPrefix;\n content.config(contentConf);\n\n if (data === null) {\n content.clear();\n container.remove();\n delete this._contents[name];\n } else {\n content.update({\n model: data,\n formatter: contentConfig.formatter || formatter\n });\n content.context(this._context);\n content.render(container);\n }\n\n if (!Object.keys(this._contents).length) {\n this.hide();\n }\n return this;\n }\n\n getContents () {\n return Object.values(this._contents);\n }\n\n /**\n * Positions the tooltip at the given x and y position.\n * @param {number} x x position\n * @param {number} y y position\n * @return {Tooltip} Instance of tooltip.\n */\n position (x, y) {\n if (!Object.keys(this._contents).length) {\n this.hide();\n return this;\n }\n this.show();\n const target = this._target;\n\n if (target) {\n const node = this._tooltipContainer.node();\n const tooltipPos = this._orientation;\n const outsidePlot = tooltipPos === TOOLTIP_LEFT || tooltipPos === TOOLTIP_RIGHT ?\n (y + node.offsetHeight) < target.y || y > (target.y + target.height) :\n (x + node.offsetWidth) < target.x || x > (target.x + target.width);\n\n if (outsidePlot) {\n let path;\n this._tooltipConnectorContainer.style('display', 'block');\n const connector = this._tooltipConnectorContainer.selectAll('path').data([1]);\n const enter = connector.enter().append('path');\n if (tooltipPos === ARROW_LEFT) {\n path = `M ${x} ${y + node.offsetHeight / 2} L ${target.x + target.width}`\n + ` ${target.y + target.height / 2}`;\n } else if (tooltipPos === ARROW_RIGHT) {\n path = `M ${x + node.offsetWidth} ${y + node.offsetHeight / 2}`\n + ` L ${target.x} ${target.y + target.height / 2}`;\n } else if (tooltipPos === ARROW_BOTTOM) {\n path = `M ${x + node.offsetWidth / 2} ${y + node.offsetHeight}`\n + ` L ${target.x + target.width / 2} ${target.y}`;\n }\n enter.merge(connector).attr('d', path).style('display', 'block');\n } else {\n this._tooltipConnectorContainer.style('display', 'none');\n }\n }\n\n const offset = this._offset || {\n x: 0,\n y: 0\n };\n this._tooltipContainer.style('left', `${offset.x + x}px`).style('top',\n `${offset.y + y}px`);\n\n return this;\n }\n\n /**\n * Positions the tooltip relative to a rectangular box. It takes care of tooltip overflowing the\n * boundaries.\n * @param {Object} dim Dimensions of the plot.\n */\n positionRelativeTo (dim, tooltipConf = {}) {\n let obj;\n const orientation = tooltipConf.orientation;\n this.show();\n if (!dim) {\n this.hide();\n return this;\n }\n\n const extent = this._extent;\n const contentContainer = this._contentContainer.node();\n this._tooltipContainer.style('top', '0px')\n .style('left', '0px')\n .style('width', '2000px')\n .style('height', '2000px');\n\n const offsetWidth = contentContainer.offsetWidth + 4;\n const offsetHeight = contentContainer.offsetHeight + 4;\n const config = this._config;\n const offset = this._offset;\n const spacing = config.spacing;\n const draw = tooltipConf.draw !== undefined ? tooltipConf.draw : true;\n const topSpace = dim.y;\n // When there is no space in right\n const dimX = dim.x + dim.width + offset.x;\n const rightSpace = extent.width - dimX;\n const leftSpace = dim.x + offset.x - extent.x;\n const bottomSpace = extent.height - (dim.y + dim.height + offset.y);\n const arrowSize = spacing;\n const tooltipHeight = offsetHeight + arrowSize;\n const tooltipWidth = offsetWidth + arrowSize;\n\n const spaces = [{\n position: 'top',\n value: topSpace - tooltipHeight\n }, {\n position: 'right',\n value: rightSpace - tooltipWidth\n }, {\n position: 'left',\n value: leftSpace - tooltipWidth\n }, {\n position: 'bottom',\n value: bottomSpace - tooltipHeight\n }];\n\n const positionHorizontal = (positionVal) => {\n let position;\n let x = dim.x + dim.width;\n let y = dim.y;\n\n if (positionVal === 'right') {\n position = TOOLTIP_LEFT;\n x += arrowSize;\n } else if (positionVal === 'left') {\n x = dim.x - offsetWidth;\n position = TOOLTIP_RIGHT;\n x -= arrowSize;\n }\n\n if (dim.height < offsetHeight) {\n y = Math.max(0, dim.y + dim.height / 2 - offsetHeight / 2);\n }\n\n return {\n position,\n x,\n y\n };\n };\n\n const positionVertical = (positionVal) => {\n let position;\n let y;\n // Position tooltip at the center of plot\n let x = dim.x - offsetWidth / 2 + dim.width / 2;\n\n // Overflows to the right\n if ((extent.width - (dim.x + offset.x)) < offsetWidth) {\n x = extent.width - offsetWidth - offset.x;\n } else if ((x + offset.x) < extent.x) { // Overflows to the left\n x = extent.x;\n }\n\n if (positionVal === 'top') {\n y = dim.y - offsetHeight - arrowSize;\n position = TOOLTIP_BOTTOM;\n } else {\n y = dim.y + dim.height + arrowSize;\n position = TOOLTIP_TOP;\n }\n\n return {\n position,\n x,\n y\n };\n };\n\n this._target = dim;\n\n const hMax = getMaxPoint(spaces.filter(d => d.position === 'left' || d.position === 'right'),\n 'value');\n const vMax = getMaxPoint(spaces.filter(d => d.position === 'top' || d.position === 'bottom'),\n 'value');\n if (!orientation) {\n if (hMax.value > 0) {\n const position = hMax.position;\n obj = positionHorizontal(position);\n } else {\n const position = vMax.position;\n obj = positionVertical(position);\n }\n } else if (orientation === 'horizontal') {\n const position = hMax.position;\n obj = positionHorizontal(position);\n } else {\n const position = vMax.position;\n obj = positionVertical(position);\n }\n\n this._position = {\n x: obj.x,\n y: obj.y\n };\n\n this._tooltipContainer.style('height', `${offsetHeight}px`)\n .style('width', `${offsetWidth}px`);\n this._orientation = obj.position;\n draw && this.position(obj.x, obj.y);\n return this;\n }\n\n /**\n * Hides the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n hide () {\n this._tooltipContainer.style('display', 'none');\n this._tooltipConnectorContainer.style('display', 'none');\n return this;\n }\n\n /**\n * Shows the tooltip element.\n * @return {Tooltip} Instance of tooltip.\n */\n show () {\n this._tooltipContainer.style('display', 'block');\n return this;\n }\n\n extent (extent) {\n this._extent = extent;\n return this;\n }\n\n offset (offset) {\n this._offset = offset;\n return this;\n }\n\n remove () {\n this._tooltipContainer.remove();\n this._tooltipConnectorContainer.remove();\n return this;\n }\n}\n","export const reorderContainers = (parentContainer, className) => {\n parentContainer.selectAll(className).sort((a, b) => a - b);\n};\n","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect,\n ReservedFields\n} from 'muze-utils';\nimport { TABLE_FORMAT } from '@chartshq/muze-tooltip';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\nimport { BAR } from '../../../../visual-group/src/enums/constants';\nimport { NULL, UNDEFINED } from '../../enums/constants';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\nconst FIRST_VALUE_MARGIN = '10px';\nconst STACK = 'stack';\nconst SINGLE_DATA_MARGIN = 10;\nconst defNumberFormat = value => `${value % value.toFixed(0) === 0 ? value : value.toFixed(2)}`;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(defNumberFormat(value))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst isSingleValue = (dataLen, stackedSum) => dataLen === 1 && !stackedSum;\n\nconst getStackedKeyValue = (params) => {\n const { field, value, classPrefix } = params;\n return ({\n className: `${classPrefix}-tooltip-stacked-row`,\n data: [{\n value: field,\n className: `${classPrefix}-tooltip-stacked-row-key`\n }, {\n value: `${value}`,\n className: `${classPrefix}-tooltip-stacked-row-value`\n }]\n });\n};\n\nconst getKeyValue = (params) => {\n const { field, value, classPrefix, margin, isSelected, removeKey, stackedSum, isStackedBar } = params;\n let { stackedValue } = params;\n\n if (!removeKey) {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n const valueObj = {\n value,\n className: `${classPrefix}-tooltip-value`\n };\n\n if (stackedValue === NULL || stackedValue === UNDEFINED) {\n stackedValue = 0;\n }\n\n const stackedValueObj = {\n value: stackedSum ? `(${(stackedValue * 100 / stackedSum).toFixed(2)} %)` : undefined,\n className: `${classPrefix}-tooltip-stacked-percentage`\n };\n\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n valueObj.style = {\n 'margin-left': `${margin}px`\n };\n stackedValueObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n\n return ({\n className: isSelected ? `${classPrefix}-tooltip-row ${classPrefix}-tooltip-selected-row`\n : `${classPrefix}-tooltip-row`,\n data: stackedSum && isStackedBar ? [keyObj, stackedValueObj, valueObj] : [keyObj, valueObj]\n });\n }\n return ({\n data: [{\n className: '',\n value,\n style: {\n 'margin-left': FIRST_VALUE_MARGIN\n }\n }],\n className: `${classPrefix}-tooltip-first`\n });\n};\n\nexport const getStackedSum = (values, index) => values.reduce((a, b) => {\n if (b[index] instanceof InvalidAwareTypes) {\n return a + 0;\n }\n return a + b[index];\n}, 0);\n\nexport const isStackedChart = layers => layers.some(d => d.transformType() === STACK);\nexport const isStackedBarChart = layers => layers.some(d => d.transformType() === STACK && d.config().mark === BAR);\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const {\n fieldsConfig,\n dimensionMeasureMap,\n axes,\n config,\n fieldInf,\n dataLen,\n target,\n stackedSum,\n isStackedBar\n } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const REF_VALUES_INDEX = 1;\n const REF_KEYS_INDEX = 0;\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n size: sizeAxis.config().value,\n shape: shapeAxis.getShape(retinalFieldValue)\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (isSingleValue(dataLen, stackedSum)) {\n content.push(getKeyValue({\n field: displayName,\n value: formattedRetinalValue,\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push({ data: [icon, formattedRetinalValue] }));\n const selectedContext = target && target[REF_VALUES_INDEX][target[REF_KEYS_INDEX].indexOf(retField)];\n const isSelected = selectedContext === retinalFieldValue;\n\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const currentMeasureValue = valueArr[measureIndex];\n const value = formatterFn(currentMeasureValue);\n const keyValue = getKeyValue({\n field: hasMultipleMeasures ? `${dName}${separator}` : formattedRetinalValue,\n value,\n classPrefix,\n margin: hasMultipleMeasures ? margin : undefined,\n isSelected,\n stackedSum,\n stackedValue: currentMeasureValue instanceof InvalidAwareTypes\n ? currentMeasureValue.value()\n : currentMeasureValue.toFixed(2),\n isStackedBar\n });\n\n if (!hasMultipleMeasures) {\n keyValue.data = [icon, ...keyValue.data];\n }\n content.push(keyValue);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.retinalFields;\n const detailFields = context.detailFields || [];\n const { showStackSum = true } = context.config || {};\n const { selectedMeasures = [] } = context.payload;\n const dimensions = schema.filter(d => d.type === FieldType.DIMENSION);\n const measures = schema.filter(d => d.type === FieldType.MEASURE);\n const containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = TABLE_FORMAT;\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const isStacked = isStackedChart(context.layers);\n const isStackedBar = isStackedBarChart(context.layers);\n const filteredMeasures = !isSingleValue(dataLen, isStacked)\n ? measures.filter(d => allMeasures.indexOf(d.name) === -1)\n : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n\n nestedDataObj = !('key' in nestedDataObj[0]) ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const { values, key } = nestedData[i];\n const field = getObjProp(schema, indices[index], 'name');\n const margin = dataLen === 1 || Object.keys(retinalFields).length === 0\n ? SINGLE_DATA_MARGIN : undefined;\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(key);\n const removeKey = !isSingleValue(dataLen, isStacked);\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: formattedValue,\n classPrefix,\n margin,\n isSelected: undefined,\n removeKey\n }));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n let stackedSum = 0;\n if (isStacked && showStackSum) {\n stackedSum = getStackedSum(\n values,\n fieldsConfig[measures[0].name].index\n );\n const nf = measures[0].numberFormat;\n content.push(getStackedKeyValue({\n field: `${'Total'}${separator}`,\n value: nf ? nf(stackedSum.toFixed(2)) : stackedSum.toFixed(2),\n classPrefix\n }));\n }\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen,\n target: context.payload.target,\n stackedSum,\n isStackedBar\n });\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n isSelected: selectedMeasures.indexOf(name) !== -1,\n value: fn(valueArr[fieldsConfig[name].index]),\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\n/**\n * Calculate aggregated values of measures from entry set and datamodel.\n *\n * @param {DataModel} dm DataModel instance\n * @param {EntrySet} entrySet Entry set\n */\nconst getAggregatedValues = (dm, entrySet) => {\n // const fields = entrySet.fields;\n const aggFns = entrySet.aggFns;\n // Create a map of all the dimensions and the measures\n const dimsMap = entrySet.uids.reduce((acc, v) => {\n const dims = v[0];\n\n !acc[dims] && (acc[dims] = []);\n acc[dims].push(v[1]);\n return acc;\n }, {});\n const aggMeasures = Object.keys(dm.getFieldspace().getMeasure());\n const aggregatedValues = {};\n aggMeasures.forEach((measure) => {\n // Filter all the rows which has this measure and dimensions and apply aggregation.\n const groupedDm = dm.select((dmFields) => {\n const id = dmFields[ReservedFields.ROW_ID];\n const measures = dimsMap[id];\n if (measures) {\n return measures.find(arr => arr.indexOf(measure) !== -1);\n }\n return false;\n }, {\n saveChild: false\n }).groupBy([''], {\n [measure]: aggFns[measure] === COUNT ? SUM : aggFns[measure]\n }, {\n saveChild: false\n });\n const fieldsConfig = groupedDm.getFieldsConfig();\n if (!groupedDm.isEmpty()) {\n aggregatedValues[measure] = groupedDm.getData().data[0][fieldsConfig[measure].index];\n }\n });\n return aggregatedValues;\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const { classPrefix } = config;\n const tooltipConf = context.config;\n const { showMultipleMeasures } = tooltipConf;\n const aggFns = selectionSet.mergedEnter.aggFns;\n const entryUids = selectionSet.mergedEnter.uids;\n const fieldsConf = dm.getFieldsConfig();\n const aggregatedValues = getAggregatedValues(dm, selectionSet.mergedEnter);\n const values = [{\n className: `${classPrefix}-tooltip-row`,\n data: [{\n value: `${entryUids.length}`,\n style: {\n 'font-weight': 'bold'\n }\n }, 'Items Selected']\n }];\n let measures = Object.keys(aggregatedValues);\n if (!showMultipleMeasures) {\n measures = measures.slice(0, 1);\n }\n // Prepare the tooltip content\n measures.forEach((measure) => {\n const { numberFormat = defNumberFormat } = fieldsConf[measure].def;\n const value = aggregatedValues[measure];\n const rowValues = value instanceof InvalidAwareTypes ? [] : [`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}:`,\n {\n value: numberFormat(value),\n style: {\n 'font-weight': 'bold'\n },\n className: `${classPrefix}-tooltip-value`\n }];\n if (showMultipleMeasures) {\n values.push({\n className: `${classPrefix}-tooltip-row`,\n data: rowValues\n });\n } else {\n values[0].data.push(...rowValues);\n }\n });\n\n return values;\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { intersect } from 'muze-utils';\n\nexport const spaceOutBoxes = (boxes, extent, showVertically) => {\n let y;\n let height;\n let x;\n let width;\n let i;\n const pad = 5;\n const len = boxes.length;\n const spaceOutIfOverlap = (firstBox, secondBox, opposite) => {\n x = firstBox.x;\n width = firstBox.width;\n y = firstBox.y;\n height = firstBox.height;\n const bottom = y + height;\n const right = x + width;\n\n if (showVertically) {\n if (opposite ? y < (secondBox.y + secondBox.height) : bottom > secondBox.y) {\n secondBox.y = opposite ? firstBox.y - secondBox.height - pad :\n bottom + pad;\n }\n } else if (opposite ? x < (secondBox.x + secondBox.width) : right > secondBox.x) {\n secondBox.x = opposite ? firstBox.x - secondBox.width - pad :\n right + pad;\n }\n };\n\n boxes.sort((a, b) => (showVertically ? a.y - b.y : a.x - b.x));\n i = 0;\n\n for (i = 0; i < len - 1; i++) {\n spaceOutIfOverlap(boxes[i], boxes[i + 1]);\n }\n\n if ((boxes[i].y + boxes[i].height) > extent.height ||\n (boxes[i].x + boxes[i].width) > extent.width) {\n if (showVertically) {\n boxes[i].y -= (boxes[i].height + boxes[i].y) - extent.height;\n } else {\n boxes[i].x -= (boxes[i].width + boxes[i].x) - extent.width;\n }\n for (i = len - 1; i > 0; i--) {\n spaceOutIfOverlap(boxes[i], boxes[i - 1], true);\n }\n }\n return boxes;\n};\n\nexport const shouldApplySideEffect = (dm, sideEffect) => {\n const propagationInf = sideEffect.firebolt.getPropagationInf();\n if (propagationInf.sourceIdentifiers && dm) {\n const { fields } = propagationInf.sourceIdentifiers;\n const sourceDims = fields.filter(field => field.type === 'dimension').map(d => d.name);\n const dims = Object.keys(dm.getFieldspace().getDimension());\n return intersect(sourceDims, dims).length;\n }\n return true;\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { mergeRecursive, defaultValue } from 'muze-utils';\nimport { strategies } from './strategies';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\nimport { shouldApplySideEffect } from '../helper';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n order: 1,\n dataTransform: (dm, fields) => (fields ? dm.project(fields, { saveChild: false }) : dm)\n },\n selectionSummary: {\n order: 0,\n dataTransform: dm => dm\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\n }\n\n apply (selectionSet, payload, options = {}) {\n const dataModel = selectionSet && selectionSet.mergedEnter.model;\n if (!shouldApplySideEffect(dataModel, this)) {\n return this;\n }\n if ((payload.criteria === null || (dataModel && dataModel.isEmpty())) || selectionSet === null) {\n this.hide(options, null);\n return this;\n }\n\n const strategy = defaultValue(options.strategy, this._strategy);\n\n this.createTooltip(dataModel, Object.assign({}, {\n payload,\n selectionSet,\n strategy,\n options\n }), null, 0);\n\n return this;\n }\n\n static target () {\n return 'all';\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n const { orientation } = this.config();\n\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const tooltip = tooltips[key];\n const strategy = options.strategy || this._strategy;\n tooltip.content(strategy, null);\n if (!Object.keys(tooltip._contents).length) {\n tooltip.hide();\n } else {\n tooltip.positionRelativeTo(tooltip._target, {\n orientation\n });\n }\n }\n }\n }\n\n getPlotPointsFromIdentifiers (payload) {\n const target = payload.target;\n // if (target) {\n // targetFields = target[0] || [];\n // const sourceFields = payload.sourceFields;\n // const indices = [];\n // for (let i = 0, len = targetFields.length; i < len; i++) {\n // if (sourceFields.indexOf(targetFields[i]) !== -1) {\n // indices.push(i);\n // }\n // }\n // target = target.map(d => d.filter((v, i) => indices.indexOf(i) !== -1));\n // }\n\n return super.plotPointsFromIdentifiers(target || payload.criteria, {\n getBBox: true\n });\n }\n\n createTooltip (dataModel, props = {}, plotDim, key) {\n const drawingInf = this.drawingContext();\n const sourceInf = this.sourceInfo();\n const config = this.config();\n const {\n strategy,\n payload,\n selectionSet\n } = props;\n plotDim = defaultValue(plotDim, this.getPlotPointsFromIdentifiers(payload));\n plotDim = plotDim && plotDim[0];\n const pad = config.padding;\n const { showInPosition, position: tooltipPos } = payload;\n const { fields: projectFields, dataTransform } = config[strategy];\n\n const strategyFn = this._strategies[strategy];\n const dt = dataTransform(dataModel, projectFields, this);\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\n const layoutBoundBox = layoutContainer.getBoundingClientRect();\n const unitBoundBox = drawingInf.htmlContainer.getBoundingClientRect();\n\n const offsetLeft = unitBoundBox.left - layoutBoundBox.left;\n const offsetTop = unitBoundBox.top - layoutBoundBox.top;\n const tooltipInst = this._tooltips[key] = this._tooltips[key] || new TooltipRenderer(layoutContainer,\n drawingInf.svgContainer);\n\n Object.assign(sourceInf, {\n payload,\n firebolt: this.firebolt,\n detailFields: [],\n timeDiffs: sourceInf.timeDiffs,\n valueParser: this.valueParser(),\n selectionSet,\n config: config[strategy]\n });\n\n tooltipInst.context(sourceInf);\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: config[strategy].order,\n className: config[strategy].className\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.height\n })\n .offset({\n x: offsetLeft + (config.offset.x || 0),\n y: offsetTop + (config.offset.y || 0)\n });\n\n if (showInPosition) {\n tooltipInst.position(tooltipPos.x + pad, tooltipPos.y + pad);\n } else if (plotDim) {\n tooltipInst.positionRelativeTo({\n x: plotDim.x,\n y: plotDim.y,\n width: plotDim.width || 0,\n height: plotDim.height || 0\n }, {\n orientation: config.orientation\n }\n );\n } else {\n tooltipInst.hide();\n }\n }\n}\n","import { FieldType, ReservedFields } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { FRAGMENTED_TOOLTIP } from '../../enums/side-effects';\nimport Tooltip from '../tooltip';\n\nexport default class FragmentedTooltip extends Tooltip {\n static formalName () {\n return FRAGMENTED_TOOLTIP;\n }\n\n createTooltip (dataModel, props) {\n let totalHeight = 0;\n let totalWidth = 0;\n const config = this.config();\n const { strategy } = props;\n const context = this.firebolt.context;\n const drawingInf = this.drawingContext();\n\n const tooltips = this._tooltips;\n const boundBox = {\n width: drawingInf.width,\n height: drawingInf.height\n };\n const pad = config.padding;\n const dataModels = [];\n const sourceInf = context.getSourceInfo();\n const fields = sourceInf.fields;\n const xFieldDim = fields.x[0] ? fields.x[0].type() === FieldType.DIMENSION : false;\n const showVertically = !!xFieldDim;\n const boxes = [];\n const uids = dataModel.getUids();\n\n dataModels.push(...uids.map(uid => dataModel.select(fieldsArr =>\n fieldsArr[ReservedFields.ROW_ID].value === uid, {\n saveChild: false\n })));\n\n const enter = {};\n for (let i = 0, len = dataModels.length; i < len; i++) {\n const dm = dataModels[i];\n const dimensions = dm.getData().schema.filter(d => d.type === FieldType.DIMENSION).map(d => d.name);\n const plotDim = context.getPlotPointsFromIdentifiers(dm.project(dimensions), { getBBox: true });\n\n super.createTooltip(dm, props, plotDim, i);\n const tooltipInst = this._tooltips[i];\n enter[i] = this._tooltips[i];\n\n const position = tooltipInst._position;\n const tooltipBoundBox = tooltipInst._tooltipContainer.node().getBoundingClientRect();\n\n totalHeight += tooltipBoundBox.height + pad;\n totalWidth += tooltipBoundBox.width + pad;\n\n if (showVertically ? totalHeight > drawingInf.height : totalWidth > drawingInf.width) {\n break;\n }\n\n position && boxes.push({\n x: position.x,\n y: position.y,\n width: tooltipBoundBox.width,\n height: tooltipBoundBox.height,\n tooltip: tooltipInst\n });\n }\n\n for (const key in tooltips) {\n if (!enter[key]) {\n const tooltip = tooltips[key];\n tooltip.content(strategy, null);\n if (!tooltip.getContents().length) {\n tooltip.remove();\n delete tooltips[key];\n }\n }\n }\n\n boxes.length && spaceOutBoxes(boxes, boundBox, showVertically);\n boxes.forEach(box => box.tooltip.position(box.x, box.y, {\n repositionArrow: true\n }));\n\n return this;\n }\n\n hide (options) {\n const tooltips = this._tooltips;\n for (const key in tooltips) {\n if ({}.hasOwnProperty.call(tooltips, key)) {\n const strategy = options.strategy || this._strategy;\n tooltips[key].content(strategy, null);\n tooltips[key].hide();\n }\n }\n }\n}\n","import { selectElement, FieldType } from 'muze-utils';\n\nimport './styles.scss';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { CROSSLINE } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nexport default class Crossline extends SpawnableSideEffect {\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-crossline-group`,\n bandClass: `${CLASSPREFIX}-crossband`,\n lineClass: `${CLASSPREFIX}-crossline`\n };\n }\n\n static formalName () {\n return CROSSLINE;\n }\n\n apply (selectionSet, payload) {\n let height;\n let bandWidth;\n let px;\n let width;\n const {\n className,\n bandClass,\n lineClass\n } = this.config();\n const dataModel = selectionSet.mergedEnter.model;\n const drawingInf = this.drawingContext();\n const isEmptyDataModel = dataModel && dataModel.isEmpty();\n if (payload.criteria && isEmptyDataModel) {\n this.hide();\n return this;\n }\n if (payload.criteria === null || !dataModel) {\n this.hide();\n return this;\n }\n\n const dataObj = dataModel.getData();\n const sourceInf = this.firebolt.context.getSourceInfo();\n const axes = sourceInf.axes;\n const axisFields = sourceInf.fields;\n const fields = selectionSet.fields;\n const data = dataObj.data;\n const fieldsConfig = dataModel.getFieldsConfig();\n const svgContainer = drawingInf.sideEffectGroup;\n\n const elemData = [];\n fields.forEach((field) => {\n const fieldIndex = fieldsConfig[field] && fieldsConfig[field].index;\n const dataArr = data.map(d => d[fieldIndex]);\n const axisIndex = [['x', 0], ['x', 1], ['y', 0], ['y', 1]].find((arr) => {\n const fieldInst = axisFields[arr[0]][arr[1]];\n return fieldInst && fieldInst.type() === FieldType.DIMENSION &&\n fieldInst.getMembers().indexOf(field) !== -1;\n });\n if (axisIndex !== undefined && data.length) {\n const type = axisIndex[0];\n const axis = axes[type][axisIndex[1]];\n const value = dataArr[0];\n bandWidth = axis.getUnitWidth() || 0;\n px = axis.getScaleValue(value) + bandWidth / 2 + drawingInf.xOffset;\n\n let layers = this.firebolt.context.layers();\n layers = layers.filter(layer => !!layer.config().crossline);\n\n if (layers.length) {\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...layers.map(layer => layer.getPlotPadding()[type]));\n height = drawingInf.height;\n width = drawingInf.width;\n const startPx = px - plotWidth / 2 - pad / 2;\n const endPx = px + plotWidth / 2 + pad / 2;\n const dataPoint = {};\n if (type === 'y') {\n dataPoint.d = `M 0 ${startPx} L 0 ${endPx} L ${width} ${endPx} L ${width} ${startPx} Z`;\n } else {\n dataPoint.d = `M ${startPx} 0 L ${endPx} 0 L ${endPx} ${height} L ${startPx} ${height} Z`;\n }\n dataPoint.className = plotWidth ? bandClass : lineClass;\n !isNaN(px) && elemData.push(dataPoint);\n }\n }\n });\n if (elemData.length) {\n const parentGroup = this.createElement(svgContainer, 'g', [1], className);\n const elem = this.createElement(parentGroup, 'path', elemData);\n elem.attr('d', d => d.d).style('pointer-events', 'none')\n .attr('class', d => d.className);\n }\n return this;\n }\n\n hide () {\n const className = this.config().className;\n const drawingInf = this.drawingContext();\n selectElement(drawingInf.sideEffectGroup).selectAll(`.${className}`).remove();\n }\n\n static target () {\n return 'visual-unit';\n }\n}\n","import { difference, intersect } from 'muze-utils';\n\n/**\n * @private\n * @param {Object} set Points set\n * @param {Array.} selectedPointsId array of id of selected points\n * @return {Object} Returns the set with the selected points removed\n */\nexport const getFormattedSet = (set, selectedPointsId, intersection = false) => {\n const fn = intersection ? intersect : difference;\n const formattedSet = fn(set.uids, selectedPointsId,\n [d => d[0], d => d[0]]);\n return {\n ...set,\n ...{\n uids: formattedSet,\n length: formattedSet.length\n }\n };\n};\n","import { intersect, difference } from 'muze-utils';\nimport { getFormattedSet } from './helper';\nimport { BEHAVIOURS } from '../..';\n\nconst fadeFn = (set, context) => {\n const { formattedSet } = set;\n const {\n mergedEnter,\n mergedExit,\n exitSet,\n completeSet\n } = formattedSet;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType: 'fade', apply: false });\n } else {\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n // Apply style only on the hovered layer\n if (layerName === 'area') {\n context.applyInteractionStyle(mergedEnter, { interactionType: 'fade', apply: true }, [layer]);\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: false }, [layer]);\n } else {\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: true }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'fade', apply: false }, [layer]);\n }\n });\n }\n};\n\nconst fadeOnBrushFn = (set, context, payload) => {\n const { formattedSet } = set;\n const {\n exitSet,\n mergedEnter,\n mergedExit,\n completeSet\n } = formattedSet;\n\n const { dragEnd } = payload;\n let interactionType = 'brushStroke';\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType, apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'doubleStroke', apply: false });\n } else {\n if (dragEnd) {\n interactionType = 'doubleStroke';\n // onDrag style\n context.applyInteractionStyle(completeSet, { interactionType: 'brushStroke', apply: false });\n }\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n // Apply style only on the hovered layer\n if (layerName === 'area') {\n if (dragEnd) {\n context.applyInteractionStyle(exitSet, { interactionType: 'fade', apply: false }, [layer]);\n mergedEnter.length &&\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]);\n }\n } else {\n // dragEnd style\n context.applyInteractionStyle(mergedExit, { interactionType, apply: false }, [layer]);\n if (!payload.dragEnd) {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]);\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]);\n }\n\n interactionType !== 'doubleStroke' &&\n context.applyInteractionStyle(mergedExit, { interactionType: 'doubleStroke', apply: false });\n context.applyInteractionStyle(mergedEnter, { interactionType, apply: true }, [layer]);\n }\n });\n }\n};\n\nexport const strategies = {\n fade: fadeFn,\n fadeOnBrush: fadeOnBrushFn,\n focus: (set, context) => {\n const { formattedSet } = set;\n const {\n entrySet,\n mergedEnter,\n mergedExit,\n completeSet\n } = formattedSet;\n const { firebolt } = context;\n\n if (!mergedEnter.length && !mergedExit.length) {\n context.applyInteractionStyle(completeSet, { interactionType: 'focus', apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'focusStroke', apply: false });\n context.applyInteractionStyle(completeSet, { interactionType: 'commonDoubleStroke', apply: false });\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focusStroke', apply: false });\n context.applyInteractionStyle(entrySet, { interactionType: 'focusStroke', apply: true });\n\n const payload = firebolt.getPayload(BEHAVIOURS.HIGHLIGHT) || {};\n const entryExitSet = firebolt.getEntryExitSet(BEHAVIOURS.HIGHLIGHT);\n const layers = firebolt.context.layers();\n\n layers.forEach((layer) => {\n const layerName = layer.constructor.formalName();\n\n if (layerName === 'area') {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: false }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: true }, [layer]);\n } else {\n context.applyInteractionStyle(mergedExit, { interactionType: 'focus', apply: true }, [layer]);\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false }, [layer]);\n }\n\n if (payload.target !== null && entryExitSet) {\n // get uids of only the currently highlighted point\n const actualPoint = layer.getUidsFromPayload(entryExitSet.mergedEnter, payload.target);\n\n const commonSet = intersect(mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n\n if (commonSet.length) {\n context.applyInteractionStyle({ uids: commonSet },\n { interactionType: 'commonDoubleStroke', apply: true },\n [layer]\n );\n } else {\n context.applyInteractionStyle({ uids: mergedExit.uids },\n { interactionType: 'commonDoubleStroke', apply: false },\n [layer]\n );\n }\n }\n });\n }\n },\n highlight: (set, context, payload, excludeSetIds) => {\n const { selectionSet } = set;\n\n if (!selectionSet.mergedEnter.length && !selectionSet.mergedExit.length) {\n // Remove focusStroke on selected but currently non-highlighted set\n context.applyInteractionStyle(selectionSet.completeSet, { interactionType: 'highlight', apply: false });\n context.applyInteractionStyle(selectionSet.completeSet,\n { interactionType: 'commonDoubleStroke', apply: false }\n );\n } else {\n const layers = context.firebolt.context.layers();\n\n layers.forEach((layer) => {\n if (payload.target !== null) {\n // get uids of only the currently highlighted point\n const actualPoint = layer.getUidsFromPayload(selectionSet.mergedEnter, payload.target);\n // get uids of only the currently highlighted point excluding the excludeSet ids\n const currentHighlightedSet = getFormattedSet(actualPoint, excludeSetIds);\n\n // Apply highlight on the currently hovered point\n context.applyInteractionStyle(currentHighlightedSet,\n { interactionType: 'highlight', apply: true },\n [layer]\n );\n\n context.applyInteractionStyle(selectionSet.mergedExit,\n { interactionType: 'highlight', apply: false },\n [layer]\n );\n\n const selectEntrySet = context.firebolt.getEntryExitSet('select');\n if (selectEntrySet) {\n const commonSet = intersect(selectEntrySet.mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n const diffSet = difference(selectEntrySet.mergedEnter.uids, actualPoint.uids,\n [v => v[0], v => v[0]]);\n\n if (commonSet.length) {\n context.applyInteractionStyle({ uids: commonSet },\n { interactionType: 'commonDoubleStroke', apply: true },\n [layer]\n );\n }\n context.applyInteractionStyle({ uids: diffSet },\n { interactionType: 'commonDoubleStroke', apply: false },\n [layer]\n );\n }\n }\n });\n }\n },\n pseudoFocus: (set, context) => {\n const { formattedSet } = set;\n const {\n mergedEnter\n } = formattedSet;\n\n context.applyInteractionStyle(mergedEnter, { interactionType: 'focus', apply: false });\n }\n};\n","import SurrogateSideEffect from '../surrogate';\nimport { strategies } from './strategy';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\nimport { getFormattedSet } from './helper';\n\nexport default class PlotHighlighter extends SurrogateSideEffect {\n constructor (...params) {\n super(...params);\n this._strategy = 'highlight';\n this._strategies = strategies;\n }\n\n static formalName () {\n return HIGHLIGHTER;\n }\n\n static target () {\n return 'visual-unit';\n }\n\n getExcludeSetIds (excludeSet = []) {\n // Get excludeSetIds if excludeSet is a function\n if (excludeSet instanceof Function) {\n return excludeSet(this.firebolt.getEntryExitSet);\n }\n // Get excludeSetIds if excludeSet is not a function\n return excludeSet.reduce((acc, behaviour) => {\n const selectedPoints = this.firebolt.getEntryExitSet(behaviour) || {};\n const selectedPointsIds = (selectedPoints.mergedEnter || {}).uids;\n if (selectedPointsIds) acc.push(...selectedPointsIds);\n return acc;\n }, []);\n }\n\n apply (selectionSet, payload, options = {}) {\n const currentStrategy = this._strategies[options.strategy || this._strategy];\n const excludeSetIds = this.getExcludeSetIds(options.excludeSet);\n\n // Get all sets except the excludeSet points\n const formattedSet = {\n ...selectionSet,\n completeSet: getFormattedSet(selectionSet.completeSet, excludeSetIds),\n entrySet: getFormattedSet(selectionSet.entrySet[1], excludeSetIds),\n exitSet: getFormattedSet(selectionSet.exitSet[1], excludeSetIds),\n mergedEnter: getFormattedSet(selectionSet.mergedEnter, excludeSetIds),\n mergedExit: getFormattedSet(selectionSet.mergedExit, excludeSetIds)\n };\n\n const totalSet = { selectionSet, formattedSet };\n\n currentStrategy(totalSet, this, payload, excludeSetIds);\n\n return this;\n }\n}\n","import SurrogateSideEffect from '../surrogate';\n\nexport default class FilterEffect extends SurrogateSideEffect {\n static formalName () {\n return 'filter';\n }\n\n static target () {\n return 'all';\n }\n\n static mutates () {\n return true;\n }\n\n apply (selectionSet, payload) {\n const firebolt = this.firebolt;\n const entryModel = selectionSet.mergedEnter.model;\n\n if (payload.criteria === null) {\n firebolt.resetData();\n } else {\n firebolt.data(entryModel);\n }\n return this;\n }\n}\n","import { DataModel, getObjProp, mergeRecursive, ReservedFields, dmMultipleSelection } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: {\n field: getObjProp(depLayerEncoding, 'color', 'field'),\n value: getObjProp(depLayerEncoding, 'color', 'value')\n },\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: () => sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const layerOwner = layerDef.def.name;\n const name = `${layerOwner}-${commonName}`;\n const defaultClassName = `${sideEffect.constructor.defaultConfig().className}`;\n\n layers.push({\n name: `${name}-upper`,\n mark: 'point',\n groupId: `${commonName}-upper`,\n className: `${defaultClassName}-upper`,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n\n if (mark === 'area') {\n layers.push({\n name: `${name}-lower`,\n mark: 'point',\n groupId: `${commonName}-lower`,\n className: `${defaultClassName}-lower`,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\n }\n\n static target () {\n return 'visual-unit';\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-anchors-group`\n };\n }\n\n static formalName () {\n return ANCHORS;\n }\n\n addAnchorLayers () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n /**\n * Returns the default area value of the anchor point.\n * @return { number } Default area value of anchor.\n */\n defaultSizeValue () {\n return 70;\n }\n\n // Default offset by which anchor size is changed\n getAnchorSizeOnInteraction ({ dragEnd }) {\n if (dragEnd) {\n return 40;\n }\n return 0;\n }\n\n apply (selectionSet, payload) {\n const dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n const context = this.firebolt.context;\n const upperAnchors = context.layers().filter(layer => layer.config().groupId === `${formalName}-upper`);\n const lowerAnchors = context.layers().filter(layer => layer.config().groupId === `${formalName}-lower`);\n\n const { target, action } = payload;\n let targetObj = null;\n if (target) {\n targetObj = target[1].reduce((acc, v, i) => {\n const field = target[0][i];\n if (field !== ReservedFields.MEASURE_NAMES) {\n acc[field] = v;\n }\n return acc;\n }, {});\n }\n\n [...upperAnchors, ...lowerAnchors].forEach((layer, index) => {\n const layerConfig = layer.config();\n const linkedLayer = context.getLayerByName(layerConfig.owner);\n const linkedLayerName = linkedLayer.constructor.formalName();\n const groupId = layerConfig.groupId;\n const isUpperAnchor = groupId === `${formalName}-upper`;\n let transformedData = [];\n let schema = [];\n\n [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel, index);\n\n // Render both upper and lower anchors for area plot if hovered over an anchor\n if (linkedLayerName === 'area' && target && action === 'highlight') {\n const filterFn = dmMultipleSelection(target, dataModel);\n const dmFromPayload = dataModel.select(filterFn, {});\n\n if (!isUpperAnchor) {\n [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dmFromPayload, index);\n }\n }\n\n const transformedDataModel = new DataModel(transformedData, schema);\n const anchorSizeConfig = {\n encoding: {\n size: {\n value: () => this.defaultSizeValue() + this.getAnchorSizeOnInteraction(payload)\n },\n 'stroke-width': {\n value: this.getAnchorStroke(payload, targetObj)\n }\n }\n };\n const newConfig = mergeRecursive(layerConfig, anchorSizeConfig);\n\n layer\n .data(transformedDataModel)\n .config(newConfig);\n\n return this;\n });\n }\n\n getAnchorStroke (payload, targetObj) {\n return (d) => {\n const dataObj = d.data.dataObj;\n const matchingData = targetObj ? Object.keys(targetObj).every((key) => {\n const val = dataObj[key];\n return val === targetObj[key];\n }) : false;\n return matchingData ? '1px' : '0px';\n };\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\n\nexport default class PersistentAnchors extends AnchorEffect {\n static formalName () {\n return PERSISTENT_ANCHORS;\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-persistent-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n setAnchorLayerStyle (layers) {\n const anchorLayers = layers.filter(l => l.config().groupId === PERSISTENT_ANCHORS);\n anchorLayers.forEach((anchor) => {\n // Execute focusStroke interaction of anchor point layer\n const ids = anchor.data().getUids();\n const layerName = this.constructor.formalName();\n const defaultInteractionLayerEncoding = anchor.config().encoding.interaction;\n anchor.applyInteractionStyle(defaultInteractionLayerEncoding[layerName], ids, { apply: true });\n });\n }\n\n // offset value by which anchor size is changed\n // Applied only on select interaction\n getAnchorSizeonInteraction () {\n return 50;\n }\n\n getAnchorStroke () {\n return '2px';\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\n\nexport default class BrushAnchors extends AnchorEffect {\n static formalName () {\n return BRUSH_ANCHORS;\n }\n\n static defaultConfig () {\n return {\n className: `${CLASSPREFIX}-brush-anchors`\n };\n }\n\n getTransitionConfig () {\n return {\n disabled: true\n };\n }\n\n setAnchorLayerStyle (layers) {\n const anchorLayers = layers.filter(l => l.config().groupId === BRUSH_ANCHORS);\n anchorLayers.forEach((anchor) => {\n // Execute focusStroke interaction of anchor point layer\n const ids = anchor.data().getUids();\n const layerName = this.constructor.formalName();\n const defaultInteractionLayerEncoding = anchor.config().encoding.interaction;\n anchor.applyInteractionStyle(defaultInteractionLayerEncoding[layerName], ids, { apply: true });\n });\n }\n\n getAnchorStroke (payload) {\n return payload.dragEnd ? '2px' : '1px';\n }\n}\n","import SurrogateSideEffect from '../surrogate';\nimport { AXIS_LABEL_HIGHLIGHTER } from '../../enums/side-effects';\nimport './styles.scss';\nimport { shouldApplySideEffect } from '../helper';\n\nexport default class AxisLabelHighLighter extends SurrogateSideEffect {\n static formalName () {\n return AXIS_LABEL_HIGHLIGHTER;\n }\n\n static target () {\n return 'visual-unit';\n }\n\n apply (selectionSet) {\n const context = this.firebolt.context;\n const dataModel = selectionSet && selectionSet.mergedEnter.model;\n if (!shouldApplySideEffect(dataModel, this)) {\n return this;\n }\n const selectedData = dataModel && dataModel.getData().data;\n const selectedDataValues = selectedData && selectedData.length ? selectedData[0] : [];\n const { x = [], y = [] } = context.axes();\n [...x, ...y].forEach((axis) => {\n const fieldMeta = dataModel ? dataModel.getFieldsConfig()[axis.config().field] : undefined;\n const selData = selectedDataValues[fieldMeta && fieldMeta.index !== undefined\n ? fieldMeta.index : undefined];\n const { selectionSet: selectedElements, rejectionSet } = axis.getTicksBasedOnData(selData);\n selectedElements && selectedElements.selectAll('text').classed('muze-axis-ticks-highlight', true);\n rejectionSet.selectAll('text').classed('muze-axis-ticks-highlight', false);\n });\n\n return this;\n }\n}\n","import { intersect, getObjProp } from 'muze-utils';\nimport * as BEHAVIOURS from './enums/behaviours';\nimport * as SIDE_EFFECTS from './enums/side-effects';\n\nconst nullDataTooltipMap = {\n area: true,\n arc: false,\n line: true,\n text: false,\n point: false,\n bar: false,\n tick: false\n};\n\nconst applySideEffectOnEmptyTarget = (sideEffect, { target }) => {\n const layers = sideEffect.layers();\n const showTooltipOnEmptyTarget = layers.some((l) => {\n const layerName = l.constructor.formalName();\n return nullDataTooltipMap[layerName];\n });\n return showTooltipOnEmptyTarget || target;\n};\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: ['selectionBox', {\n name: 'highlighter',\n options: {\n strategy: 'fadeOnBrush'\n }\n }, 'brush-anchors'],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: 'highlighter',\n options: {\n strategy: 'highlight'\n }\n }, 'crossline', {\n name: 'tooltip',\n options: {\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active) {\n return null;\n }\n if (applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return selectionSet;\n }\n return null;\n }\n }\n }, 'anchors', {\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary',\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active === true ||\n !applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return null;\n }\n const selectEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.SELECT);\n const brushEntrySet = sideEffect.firebolt.getEntryExitSet(BEHAVIOURS.BRUSH);\n if (selectEntrySet || brushEntrySet) {\n let uids = [];\n let returnEntrySet = null;\n if (getObjProp(selectEntrySet, 'mergedEnter', 'uids', 'length')) {\n uids = selectEntrySet.mergedEnter.uids;\n returnEntrySet = selectEntrySet;\n } else if (getObjProp(brushEntrySet, 'mergedEnter', 'uids', 'length')) {\n uids = brushEntrySet.mergedEnter.uids;\n returnEntrySet = brushEntrySet;\n }\n\n const { uids: highlightUids } = selectionSet.mergedEnter;\n\n if (intersect(uids, highlightUids, [id => id[0], id => id[0]]).length) {\n return returnEntrySet;\n }\n }\n\n return null;\n }\n }\n }, {\n name: SIDE_EFFECTS.AXIS_LABEL_HIGHLIGHTER,\n options: {\n setTransform: (selectionSet, payload, sideEffect) => {\n if (sideEffect.firebolt._actions.behavioural.brush.active) {\n return null;\n }\n if (applySideEffectOnEmptyTarget(sideEffect, payload)) {\n return selectionSet;\n }\n return null;\n }\n }\n }],\n [BEHAVIOURS.FILTER]: ['filter'],\n [BEHAVIOURS.SELECT]: [{\n name: 'highlighter',\n options: {\n strategy: 'focus'\n }\n }, 'persistent-anchors', {\n name: 'tooltip',\n options: {\n strategy: 'selectionSummary'\n }\n }],\n pseudoSelect: [{\n name: 'highlighter',\n options: {\n strategy: 'pseudoFocus'\n }\n }]\n};\n","import { componentRegistry } from 'muze-utils';\nimport * as behaviours from './actions/behavioural';\nimport { physicalActions } from './actions/physical';\nimport * as sideEffects from './side-effects';\n\nconst convertToObj = (comps) => {\n const obj = {};\n\n for (const key in comps) {\n const val = comps[key];\n\n obj[val.formalName()] = val;\n }\n return obj;\n};\n\nexport const registry = {\n behaviours: componentRegistry(convertToObj(behaviours)),\n physicalActions: componentRegistry(physicalActions),\n sideEffects: componentRegistry(convertToObj(sideEffects))\n};\n","import { ReservedFields, difference, isSimpleObject, getIndexMap } from 'muze-utils';\n\nconst getIdentifierMeasureMap = (identifiers, fields, facetsMap) => {\n const identifierIdxMap = getIndexMap(identifiers[0]);\n const identifierValues = identifiers.slice(1, identifiers.length);\n\n return identifierValues.reduce((acc, row) => {\n let facetPresent = true;\n\n for (const field in facetsMap) {\n const facetVal = row[identifierIdxMap[field]];\n facetPresent = facetPresent && facetVal === facetsMap[field];\n }\n\n if (facetPresent) {\n const key = fields.map((field) => {\n const fieldIndex = identifierIdxMap[field];\n\n return row[fieldIndex];\n });\n const measureNamesIdx = identifierIdxMap[ReservedFields.MEASURE_NAMES];\n\n if (measureNamesIdx !== undefined) {\n const measureArr = row[measureNamesIdx];\n !acc[key] && (acc[key] = []);\n\n if (measureArr && measureArr.length) {\n acc[key].push([measureArr]);\n }\n }\n }\n\n return acc;\n }, {});\n};\n\nconst getRangeFromData = (instance, selectionDataModel, propConfig) => {\n const dataObj = selectionDataModel.getData();\n const { includeMeasures = true, sourceIdentifiers } = propConfig;\n const schema = dataObj.schema;\n const fieldMap = instance.data().getFieldsConfig();\n const selectionDataFields = selectionDataModel.getFieldspace().fieldsObj();\n let criteria = null;\n if (sourceIdentifiers !== null) {\n criteria = schema.reduce((ranges, obj) => {\n const field = obj.name;\n const fieldObj = fieldMap[field];\n\n if (!fieldObj) {\n return ranges;\n }\n\n ranges[field] = selectionDataFields[field].domain();\n return ranges;\n }, {});\n const measureNamesIdx = sourceIdentifiers.identifiers[0]\n .findIndex(field => field === ReservedFields.MEASURE_NAMES);\n if (measureNamesIdx !== undefined && includeMeasures) {\n const measureNames = sourceIdentifiers.identifiers.slice(1, sourceIdentifiers.identifiers.length)\n .map(d => d[measureNamesIdx]);\n criteria[ReservedFields.MEASURE_NAMES] = measureNames.map(d => [d]);\n }\n }\n return criteria;\n};\n\nexport const payloadGenerator = {\n brush: (instance, selectionDataModel, propConfig, facetByFields) => {\n const propPayload = propConfig.payload;\n let payload;\n if (isSimpleObject(propPayload.criteria)) {\n const criteria = getRangeFromData(instance, selectionDataModel, propConfig);\n payload = Object.assign({}, propPayload);\n payload.criteria = criteria;\n } else {\n payload = payloadGenerator.__default(instance, selectionDataModel, propConfig, facetByFields);\n }\n\n return payload;\n },\n\n __default: (instance, propagationDataModel, propConfig, facetByFields = {}) => {\n let propagationDataDims = [];\n let criteria = null;\n\n const { payload: propPayload, sourceIdentifiers, excludeSelectedMeasures } = propConfig;\n const { data } = propagationDataModel.getData({ withUid: true });\n const payload = Object.assign({}, propPayload);\n const fieldsConfig = Object.assign({}, propagationDataModel.getFieldsConfig(), {\n [ReservedFields.ROW_ID]: {\n index: Object.keys(propagationDataModel.getFieldsConfig()).length\n }\n });\n\n propagationDataDims = Object.keys(propagationDataModel.getFieldspace().getDimension());\n !propagationDataDims.length && (propagationDataDims = [ReservedFields.ROW_ID]);\n\n if (sourceIdentifiers) {\n const identifierMap = getIdentifierMeasureMap(sourceIdentifiers.identifiers, propagationDataDims,\n facetByFields);\n const dataArr = [];\n\n for (let i = 0, len = data.length; i < len; i++) {\n const row = data[i];\n const dims = [];\n\n propagationDataDims.forEach((field) => {\n const idx = fieldsConfig[field].index;\n dims.push(row[idx]);\n });\n const uid = row[row.length - 1];\n const dimKey = `${dims}`;\n\n if (dimKey in identifierMap) {\n const measures = identifierMap[dimKey];\n const allMeasures = instance._metaData.dimensionsMap[uid];\n\n if (excludeSelectedMeasures) {\n const diffMeasures = difference(allMeasures, measures);\n diffMeasures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n } else if (measures && measures.length) {\n measures.forEach((measureArr) => {\n dataArr.push([...dims, measureArr]);\n });\n } else {\n dataArr.push([...dims, []]);\n }\n } else {\n dataArr.push([...dims, []]);\n }\n }\n\n criteria = [[...propagationDataDims, ReservedFields.MEASURE_NAMES], ...dataArr];\n }\n\n payload.criteria = criteria;\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : [];\n return payload;\n },\n pseudoSelect: (instance, selectionDataModel, propConfig) =>\n payloadGenerator.__default(instance, selectionDataModel, Object.assign({}, {\n excludeSelectedMeasures: true\n }, propConfig))\n};\n\nexport const getPayloadGenerator = (action, criteria) => {\n if (criteria instanceof Array || !payloadGenerator[action]) {\n return payloadGenerator.__default;\n }\n\n return payloadGenerator[action];\n};\n","import { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { FieldType, defaultValue } from 'muze-utils';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\n\nexport const clearActionHistory = (context) => {\n const actionHistory = context._actionHistory;\n for (const key in actionHistory) {\n if (actionHistory[key].isMutableAction) {\n delete context._actionHistory[key];\n }\n }\n};\n\nexport const dispatchQueuedSideEffects = (context) => {\n const queuedSideEffects = context._queuedSideEffects;\n Object.entries(queuedSideEffects).forEach((entry) => {\n const sideEffect = entry[1];\n context.dispatchSideEffect(sideEffect.name, ...sideEffect.params);\n });\n context._queuedSideEffects = {};\n};\n\nexport const isSideEffectEnabled = (firebolt, { se, propagationInf }) => {\n const sideEffectPolicies = firebolt._sideEffectPolicies;\n const sideEffectCheckers = Object.values(sideEffectPolicies[se.name || se] || {});\n const { sourceIdentifiers, data: propagationData } = propagationInf;\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, firebolt, {\n sourceIdentifiers,\n propagationData\n })) : true;\n};\n\nconst getUniqueKeys = (data, { layers, uids, keys = {}, dimensionsMap = {}, dimensions }) => {\n data.forEach((row, i) => {\n const key = [uids[i]];\n const dims = dimensions.map(d => row[d.index]);\n layers.forEach((layer) => {\n const measureNames = Object.keys(layer.data().getFieldspace().getMeasure());\n const mKey = `${[key, ...measureNames]}`;\n keys[mKey] = defaultValue(keys[mKey], {});\n keys[mKey] = {\n dims,\n measureNames,\n uid: uids[i]\n };\n dimensionsMap[key] = defaultValue(dimensionsMap[key], []);\n measureNames.length && dimensionsMap[key].push(measureNames);\n });\n });\n\n return {\n keys,\n dimensionsMap\n };\n};\n\nexport const prepareSelectionSetMap = ({ data, uids, dimensions }, layers, maps = {}) => {\n const obj = getUniqueKeys(data, {\n layers,\n uids,\n keys: maps.keys,\n dimensions,\n dimensionsMap: maps.dimensionsMap\n });\n\n return {\n keys: obj.keys,\n dimensionsMap: obj.dimensionsMap\n };\n};\n\nexport const prepareSelectionSetData = (dataModel, unit) => {\n const { data, uids } = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.values(fieldsConfig).filter(d => d.def.type === FieldType.DIMENSION);\n const layers = unit.layers();\n const { keys, dimensionsMap } = prepareSelectionSetMap({ data, uids, dimensions }, layers);\n\n return {\n keys,\n dimensions,\n dimensionsMap\n };\n};\n\nexport const dispatchSecondaryActions = (firebolt, { action, propagationData, config, propagationInf }) => {\n const context = firebolt.context;\n\n const secondaryActions = firebolt._connectedBehaviours[action] || [];\n\n secondaryActions.forEach((secAction) => {\n const payloadGeneratorFn = firebolt.getPayloadGeneratorFor(secAction);\n const generatedPayload = payloadGeneratorFn(firebolt, propagationData, config,\n context.facetByFields());\n firebolt.dispatchBehaviour(secAction, generatedPayload, propagationInf);\n });\n};\n\nexport const createMapByDimensions = (context, dm) => {\n let cacheMap = context._cacheMap = {};\n return (propDims, fieldsConfig) => {\n cacheMap = context._cacheMap;\n if (!cacheMap[propDims]) {\n cacheMap[propDims] = dm.getData({ withUid: true }).data.reduce((acc, row) => {\n const key = propDims.map(d => row[fieldsConfig[d].index]);\n acc[key] || (acc[key] = []);\n acc[key].push(row);\n return acc;\n }, {});\n }\n return cacheMap[propDims];\n };\n};\n","import { FieldType, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { payloadGenerator } from './payload-generator';\nimport {\n isSideEffectEnabled,\n dispatchSecondaryActions,\n createMapByDimensions\n} from './helper';\n\nconst sideEffectPolicy = (propPayload, firebolt, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fields = sourceIdentifiers.fields;\n const sourceIdentifierFields = Object.keys(fields).filter(field =>\n field.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData.getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === firebolt.sourceCanvas();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\n\n/**\n * This class manages the interactions of visual unit. It associates physical actions with\n * behavioural actions. It also propagates the behavioural actions to other datamodels.\n */\nexport default class UnitFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n const {\n TOOLTIP,\n HIGHLIGHTER,\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS\n } = SIDE_EFFECTS;\n this._handlers = {};\n this._propagationIdentifiers = {};\n this._connectedBehaviours = {};\n this.payloadGenerators(payloadGenerator);\n this.sideEffects().tooltip.disable();\n const disabledSideEffects = [TOOLTIP, HIGHLIGHTER, ANCHORS, BRUSH_ANCHORS, PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\n });\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n const context = this.context;\n const unitId = context.id();\n const aliasName = context.parentAlias();\n const propagationSourceCanvas = propagationInf.propPayload && propagationInf.propPayload.sourceCanvas;\n const sourceUnitId = propagationInf.propPayload && propagationInf.propPayload.sourceUnit;\n const sideEffectInstances = this.sideEffects();\n const actionOnSource = sourceUnitId ? sourceUnitId === unitId : true;\n\n const applicableSideEffects = payload.sideEffects ? [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }] : sideEffects;\n applicableSideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n const mutates = sideEffectInstances[se.name || se].constructor.mutates();\n if (mutates && propagationInf.isMutableAction === false) {\n return false;\n }\n if (!actionOnSource && payload.criteria !== null) {\n return isSideEffectEnabled(this, { se, propagationInf });\n }\n if (propagationSourceCanvas === aliasName || actionOnSource) {\n return se.applyOnSource !== false;\n }\n\n return true;\n });\n d.effects = mappedEffects;\n });\n return applicableSideEffects;\n }\n\n shouldApplySideEffects (propInf) {\n return propInf.propagate === false && propInf.applySideEffect !== false;\n }\n\n data (...params) {\n if (params.length) {\n const model = params[0];\n this.context.enableCaching().data(model);\n return this;\n }\n return this.context.data();\n }\n\n resetData () {\n this.context.clearCaching().resetData();\n return this;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n let isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const propagationData = data;\n\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = this.getPayloadGeneratorFor(action);\n const payload = payloadFn(this, propagationData, config, context.facetFieldsMap());\n const behaviourPolicies = this._behaviourPolicies;\n const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, this, {\n sourceIdentifiers,\n propagationData\n }));\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled !== false;\n }\n\n if (enabled) {\n const effects = this._behaviourEffectMap[action];\n const sideEffectInstances = this.sideEffects();\n isMutableAction = config.groupId ?\n effects.some(d => sideEffectInstances[d.name || d].constructor.mutates()) : config.isMutableAction;\n\n const propagationInf = {\n propagate: false,\n data: propagationData,\n propPayload,\n sourceIdentifiers,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction\n };\n\n this._actionHistory[action] = {\n payload,\n propagationInf,\n isMutableAction\n };\n\n this.dispatchBehaviour(action, payload, propagationInf);\n\n dispatchSecondaryActions(this, {\n action,\n propagationInf,\n propagationData,\n config\n });\n }\n };\n }\n\n target () {\n return 'visual-unit';\n }\n\n createSelectionSet (...params) {\n super.createSelectionSet(...params);\n\n this._dimsMapGetter = createMapByDimensions(this, this.data());\n\n return this;\n }\n\n remove () {\n this.context.cachedData()[0].unsubscribe('propagation');\n return this;\n }\n\n propagationIdentifiers (action, identifiers) {\n if (identifiers) {\n this._propagationIdentifiers = identifiers;\n }\n return this._propagationIdentifiers[action];\n }\n\n registerPhysicalActionHandlers () {\n return this;\n }\n\n id () {\n return this.context.id();\n }\n\n getPropagationSource () {\n return this.context.cachedData()[0];\n }\n\n sourceCanvas () {\n return this.context.parentAlias();\n }\n}\n\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: false\n },\n [ACTIONS.HOVER]: {\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.LONGTOUCH]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: true\n },\n [ACTIONS.TOUCHDRAG]: {\n behaviours: [BEHAVIOURS.BRUSH],\n touch: true\n },\n [ACTIONS.CLICK]: {\n behaviours: [BEHAVIOURS.SELECT],\n touch: false\n }\n};\n","import { VolatileBehaviour } from '@chartshq/muze-firebolt';\nimport { BRUSH } from '../../enums/behaviours';\n/**\n * This is the behaviour for brushing a region on the chart. It accepts a payload\n * which contains the x and y range of the data and other configuration. It will then\n * create a selection box from the range and select the points which fall within the range.\n */\nexport default class UnitBrushBehaviour extends VolatileBehaviour {\n static formalName () {\n return BRUSH;\n }\n\n dispatch (...params) {\n this.active = params[0].dragging;\n this.start = params[0].dragStart;\n return super.dispatch(...params);\n }\n}\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const PSEUDO_SELECT = 'pseudoSelect';\n\n","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\n\nconst LINEAR = ScaleType.LINEAR;\n\nconst getLayerDefinition = (context, axes, type, orientation) => {\n let encoding;\n const config = context.config();\n const { classPrefix, gridLines, gridBands } = config;\n const gridLineColor = gridLines.color;\n const zeroLineColor = gridLines.zeroLineColor;\n const defClassName = type === GRID_BAND ? gridBands.defClassName : gridLines.defClassName;\n const gridBandColor = gridBands[orientation].color;\n const axis = axes[orientation][0];\n const isLinearScale = axis.constructor.type() === LINEAR;\n\n if (type === GRID_BAND && isLinearScale) {\n encoding = {\n [orientation]: `${orientation}value`,\n [`${orientation}0`]: `${orientation}value0`\n };\n } else {\n encoding = {\n [orientation]: isLinearScale ? `${orientation}value` : `${orientation}dim`\n };\n }\n encoding.color = {\n value: (data, i) => {\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (type === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_BAND) {\n className = `${classPrefix}-axis-zero-line`;\n } else {\n className = `${classPrefix}-grid-${type}-${orientation}-${i % 2}`;\n }\n return className;\n },\n [`pad${orientation.toUpperCase()}`]: type === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\n },\n interactive: false\n };\n};\n\nconst getDefaultVisibilty = (show, axis) => {\n if (axis.constructor.type() === LINEAR) {\n return show;\n }\n return false;\n};\n\nexport const getGridLayerDefinitions = (context, config, type) => ['x', 'y'].map((axisType) => {\n const axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\n\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\n ['x', 'y'].forEach((type) => {\n let ticks = axes[type][0].getTickValues();\n const subtype = getObjProp(fieldsConfig, getObjProp(fields, type, 0).getMembers()[0], 'def', 'subtype');\n const jsonData = [];\n const schema = [\n {\n name: 'yvalue',\n type: 'measure'\n }, {\n name: 'xvalue',\n type: 'measure'\n },\n {\n name: 'yvalue0',\n type: 'measure'\n }, {\n name: 'xvalue0',\n type: 'measure'\n }, {\n name: 'xdim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(subtype)\n }\n ];\n const len = Math.max(ticks.length);\n ticks = subtype === DimensionSubtype.TEMPORAL ? ticks.map(d => d.getTime()) : ticks;\n for (let i = 0; i < len; i += 1) {\n jsonData.push({\n [`${type}value`]: ticks[i],\n [`${type}value0`]: ticks[i + 1],\n [`${type}dim`]: ticks[i],\n [`${type}dim`]: ticks[i]\n });\n }\n gridData[type] = new DataModel(jsonData, schema);\n });\n return gridData;\n};\n\nexport const createGridLineLayer = (context) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import {\n STATE_NAMESPACES,\n temporalFields,\n getObjProp,\n defaultValue,\n isSimpleObject\n} from 'muze-utils';\nimport { FRAGMENTED } from '@chartshq/muze-firebolt/src/enums/constants';\nimport { TOOLTIP, FRAGMENTED_TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\nimport { prepareSelectionSetData } from './firebolt/helper';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\n for (const key in layersMap) {\n if (!(key in markSet)) {\n layersMap[key].forEach(layer => layer.remove());\n delete layersMap[key];\n }\n }\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n const { keys, dimensionsMap, dimensions } = prepareSelectionSetData(context.data(), context);\n firebolt._metaData = {\n dimensionsMap,\n dimensions\n\n };\n firebolt.createSelectionSet({ keys, fields: dimensions.map(d => d.def.name) });\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n const firebolt = context.firebolt();\n const { interaction } = config;\n firebolt.config(interaction);\n const { mode } = interaction.tooltip;\n if (mode === FRAGMENTED) {\n const map = firebolt._behaviourEffectMap;\n for (const key in map) {\n const sideEffects = map[key];\n\n map[key] = sideEffects.map((val) => {\n let name = val;\n if (isSimpleObject(val)) {\n name = val.name;\n }\n if (name === TOOLTIP) {\n return FRAGMENTED_TOOLTIP;\n }\n return val;\n });\n }\n }\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\n }\n }\n];\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {\n onset: (context, facets) => {\n const facetKeys = facets[0].reduce((acc, v, i) => {\n acc[`${v}`] = facets[1][i];\n return acc;\n }, {});\n context.facetFieldsMap(facetKeys);\n }\n },\n facetFieldsMap: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\n};\n","import { CLASSPREFIX, CONSOLIDATED } from './enums/constants';\n\n/**\n * Returns the default configuration of the visual unit\n * @return {Object} Default configuration of visual unit\n */\nexport const defaultConfig = {\n classPrefix: CLASSPREFIX,\n defClassName: 'visual-unit',\n className: '',\n trackerClassName: 'visual-unit-tracker',\n minOuterRadius: 10,\n gridLines: {\n defClassName: 'axis-grid-lines',\n className: '',\n show: true,\n color: '#efefef',\n zeroLineColor: '#b6b6b6'\n },\n gridBands: {\n defClassName: 'axis-grid-bands',\n className: '',\n show: false,\n y: {\n color: ['#fff', '#fbfbfb']\n },\n x: {\n color: ['#fff', '#f9f9f9']\n }\n },\n arcLayerClassName: 'layer-arc',\n interaction: {\n tooltip: {\n mode: CONSOLIDATED\n }\n },\n sideEffectClassName: 'side-effect-container'\n};\n","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef } from './helper';\n\nexport default {\n [CONFIG]: {\n value: null,\n meta: {\n sanitization: (config, oldConfig) => (\n mergeRecursive(oldConfig || mergeRecursive({}, defaultConfig), config)\n )\n }\n },\n [LAYERDEFS]: {\n value: null,\n meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { VolatileBehaviour } from '@chartshq/muze-firebolt';\nimport { PSEUDO_SELECT } from '../../enums/behaviours';\n\nexport default class PseudoSelectBehaviour extends VolatileBehaviour {\n static formalName () {\n return PSEUDO_SELECT;\n }\n}\n\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { actionBehaviourMap } from './firebolt/action-behaviour-map';\nimport UnitBrushBehaviour from './firebolt/behaviours/brush';\nimport {\n renderLayers,\n getNearestDimensionalValue,\n removeLayersBy,\n getLayersBy,\n getLayerFromDef,\n getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange,\n unionDomainFromLayers,\n createRTree\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\nimport { REACTIVE_PROPS } from './enums';\nimport { PSEUDO_SELECT } from './enums/behaviours';\nimport PseudoSelectBehaviour from './firebolt/behaviours/pseudo-select';\n\nconst FORMAL_NAME = 'VisualUnit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, this.constructor.getterSetters());\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((this.localOptions())).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getterSetters () {\n return PROPS;\n }\n\n static localOptions () {\n return localOptions;\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: (context) => {\n const domain = context.calculateDomainFromData();\n context.dataDomain(domain);\n }\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n context._rtree = createRTree(context);\n\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, this.constructor.localOptions(), store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n this.createFireboltInstance();\n\n return this;\n }\n return this._store;\n }\n\n createFireboltInstance () {\n const { interactions } = this.registry();\n const { fireboltDeps } = this._dependencies;\n const Cls = this.getFireboltCls();\n\n this.firebolt(new Cls(this, {\n physical: Object.assign({}, interactions.physicalActions.get(), fireboltDeps.physicalActions),\n behavioural: Object.assign({}, interactions.behaviours.get(), {\n [UnitBrushBehaviour.formalName()]: UnitBrushBehaviour,\n [PSEUDO_SELECT]: PseudoSelectBehaviour\n }, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: this.getActionBehaviourMap()\n }, Object.assign({}, interactions.sideEffects.get(), fireboltDeps.sideEffects), this.getBehaviourEffectMap()));\n\n return this;\n }\n\n getFireboltCls () {\n return UnitFireBolt;\n }\n\n getBehaviourEffectMap () {\n return behaviourEffectMap;\n }\n\n getActionBehaviourMap () {\n return actionBehaviourMap;\n }\n\n /**\n * Static helper for creates a unit instance\n *\n * @param {Object} [id] optional unique identifier for a unit; , id is calculated internally\n * @param {DataModel} data instance of datamodel\n * @param {Array.} layers layer configuration\n * @param {Object} config configurtion for the visual unit\n * @return {VisualUnit} Instance of a unit\n */\n static create (...params) {\n return new this(...params);\n }\n\n /**\n * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\n return this;\n }\n\n timeDiffsByField (...params) {\n if (params.length) {\n return this;\n }\n return this._timeDiffsByField;\n }\n\n /**\n * Renders the visual unit. It creates the layout and renders the axes and layers.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n render (container) {\n this.createRootContainers(container);\n\n setAxisRange(this);\n this.renderLayers();\n const node = this._rootSvg.node();\n const { sideEffectClassName, classPrefix } = this.config();\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n createRootContainers (container) {\n const config = this.config();\n const { className, defClassName } = config;\n const qualifiedClassName = getQualifiedClassName(defClassName, this.id(), config.classPrefix);\n const width = this.width();\n const height = this.height();\n const containerSelection = selectElement(container).style('position', 'relative');\n this._rootSvg = makeElement(containerSelection, 'svg', [null], className)\n .style('width', `${width}px`).style('height', `${height}px`);\n\n const node = this._rootSvg.node();\n\n setAttrs(node, {\n width,\n height,\n class: qualifiedClassName.join(' ')\n });\n return this;\n }\n\n renderLayers () {\n const width = this.width();\n const height = this.height();\n const node = this._rootSvg.node();\n\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\n * @return {Object} serialized configuration\n */\n serialize () {\n return {\n layers: this.layers().map(layer => layer.serialize()),\n config: this.config(),\n axes: this.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\n store.layers = Object.assign(store.layers, instances);\n const instanceValues = Object.values(instances);\n layersArr = layersArr.concat(...instanceValues);\n layersMap[markId] = instanceValues;\n markSet[markId] = markId;\n return layersArr;\n }, []);\n\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: layers, action: 'removed', formalName: 'layer' });\n lifeCycleManager.notify({ client: this, action: 'removed', formalName: 'unit' });\n return this;\n }\n\n /**\n *\n *\n * @param {*} identifiers\n *\n * @memberof VisualUnit\n */\n getDataModelFromIdentifiers (identifiers, mode, parentModel, hasBarLayer) {\n if (!identifiers) return null;\n const dataModel = parentModel || this.data();\n return getDataModelFromIdentifiers(dataModel, identifiers, mode, hasBarLayer);\n }\n\n /**\n * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n getSourceInfo () {\n return {\n dimensionMeasureMap: this._dimensionMeasureMap,\n fields: this.fields(),\n data: this.data(),\n axes: this.axes(),\n retinalFields: this.retinalFields(),\n layers: this.layers(),\n timeDiffs: this.timeDiffsByField()\n };\n }\n\n dataDomain (...params) {\n const { namespace } = this.metaInf();\n const store = this.store();\n const prop = `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${REACTIVE_PROPS.DOMAIN}`;\n if (params.length) {\n const domain = params[0];\n store.commit(prop, domain, namespace);\n }\n return store.get(prop, namespace);\n }\n\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n dimValue[0].push(ReservedFields.MEASURE_NAMES);\n pointObj.id = dimValue;\n const layers = this.layers();\n const pointInf = this.getMarkInfFromLayers(x, y, { ...config, dimValue });\n layers.forEach((layer) => {\n const measures = layer.data().getSchema()\n .filter(d => d.type === FieldType.MEASURE).map(d => d.name);\n for (let i = 1, len = dimValue.length; i < len; i++) {\n dimValue[i].push(measures.join());\n }\n });\n pointObj.target = pointInf && pointInf.id ? pointInf.id : null;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, { ...config, dimValue }) || { id: null };\n pointObj = Object.assign({}, markInf);\n\n pointObj.target = markInf.id;\n return pointObj;\n }\n\n getMarkInfFromLayers (x, y, args) {\n const layers = this.layers();\n const len = layers.length;\n let point = null;\n // Iterate through the layers array and fetch the nearest point from each layer. If a valid\n // nearest point is found from any layer, then return that point.\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n const config = layer.config();\n if (config.interactive !== false) {\n point = layer.getNearestPoint(x, y, args);\n }\n if (point) {\n return point;\n }\n }\n return point;\n }\n\n /**\n * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\n */\n getPlotPointsFromIdentifiers (identifiers, config = {}) {\n let points = [];\n let parsedIdentifiers = identifiers;\n if (identifiers === null) {\n return [];\n }\n const layers = this.layers();\n const len = layers.length;\n if (isSimpleObject(identifiers)) {\n parsedIdentifiers = [Object.keys(identifiers)];\n parsedIdentifiers = [...parsedIdentifiers, ...transposeArray(Object.values(identifiers))];\n }\n for (let i = 0; i < len; i++) {\n const layer = layers[i];\n if (layer.config().interactive !== false) {\n points = [...points, ...layer.getPointsFromIdentifiers(parsedIdentifiers, config)];\n }\n }\n return points;\n }\n\n /**\n * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n\n calculateDomainFromData () {\n const domain = unionDomainFromLayers(this.layers(), this.fields(), this._layerAxisIndex,\n this.data().getFieldsConfig());\n return domain;\n }\n\n getRangeFromIdentifiers ({ criteria, fields }) {\n return fields.reduce((acc, v) => {\n acc[v] = criteria[v];\n return acc;\n }, {});\n }\n\n getRangeFromPositions ({ startPos, endPos }) {\n const { x, y } = this.fields();\n const axes = this.axes();\n const xField = x[0];\n const yField = y[0];\n const xFieldType = x[0].type();\n const yFieldType = y[0].type();\n const dimensions = Object.keys(this.data().getFieldspace().getDimension());\n\n if (xFieldType === FieldType.MEASURE && yFieldType === FieldType.MEASURE) {\n const dom = {\n x: axes.x[0].invertExtent(startPos.x, endPos.x).sort((a, b) => a - b),\n y: axes.y[0].invertExtent(startPos.y, endPos.y).sort((a, b) => a - b)\n };\n const range = {};\n if (`${xField}` === `${yField}`) {\n const xdom = dom.x;\n const ydom = dom.y;\n const min = xdom[0] > ydom[0] ? ydom : xdom;\n const max = min === ydom ? xdom : ydom;\n if (min[1] < max[0]) {\n range[xField] = [];\n } else {\n range[xField] = [max[0], min[1] < max[1] ? min[1] : max[1]];\n }\n } else {\n range[xField] = dom.x;\n range[yField] = dom.y;\n }\n return range;\n } else if (xFieldType === FieldType.DIMENSION || yFieldType === FieldType.DIMENSION) {\n const points = this._rtree.search({\n minX: startPos.x,\n minY: startPos.y,\n maxX: endPos.x,\n maxY: endPos.y\n });\n\n const criteria = [[]];\n dimensions.forEach((field) => {\n criteria[0].push(`${field}`);\n });\n\n points.forEach((point) => {\n const data = point.data;\n const vals = [];\n dimensions.forEach((field) => {\n vals.push(data[field]);\n });\n criteria.push(vals);\n });\n return criteria;\n }\n return null;\n }\n}\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n *\n *\n * @export\n * @class Variable\n */\nexport default class Variable {\n\n /**\n *\n *\n * @memberof Variable\n */\n type () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof Variable\n */\n toString () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n}\n","import Variable from './variable';\n\n/**\n * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\n }\n}\n","import { ComposedVars, SimpleVariable } from '../variable';\nimport { DIMENSION, COLUMNS, ROWS, TEMPORAL } from '../enums/constants';\n\n/**\n * Gets the list of fields in a sorted order by measurement and dimension\n *\n * @param {Array} fieldList List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields sorted by measurement and dimensions\n */\nconst orderFields = (fieldArray, type) => {\n const dimensionArr = [[], []];\n const measureArr = [[], []];\n const temporalArr = [[], []];\n const categoricalArr = [[], []];\n\n fieldArray.forEach((fieldList, index) => {\n fieldList.forEach((field) => {\n if (field.type() === DIMENSION) {\n dimensionArr[index].push(field);\n field.subtype() === TEMPORAL ? temporalArr[index].push(field) : categoricalArr[index].push(field);\n } else {\n measureArr[index].push(field);\n }\n });\n });\n\n const numOfMeasures = measureArr[0].length + (measureArr[1] ? measureArr[1].length : 0);\n\n // Single array of fields\n if (!fieldArray[1]) {\n // Push measures to bottom\n measureArr[1] = type === COLUMNS ? measureArr[0] : [];\n // Push measures to left\n measureArr[0] = type !== COLUMNS ? measureArr[0] : [];\n // Bottom and right dimensions empty\n dimensionArr[1] = [];\n // Left and top filled with dimensions\n dimensionArr[0] = dimensionArr[0];\n if (numOfMeasures === 0) {\n const allDimensions = [...dimensionArr[0], ...dimensionArr[1]];\n if (type === COLUMNS) {\n dimensionArr[1] = allDimensions[allDimensions.length - 1] ? [allDimensions[allDimensions.length - 1]]\n : [];\n allDimensions.splice(-1, 1);\n } else {\n dimensionArr[1] = [];\n }\n dimensionArr[0] = [...allDimensions];\n }\n }\n\n if (dimensionArr[0].length && dimensionArr[1].length && numOfMeasures > 0) {\n dimensionArr[0] = [...dimensionArr[0], ...dimensionArr[1]];\n dimensionArr[1] = [];\n }\n return {\n fields: dimensionArr.map((list, i) => (i === 1 ?\n measureArr[i].concat(dimensionArr[i]) : dimensionArr[i].concat(measureArr[i]))),\n dimensions: [...dimensionArr[0], ...dimensionArr[1]],\n measures: [...measureArr[0], ...measureArr[1]],\n temporal: [...temporalArr[0], ...temporalArr[1]],\n categorical: [...categoricalArr[0], ...categoricalArr[1]]\n };\n};\n\n/**\n * Gets the list of normalized fields\n *\n * @param {Array} fields List of fields in the view\n * @param {Object} fieldMap Mapping of fields in the datamodel\n * @return {Array} fields normalized by measurement and dimensions\n */\nconst normalizeFields = (config, type) => {\n const fieldsArr = [];\n const fields = config[type];\n\n if (!(fields[0] instanceof Array)) {\n fieldsArr[0] = fields;\n } else {\n fieldsArr[0] = fields[0] || [];\n fieldsArr[1] = fields[1] || [];\n }\n return fieldsArr;\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} datamodel\n *\n */\nconst convertToVar = (datamodel, fields) => {\n const vars = [];\n\n fields && fields.forEach((field) => {\n if (field instanceof ComposedVars) {\n vars.push(field);\n field.data(datamodel);\n } else {\n vars.push(new SimpleVariable(field).data(datamodel));\n }\n });\n return vars;\n};\n\n/**\n *\n *\n * @param {*} rows\n * @param {*} columns\n * @param {*} datamodel\n *\n */\nexport const transformFields = (datamodel, config) => {\n const [rowsInfo, columnsInfo] = [ROWS, COLUMNS].map((fields) => {\n const normalizedFields = normalizeFields(config, fields);\n const norFields = [convertToVar(datamodel, normalizedFields[0])];\n\n if (normalizedFields[1]) {\n norFields[1] = convertToVar(datamodel, normalizedFields[1]);\n }\n return orderFields(norFields, fields);\n });\n const {\n fields: rows,\n dimensions: rowDimensions,\n measures: rowMeasures,\n temporal: rowTemporalFields,\n categorical: rowCategoricalFields\n } = rowsInfo;\n const {\n fields: columns,\n dimensions: columnDimensions,\n measures: columnMeasures,\n temporal: columnTemporalFields,\n categorical: columnCategoricalFields\n } = columnsInfo;\n return {\n rows,\n rowDimensions,\n rowMeasures,\n rowTemporalFields,\n rowCategoricalFields,\n columns,\n columnTemporalFields,\n columnCategoricalFields,\n columnDimensions,\n columnMeasures\n };\n};\n","/**\n * This file exports variables that are used as defaults for the crosstab group.\n */\nexport const DATA_UPDATE_COUNTER = 0;\n\nexport const DEFAULT_LAYER_TYPE = 'cartesian';\n\nexport const BORDER_WIDTH = {\n default: 2,\n facet: 1\n};\n","import {\n DARK,\n NONE,\n LEFT,\n RIGHT,\n NORMAL,\n TOP,\n DARKER,\n BOTTOM\n} from '../enums/constants';\n\nconst handleBlankCell = (data) => {\n data.config().externalClassname.push(`${NONE}-${LEFT}`);\n data.config().externalClassname.push(`${NONE}-${RIGHT}`);\n};\n\nexport const sanitiseHeaderMatrix = (matrices, header) => {\n if (header) {\n for (let i = 0; i < matrices.length; i++) {\n if (i !== 0) {\n matrices[i].config({\n externalClassname: [`${DARK}`]\n });\n } else {\n matrices[i].config({\n externalClassname: [`${NONE}-${LEFT}`, `${DARK}`]\n });\n }\n }\n } else {\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [`${DARK}`]\n });\n }\n }\n }\n};\n\nexport const sanitiseGeomMatrix = (matrices, arr = {}) => {\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [`${NORMAL}`]\n });\n\n if (i === 0) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${TOP}`);\n } else if (i === matrices.length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n }\n\n if (j === matrices[i].length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARK}-${RIGHT}`);\n }\n\n if (arr[i]) {\n matrices[i - 1][j].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n }\n }\n};\n\nexport const sanitiseFacetValues = (matrices, type, blankCell) => {\n const normal = type === `${RIGHT}` ? `${DARK}` : `${NORMAL}`;\n const length = matrices.length;\n let latestSource = matrices[0][0].source();\n const lastSource = matrices[matrices.length - 1][0].source();\n const arr = {};\n\n // initialise the classname\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n matrices[i][j].config({\n externalClassname: [normal]\n });\n }\n\n // seperate wrt the corner most facet\n if (matrices[i][0].source() !== latestSource) {\n arr[i] = i;\n latestSource = matrices[i][0].source();\n }\n }\n\n // add custom classname\n for (let i = 0; i < matrices.length; i++) {\n for (let j = 0; j < matrices[0].length; j++) {\n if (j === 0) {\n matrices[i][0].config().externalClassname.push(`${NONE}-${type}`);\n if (matrices[i][j].source() === lastSource) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n } else {\n matrices[i][0].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n if (matrices[i][j] instanceof blankCell) {\n matrices[i][j].config().externalClassname.push(`${NONE}-${TOP}`);\n matrices[i][j].config().externalClassname.push(`${NONE}-${BOTTOM}`);\n }\n } else if (j !== matrices[i].length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARK}-${type}`);\n }\n\n if (i === 0) {\n matrices[0][j].config().externalClassname.push(`${DARKER}-${TOP}`);\n } else if (i === length - 1) {\n matrices[i][j].config().externalClassname.push(`${DARKER}-${BOTTOM}`);\n }\n\n if (arr[i]) {\n matrices[i - 1][j].config().externalClassname.push(`${DARK}-${BOTTOM}`);\n }\n\n if (matrices[i][j] instanceof blankCell) {\n handleBlankCell(matrices[i][j], blankCell);\n }\n }\n }\n return arr;\n};\n\nexport const sanitiseBorderMatrix = (matrices, blankCell) => {\n const { leftMatrix, rightMatrix, topMatrix, bottomMatrix } = matrices;\n let bottomBorderObj = {};\n if (rightMatrix.length) {\n bottomBorderObj = sanitiseFacetValues(rightMatrix, `${RIGHT}`, blankCell);\n }\n if (leftMatrix.length) {\n bottomBorderObj = sanitiseFacetValues(leftMatrix, `${LEFT}`, blankCell);\n }\n topMatrix.length && sanitiseHeaderMatrix(topMatrix);\n bottomMatrix.length && sanitiseHeaderMatrix(bottomMatrix);\n return bottomBorderObj;\n};\n","import { Store, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { DATA_UPDATE_COUNTER } from '../enums/defaults';\nimport { Variable } from '../variable';\nimport { PolarEncoder, CartesianEncoder } from '../encoder';\nimport { sanitiseHeaderMatrix } from './cell-border-applier';\nimport {\n DIMENSION,\n MEASURE,\n ORDINAL,\n LINEAR,\n ROW,\n COLUMN,\n COL,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n COLOR,\n SIZE,\n TEMPORAL,\n SHAPE,\n INTERACTION,\n GRID_LINES,\n GRID_BANDS,\n HEADER,\n FACET,\n X,\n Y,\n ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\n\n/**\n * Creates an instance of a store which contains the arguments to make the class reactive\n *\n * @return {Object} instance of store\n * @memberof VisualGroup\n */\nexport const initStore = () => new Store({\n [DATA_UPDATE_COUNTER]: DATA_UPDATE_COUNTER\n});\n\n/**\n *\n *\n * @param {*} arr\n */\nexport const isDistributionEqual = arr => [...arr[0], ...arr[1]].reduce((isEqual, row) => {\n const rowType = row.type();\n\n if (rowType === MEASURE || rowType === TEMPORAL) {\n isEqual = true;\n }\n return isEqual;\n}, false);\n\n/**\n *\n *\n */\nexport const initializeCacheMaps = () => ({\n cellMap: new Map(),\n xAxesMap: new Map(),\n yAxesMap: new Map(),\n entryCellMap: new Map(),\n exitCellMap: new Map()\n});\n\n/**\n *\n *\n * @param {*} axisName\n * @param {*} id\n */\nexport const getAxisKey = (axisName, ...params) => `${axisName}-axis-${params.join('-')}`;\n\n/**\n *\n *\n * @param {*} rowId\n * @param {*} columnId\n */\nexport const getCellKey = (rowId, columnId) => `cell-${rowId}-${columnId}`;\n\n/**\n *\n *\n * @param {*} config\n *\n */\nexport const extractUnitConfig = (config) => {\n const unitConfig = {};\n const attrNames = [INTERACTION, GRID_LINES, GRID_BANDS];\n\n attrNames.forEach((attr) => {\n if (config[attr] !== undefined) {\n unitConfig[attr] = config[attr];\n }\n });\n return unitConfig;\n};\n\nexport const hasOneField = (fields) => {\n let hasField = false;\n const keys = Object.keys(fields);\n hasField = keys.some(d => fields[d].length > 0);\n return hasField;\n};\n\n/**\n *\n *\n * @param {*} headers\n * @param {*} index\n * @param {*} rowLength\n *\n * @memberof MatrixResolver\n */\nexport const getHeaderText = (headers, index, rowLength) => {\n let header = '';\n\n if (index === rowLength - 1 && headers.length > rowLength) {\n for (let i = index; i < headers.length - 1; i++) {\n header += `${headers[i].toString()} / `;\n }\n header += headers[headers.length - 1].toString();\n return header;\n } else if (headers[index]) {\n return headers[index].toString();\n }\n return '';\n};\n\n/**\n *\n *\n * @param {*} fields\n * @param {*} fieldHeaders\n * @param {*} TextCell\n * @param {*} labelManager\n *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager, sanitizeCheck }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n labelManager\n }).source(getHeaderText(fieldHeaders, i, fields[0].length))\n .config({ show: cell.config().show })) : [];\n sanitizeCheck && sanitiseHeaderMatrix(headers, true);\n return headers;\n};\n\n/**\n * @param {*} facetConfig\n *\n */\nexport const sanitizeCheck = (facetConfig = {}) => {\n const { isBorderPresent } = facetConfig;\n const updateBorderMap = ['color', 'showRowBorders', 'showColBorders', 'showValueBorders'];\n return (!isBorderPresent || updateBorderMap.every(d => !isBorderPresent[d]));\n};\n\n/**\n *\n *\n * @param {*} variable\n * @param {*} allFields\n *\n */\nexport const findInGroup = (variable, allFields) => {\n let channel = null;\n\n [COLOR, SIZE, SHAPE].forEach((e) => {\n if (this.store.get(e) && variable === this.store.get(e)[0]) {\n channel = e;\n }\n });\n\n if (channel) {\n return { channel };\n }\n [ROW, COL].forEach((facetType) => {\n allFields[`${facetType}Facets`].forEach((e) => {\n if (e.toString() === variable) {\n channel = { channel: FACET, type: facetType === COL ? COLUMN : ROW };\n }\n });\n });\n\n if (channel) {\n return channel;\n }\n\n [ROW, COL].forEach((projType) => {\n allFields[`${projType}Projections`].forEach((e) => {\n e.forEach((m) => {\n if (m.toString() === variable) {\n channel = projType === COL ? X : Y;\n }\n });\n });\n });\n\n if (channel) {\n return { channel };\n }\n return null;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} field\n */\nexport const getAxisType = (fieldsConfig, field) => {\n let fieldType = ORDINAL;\n\n if (field && fieldsConfig[field].def.type !== DIMENSION) {\n fieldType = LINEAR;\n }\n return fieldType;\n};\n\n/**\n *\n *\n * @param {*} datamodel\n * @param {*} fieldName\n *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.name() === fieldName.toString());\n return field.domain();\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n let xAxes = null;\n let yAxes = null;\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n\n xAxisSet && xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes = xAxes || [];\n xAxes.push(xAxis);\n });\n\n yAxisSet && yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes = yAxes || [];\n yAxes.push(yAxis);\n });\n\n return {\n xAxes, yAxes\n };\n};\n\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\n */\nexport const getHeaderAxisFrom = (type, fields, userAxisFromConfig) => {\n let axisFrom = userAxisFromConfig[type];\n let headerFrom = '';\n const options = type === ROW ? [LEFT, RIGHT] : [BOTTOM, TOP];\n const [firstField, secondField] = fields;\n const firstFieldType = i => (firstField.length ? firstField[i].type() : null);\n const secondFieldType = i => (secondField.length ? secondField[i].type() : null);\n\n if (firstFieldType(firstField.length - 1) === DIMENSION && secondFieldType(0) === DIMENSION) {\n headerFrom = axisFrom ? options[1 - options.indexOf(axisFrom)] : options[1];\n\n if (type === COLUMN && (firstField[firstField.length - 1].toString() === secondField[0].toString())) {\n axisFrom = TOP;\n } else {\n axisFrom = axisFrom || options[0];\n }\n } else if (secondFieldType(secondField.length - 1) === DIMENSION) {\n headerFrom = type === ROW ? RIGHT : BOTTOM;\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else {\n headerFrom = type === ROW ? LEFT : TOP;\n axisFrom = type === ROW ? LEFT : TOP;\n }\n if (firstFieldType(firstField.length - 1) === MEASURE && secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n } else if (secondFieldType(0) === MEASURE) {\n axisFrom = type === ROW ? RIGHT : BOTTOM;\n } else if (firstFieldType(firstField.length - 1) === MEASURE) {\n axisFrom = type === ROW ? LEFT : TOP;\n }\n return [headerFrom, axisFrom];\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} layers\n *\n * @memberof MatrixResolver\n */\nexport const setFacetsAndProjections = (context, fieldInfo, encoder) => {\n const {\n fields,\n type\n } = fieldInfo;\n const { facets, projections } = encoder.simpleEncoder.getFacetsAndProjections(fields, type);\n\n context.facets({ [`${type}Facets`]: facets });\n context.projections({ [`${type}Projections`]: projections });\n\n return { facets, projections, fields };\n};\n\nconst getRowBorders = (left, right) => {\n const borders = {\n top: false,\n bottom: false,\n left: false,\n right: false\n };\n if (left.length > 1 || right.length > 1) {\n borders.top = true;\n borders.bottom = true;\n borders.left = true;\n borders.right = true;\n }\n return borders;\n};\n\nconst getColumnsBorders = (top, bottom) => {\n const borders = {\n top: false,\n bottom: false,\n left: false,\n right: false\n };\n if (top.length || bottom.length) {\n if ((top[0] && top[0].length > 1) || (bottom[0] && bottom[0].length > 1)) {\n borders.top = true;\n borders.bottom = true;\n borders.left = true;\n borders.right = true;\n }\n }\n return borders;\n};\n\nconst getValueBorders = (rows, columns) => {\n const borders = { top: true, left: true, bottom: true, right: true };\n const borderTypeRow = [LEFT, RIGHT];\n const borderTypeCol = [TOP, BOTTOM];\n rows.forEach((e, i) => {\n if (e[0] && e[0].length) {\n borders[borderTypeRow[i]] = true;\n } else {\n borders[borderTypeRow[i]] = false;\n }\n });\n columns.forEach((e, i) => {\n if (e.length) {\n borders[borderTypeCol[i]] = true;\n } else {\n borders[borderTypeCol[i]] = false;\n }\n });\n\n return borders;\n};\n\nexport const getBorders = (matrices, encoder) => {\n let showRowBorders = { top: false, bottom: false, left: false, right: false };\n let showColBorders = { top: false, bottom: false, left: false, right: false };\n let showValueBorders = { top: false, bottom: false, left: false, right: false };\n const {\n rows,\n columns,\n values: valueMatrix\n } = matrices;\n const [leftRows, rightRows] = rows;\n const [topColumns, bottomColumns] = columns;\n const {\n rowDimensions,\n columnDimensions,\n rowTemporalFields,\n columnTemporalFields,\n columnMeasures,\n rowMeasures\n } = encoder.fieldInfo();\n const allDimensionLength = rowDimensions.length + columnDimensions.length;\n const allMeasuresLength = rowMeasures.length + columnMeasures.length;\n const allTemporalFieldsLength = rowTemporalFields.length + columnTemporalFields.length;\n\n if (encoder.constructor.type() === POLAR) {\n if (!allDimensionLength) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n } else if (!allMeasuresLength && !allTemporalFieldsLength && allDimensionLength <= 2) {\n return { showRowBorders, showColBorders, showValueBorders };\n }\n\n showRowBorders = getRowBorders(leftRows, rightRows);\n showColBorders = getColumnsBorders(topColumns, bottomColumns);\n showValueBorders = getValueBorders([leftRows, rightRows], [topColumns, bottomColumns]);\n\n if (valueMatrix.length > 1) {\n showValueBorders.top = true;\n showValueBorders.bottom = true;\n }\n if (valueMatrix.length && valueMatrix[0].length > 1) {\n showValueBorders.left = true;\n showValueBorders.right = true;\n }\n return { showRowBorders, showColBorders, showValueBorders };\n};\n\nexport const getFieldsFromSuppliedLayers = (suppliedLayerConfig) => {\n const encodingArr = suppliedLayerConfig.map(conf => (conf.encoding || {}));\n const fields = [].concat(...encodingArr.map(enc => Object.values(enc).map(d => (typeof d === 'object' ?\n d.field : d))));\n return [...new Set(fields.filter(d => d))];\n};\n\nexport const extractFields = (facetsAndProjections, layerFields) => {\n const fields = Object.values(facetsAndProjections).map((arr) => {\n const flattenArray = [].concat(...arr);\n return [].concat(...flattenArray.map((field) => {\n if (field instanceof Variable) {\n return field.getMembers();\n }\n return field;\n }));\n });\n return [].concat(...fields, ...layerFields);\n};\n\n/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n facetNames.push(name);\n\n const facetSortConfig = sortConfig[name];\n\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n } else {\n sortInfo.push([name, null]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).getData({ sort: sortInfo }).data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","export const PROPS = {\n layers: {},\n data: {},\n globalConfig: {}\n};\n","import { ERROR_MSG, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { transformFields } from './field-sanitizer';\nimport { getHeaderAxisFrom, getFieldsFromSuppliedLayers, hasOneField } from '../group-helper/group-utils';\nimport { ROW, COLUMN } from '../enums/constants';\nimport { PROPS } from './props';\n\n/**\n *\n *\n * @export\n * @class VisualEncoder\n */\nexport default class VisualEncoder {\n\n constructor () {\n generateGetterSetters(this, PROPS);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n createAxis () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n setCommonDomain () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @memberof VisualEncoder\n */\n getLayerConfig () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n fieldInfo (...info) {\n if (info.length) {\n this._fieldInfo = mergeRecursive(this._fieldInfo || {}, info[0]);\n return this;\n }\n return this._fieldInfo;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof VisualEncoder\n */\n fieldSanitizer (datamodel, config) {\n this.fieldInfo(transformFields(datamodel, config));\n return this.fieldInfo();\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n axisFrom (...params) {\n if (params.length) {\n this._axisFrom = params[0];\n return this;\n }\n return this._axisFrom;\n }\n\n /**\n *\n *\n * @param {*} params\n *\n * @memberof VisualEncoder\n */\n headerFrom (...params) {\n if (params.length) {\n this._headerFrom = params[0];\n return this;\n }\n return this.__headerFrom;\n }\n\n /**\n *\n *\n * @param {*} axisFrom\n *\n * @memberof CartesianEncoder\n */\n setAxisAndHeaders (axisFrom = {}, fields) {\n const [rowHeader, rowAxis] = getHeaderAxisFrom(ROW, fields.rows, axisFrom);\n const [colHeader, colAxis] = getHeaderAxisFrom(COLUMN, fields.columns, axisFrom);\n\n this.axisFrom({\n row: rowAxis,\n column: colAxis\n });\n this.headerFrom({\n row: rowHeader,\n column: colHeader\n });\n return this;\n }\n\n getProjectionFields (layers) {\n return getFieldsFromSuppliedLayers(layers);\n }\n\n hasMandatoryFields (fields) {\n return hasOneField(fields);\n }\n}\n","import { ContinousAxis, BandAxis, TimeAxis, ColorAxis, SizeAxis, ShapeAxis } from '@chartshq/muze-axis';\n\nexport const scaleMaps = {\n linear: ContinousAxis,\n band: BandAxis,\n temporal: TimeAxis,\n size: SizeAxis,\n color: ColorAxis,\n shape: ShapeAxis\n};\n","import { DataModel, mergeRecursive } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\nimport { BORDER_WIDTH } from '../enums/defaults';\nimport { FACET } from '../enums/constants';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\nconst setDefaultConfigForFacet = (facetInfo, projectionInfo, config) => {\n let conf = {};\n\n if (config && (facetInfo.allFacets.length || projectionInfo.indices.length > 1)) {\n const { facetsUserConfig = {}, border } = config;\n const { isBorderPresent = {}, isGridLinePresent = {} } = facetsUserConfig;\n const gridLinesShowLength = Object.keys(isGridLinePresent).length;\n const {\n width: borderWidth,\n color: borderColor,\n style: borderStyle,\n showValueBorders,\n showRowBorders,\n showColBorders\n } = border;\n let gridLines = {};\n let borderConf = {};\n\n if (Object.keys(isBorderPresent).length === 0 || !(isBorderPresent.width)) {\n borderConf = {\n width: BORDER_WIDTH[FACET]\n };\n } else {\n Object.assign(borderConf,\n borderWidth ? { width: borderWidth } : null,\n borderColor ? { color: borderColor } : null,\n showValueBorders ? { showValueBorders } : null,\n showRowBorders ? { showRowBorders } : null,\n showColBorders ? { showColBorders } : null,\n borderStyle ? { style: borderStyle } : null);\n }\n if (gridLinesShowLength <= 0) {\n gridLines = {\n x: {\n show: false\n }\n };\n }\n conf = {\n border: borderConf,\n gridLines\n };\n }\n return conf;\n};\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator Callback executed after datamodels are prepared after sel/proj\n* @return {Object} set of matrices with the corresponding row and column keys\n*/\nexport const getMatrixModel = (dataModel, fieldInfo, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const defaultConfig = setDefaultConfigForFacet(facetInfo, projectionInfo, globalConfig);\n globalConfig = mergeRecursive(globalConfig, defaultConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells,\n sanitizeCheck\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\nimport { sanitiseBorderMatrix, sanitiseGeomMatrix } from './cell-border-applier';\n\n/**\n * Updates row and column cells with the geom cell corresponding to the facet keys\n *\n * @param {*} resolver\n * @param {*} facets\n */\nconst updateCells = (resolver, facets, geomCell) => {\n [ROW, COL].forEach((field) => {\n const cells = resolver[`${field}Cells`]();\n const facetKey = facets[`${field}Facets`][1].join();\n\n !cells[facetKey] && (cells[facetKey] = []);\n cells[facetKey].push(geomCell);\n resolver[`${field}Cells`](cells);\n });\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} datamodel\n * @param {*} fieldInfo\n * @param {*} facets\n *\n */\nexport const createValueCells = (context, datamodel, fieldInfo, facets) => {\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const {\n suppliedLayers,\n cell: GeomCell,\n resolver,\n config,\n encoder,\n detailFields\n } = context;\n const axes = resolver.axes();\n const cacheMaps = resolver.cacheMaps();\n const matrixLayers = resolver.matrixLayers();\n const labelManager = resolver.dependencies().smartlabel;\n const horizontalAxis = resolver.horizontalAxis();\n const verticalAxis = resolver.verticalAxis();\n const datamodelTransform = resolver.datamodelTransform();\n const sortedFields = config.sort;\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\n\n matrixLayers[rowIndex] = matrixLayers[rowIndex] ? matrixLayers[rowIndex] : [];\n matrixLayers[rowIndex][columnIndex] = layerConfigArr;\n\n // return from map if already there otherwise create and put in map\n const geomCellKey = getCellKey(rowIndex, columnIndex);\n const fields = {\n y: rowFields,\n x: columnFields\n };\n\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n // Sort datamodel if user has sorted a field\n const sortConfig = Object.keys(sortedFields).map(field => [field, sortedFields[field]]);\n if (sortConfig.length) {\n datamodel = datamodel.sort(sortConfig, { saveChild: true });\n }\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\n\n/**\n * Creates axis cells based on the set of axes\n *\n * @param {Selection} selection Contains a selection of the axis units\n * @param {Array} axes Actual axis units\n * @param {number} axisIndex 0-> primary axis, 1-> secondary axis(when dual axis is made)\n * @param {Object} cells Contains a collection of the cells\n * @return {Object} return either set of axis/blank cells depending on the config\n */\nconst createAxisCells = (selection, axes, axisIndex, cells) =>\n createSelection(selection, axis => axis, axes, (item, i) => i + item.reduce((e, n) => {\n const id = n.id + axisIndex;\n return `${e}-${id}`;\n }, '')).map((currObj, axis) => {\n if (axis && axis[axisIndex]) {\n const axisInst = axis[axisIndex];\n const { orientation, show } = axisInst.config();\n\n return new cells.AxisCell().source(axisInst).config({\n isOffset: orientation === AxisOrientation.LEFT || orientation === AxisOrientation.TOP,\n show\n });\n }\n return new cells.BlankCell().config({ show: false });\n }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @retur\n */\nconst axisPlaceholderGn = (context, selObj, cells) => {\n const {\n matrices\n } = context;\n const {\n axesMatrix\n } = matrices;\n\n return (type, axisFrom) => {\n const axes = axesMatrix[`${type}`];\n\n if (axes && axes.length) {\n if (type === X || type === Y) {\n const fieldNames = type === Y ? ROWS : COLUMNS;\n\n [PRIMARY, SECONDARY].forEach((fieldType, index) => {\n const selObjProp = `${fieldNames}${fieldType}`;\n let axisIndex = index;\n let axesForDraw = axes;\n if (axisFrom === RIGHT || axisFrom === BOTTOM) {\n axisIndex = 1 - axisIndex;\n }\n if (!getObjProp(axes, 0, axisIndex)) {\n axesForDraw = [];\n }\n selObj[selObjProp] = createAxisCells(selObj[selObjProp], axesForDraw, axisIndex, cells);\n });\n } else {\n selObj.rowsPrimary = createAxisCells(selObj.rowPrime, axes.map(() => []), 0, cells);\n selObj.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, axes[0], 0, cells);\n }\n }\n return selObj;\n };\n};\n\n/**\n * Creates header cells based on the set of headers\n *\n * @param {Object} selection Contains a selection of the header units\n * @param {string} headers Contains a list of the headers\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} return either set of header cells depending on the config\n */\nconst createTextCells = (selection, headers, cells, labelManager) => createSelection(selection,\n (label) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\n};\n\n/**\n * Creates a set of placeholders as a part of selection object\n *\n * @param {Array} normalizedOptions contains normalized rows and columns\n * @param {Array} matrices contains axis and value matrices\n * @param {aArrayny} projections contains set of row and column projections\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} Creates a set of placeholders as a part of selections\n */\nconst generatePlaceholders = (context, cells, labelManager) => {\n let selectionObj;\n const {\n matrices,\n fields,\n facetsAndProjections,\n selection,\n facet,\n encoders,\n resolver\n } = context;\n const {\n rows,\n columns\n } = fields;\n const {\n valuesMatrix\n } = matrices;\n const {\n rowProjections,\n colProjections\n } = facetsAndProjections;\n const {\n rowKeys,\n columnKeys\n } = valuesMatrix;\n const takeAxisFrom = encoders.simpleEncoder._axisFrom;\n const takeHeaderFrom = encoders.simpleEncoder._headerFrom;\n\n selectionObj = selection || {};\n\n ['pie', X, Y].forEach((axis) => {\n const axisFrom = axis === X ? takeAxisFrom.column : takeAxisFrom.row;\n selectionObj = axisPlaceholderGn(context, selectionObj, cells)(axis, axisFrom);\n });\n\n const {\n rowsPrimary,\n rowsSecondary,\n columnsPrimary,\n columnsSecondary\n } = selectionObj;\n\n const rowAxis = rowsPrimary && rowsPrimary.getObjects().length ? rowsPrimary.getObjects() :\n (rowsSecondary && rowsSecondary.getObjects().length ? rowsSecondary.getObjects() : []);\n const colAxis = columnsPrimary && columnsPrimary.getObjects().length ? columnsPrimary.getObjects() :\n (columnsSecondary && columnsSecondary.getObjects().length ? columnsSecondary.getObjects() : []);\n\n const headerConfig = [\n { type: LEFT, section: rows[0], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: RIGHT, section: rows[1], axis: rowAxis, headerFrom: takeHeaderFrom.row },\n { type: TOP, section: columns[0], axis: colAxis, headerFrom: takeHeaderFrom.column },\n { type: BOTTOM, section: columns[1], axis: colAxis, headerFrom: takeHeaderFrom.column }\n ];\n\n headerConfig.forEach((config, index) => {\n let keys;\n let length;\n const {\n type,\n section,\n axis,\n headerFrom\n } = config;\n\n if (index < 2) {\n keys = rowKeys;\n length = rowProjections.length > 0 ? rowProjections.length : 1;\n } else {\n keys = columnKeys;\n length = colProjections.length > 0 ? colProjections.length : 1;\n }\n keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\n if (section.length && headerFrom === type && axis && keys.length) {\n const hContext = { axis, length, type };\n let headers = [];\n if (index < 2) {\n hContext.keys = keys;\n hContext.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n }\n selectionObj[`${type}Headers`] = headers;\n } else {\n selectionObj[`${type}Headers`] = null;\n }\n });\n return selectionObj;\n};\n\n/**\n * Generates matrices\n *\n * @param {Object} config Configuration to generate matrices\n * @param {Array} matrices Matrices containing the set of visual units and axes units\n * @param {Object} cells Contains a collection of the cells\n * @param {Object} labelManager smart label instance\n * @return {Object} contains a collection of matrices\n */\nexport const generateMatrices = (context, matrices, cells, labelManager) => {\n const {\n unitHeight,\n unitWidth,\n facetsAndProjections,\n normalizedRows,\n normalizedColumns,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\n };\n // Generate placeholders for all matrices\n const selectionObj = generatePlaceholders(placeholderContext, cells, labelManager);\n const {\n columnsPrimary,\n columnsSecondary,\n rowsPrimary,\n rowsSecondary,\n leftHeaders,\n topHeaders,\n bottomHeaders,\n rightHeaders\n } = selectionObj;\n const [rowPrime, rowSec, colPrime, colSec] = [rowsPrimary, rowsSecondary, columnsPrimary, columnsSecondary]\n .map(d => (d ? d.getObjects() : []));\n const [leftFacets, rightFacets] = [leftHeaders, rightHeaders]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\n\n // Compute left matrix using left headers and the axes on the rows\n let leftMatrix = leftFacets.length ? leftFacets.map((d, i) => {\n rowPrime[i] = rowPrime[i] ? [rowPrime[i]] : [];\n return [...d, ...rowPrime[i]];\n }) : (rowPrime ? rowPrime.map(d => [d]) : []);\n\n // Compute right matrix using right headers and the axes on the rows\n const rightMatrix = rowSec.length ? rowSec.map((d, i) => [d, ...(rightFacets[i] || [])]) : (rightFacets.length ?\n rightFacets.map(d => [...d]) : []);\n\n const topMatrix = [];\n if (topHeaders) {\n const headers = topHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n topMatrix[i] = topMatrix[i] || [];\n topMatrix[i].push(x);\n });\n });\n }\n // Compute top matrix using the top headers and axes on the columns\n if (colPrime.length) {\n topMatrix.push(colPrime);\n }\n\n // Bottom and right matrices are prepared using the user config.\n let bottomMatrix = [];\n if (colSec.length) {\n bottomMatrix.push(colSec);\n }\n const currentBottomLength = bottomMatrix.length;\n if (bottomHeaders) {\n const headers = bottomHeaders.getObjects();\n headers.forEach((e) => {\n const innerHeaders = e.getObjects();\n innerHeaders.forEach((x, i) => {\n bottomMatrix[i + currentBottomLength] = bottomMatrix[i + currentBottomLength] || [];\n bottomMatrix[i + currentBottomLength].push(x);\n });\n });\n }\n\n if (!leftMatrix.length && !rightMatrix.length) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n leftMatrix = [[cell]];\n }\n\n if (!topMatrix.length && (!bottomMatrix.length || !bottomMatrix[0].length)) {\n const cell = new cells.BlankCell();\n cell.setAvailableSpace(unitWidth, unitHeight);\n bottomMatrix = [[cell]];\n }\n\n return {\n rows: [leftMatrix, rightMatrix],\n columns: [topMatrix, bottomMatrix],\n selectionObj,\n colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n\n const fields = getFieldsFromSuppliedLayers(suppliedLayers).filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const allFields = extractFields(facetsAndProjections, fields);\n\n groupedModel = dataModel.project(allFields);\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const newFieldsConfig = groupedModel.getFieldsConfig();\n const dimensions = allFields.filter(field =>\n getObjProp(newFieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n resolver.transformedData(groupedModel);\n return groupedModel;\n};\n\n/**\n * Computes matrices for a group\n *\n * @param {Object} datamodel on which the matrices are to be computed\n * @param {Object} config configuration of the matrices\n * @param {Object} layerRegistry contains the registered layers\n * @return {Object} conputed matrices\n * @memberof MatrixResolver\n */\nexport const computeMatrices = (resolverConfig) => {\n let placeholderInfo = {};\n const {\n datamodel,\n encoders,\n resolver,\n globalConfig,\n selection,\n transform,\n componentRegistry,\n groupBy,\n labelManager,\n fieldMap,\n layerConfig,\n registry,\n normalizedRows,\n normalizedColumns,\n otherEncodings,\n facetsAndProjections,\n simpleEncoder,\n config\n } = resolverConfig;\n\n const { rowFacets, colFacets } = facetsAndProjections;\n const isFacet = rowFacets.length > 0 || colFacets.length > 0;\n\n if (isFacet) {\n globalConfig.isFacet = true;\n }\n const matrixGnContext = {\n // Configuration to be passed to generate the different matrices.\n // A common config is used for both value matrices and other matrices\n normalizedColumns,\n normalizedRows,\n facetsAndProjections,\n layers: layerConfig,\n fieldMap,\n otherEncodings,\n encoders,\n facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\n };\n const cells = {\n GeomCell: resolver.getCellDef(registry.cells.GeomCell),\n AxisCell: resolver.getCellDef(registry.cells.AxisCell),\n BlankCell: resolver.getCellDef(registry.cells.BlankCell),\n TextCell: resolver.getCellDef(registry.cells.TextCell)\n };\n const isRowSizeEqual = isDistributionEqual(normalizedRows);\n const isColumnSizeEqual = isDistributionEqual(normalizedColumns);\n\n resolver.colCells({});\n resolver.rowCells({});\n resolver.datamodelTransform(transform || {});\n\n // Cell creation begins here\n resolver.resetSimpleAxes();\n\n const {\n entryCellMap\n } = resolver.cacheMaps();\n const newCacheMap = {\n exitCellMap: entryCellMap,\n entryCellMap: new Map()\n };\n\n resolver.cacheMaps(newCacheMap);\n const valueCellContext = {\n config: globalConfig,\n suppliedLayers: simpleEncoder.serializeLayerConfig(resolver.layerConfig()),\n resolver,\n cell: cells.GeomCell,\n encoder: simpleEncoder,\n newCacheMap,\n detailFields: config.detail,\n retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\n simpleEncoder.data(groupedModel);\n // return a callback function to create the cells from the matrix\n const cellCreator = resolver.valueCellsCreator(valueCellContext);\n // Creates value matrices from the datamodel and configs\n const valueMatrixInfo = getMatrixModel(groupedModel, facetsAndProjections, cellCreator, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = generateMatrices(matrixGnContext, matrices, cells, labelManager);\n\n resolver.rowMatrix(rows);\n resolver.columnMatrix(columns);\n\n if (isFacet) {\n const sanitizeCheckBorder = sanitizeCheck(globalConfig.facetsUserConfig);\n const arr = sanitizeCheckBorder && sanitiseBorderMatrix({\n leftMatrix: rows[0],\n rightMatrix: rows[1],\n topMatrix: columns[0],\n bottomMatrix: columns[1]\n }, registry.cells.BlankCell);\n valueMatrixInfo.matrix = sanitizeCheckBorder && sanitiseGeomMatrix(valueMatrixInfo.matrix, arr);\n }\n\n placeholderInfo = {\n rows: resolver.rowMatrix(),\n columns: resolver.columnMatrix(),\n values: resolver.valueMatrix(),\n isColumnSizeEqual,\n isRowSizeEqual,\n priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n return placeholderInfo;\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {},\n transformedData: {},\n store: {}\n};\n","import { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\nimport {\n initializeCacheMaps,\n headerCreator,\n extractUnitConfig,\n setFacetsAndProjections,\n sanitizeCheck\n} from './group-utils';\nimport {\n ROW, COL, LEFT, RIGHT, COLOR, SIZE, SHAPE, DETAIL, CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS, INITIALIZED,\n AXIS, UNIT, BEFORE_UPDATE, UPDATED, VALUE_MATRIX, FACET_HEADERS\n} from '../enums/constants';\nimport { createValueCells, computeMatrices } from './cell-creator';\nimport { RESOLVER_PROPS } from './resolver-props';\n\n/**\n * Resolves the matrices from configuration provided\n *\n * @export\n * @class MatrixResolver\n */\nexport default class MatrixResolver {\n\n /**\n * Creates an instance of MatrixResolver.\n * @param {Object} dependencies needed to run the resolver\n * @memberof MatrixResolver\n */\n constructor (dependencies) {\n this._registry = {};\n this._layerConfig = [];\n this._matrixLayers = [];\n this._dependencies = dependencies;\n this._rowMatrix = [];\n this._columnMatrix = [];\n this._valueMatrix = [];\n this._facets = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n this._placeholderInfo = {};\n generateGetterSetters(this, this.constructor.getterSetters());\n\n this.cacheMaps(initializeCacheMaps());\n }\n\n static getterSetters () {\n return RESOLVER_PROPS;\n }\n /**\n * Set: Registers placeholders, Get: return {Object} those placeholders\n *\n * @param {Object} placeholders cells that will construct the group\n * @return {Object} Either current instance or the set of placeholders\n * @memberof MatrixResolver\n */\n registry (...placeholders) {\n if (placeholders.length) {\n Object.entries(placeholders[0]).forEach((val) => {\n this._registry[val[0]] = val[1];\n });\n return this;\n }\n return this._registry;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n cacheMaps (...maps) {\n if (maps.length) {\n [CELL, X_AXES, Y_AXES, ENTRY_CELLS, EXIT_CELLS].forEach((e) => {\n this._cacheMaps[`${e}Map`] = maps[0][`${e}Map`] || this._cacheMaps[`${e}Map`];\n });\n return this;\n }\n return this._cacheMaps;\n }\n\n /**\n * Used to set the layer config from outside or get current layer info\n *\n * @param {Object} type configuration of layer provided externally\n * @return {Object} either the layer or current instance\n * @memberof MatrixResolver\n */\n axes (...axes) {\n if (axes.length) {\n this._axes = Object.assign({}, this._axes, axes[0]);\n return this;\n }\n return this._axes;\n }\n\n facets (...facets) {\n if (facets.length) {\n Object.entries(facets[0]).forEach((e) => {\n this._facets[e[0]] = e[1];\n });\n return this;\n }\n return this._facets;\n }\n\n projections (...projections) {\n if (projections.length) {\n Object.entries(projections[0]).forEach((e) => {\n this._projections[e[0]] = e[1];\n });\n return this;\n }\n return this._projections;\n }\n\n optionalProjections (config, layerConfig, schema) {\n const otherEncodings = {};\n const optionalProjections = [];\n const otherEncodingTypes = [SIZE, COLOR, SHAPE];\n\n otherEncodingTypes.forEach((type) => {\n if (config[type] && config[type].field) {\n const enc = config[type];\n otherEncodings[type] = enc.field;\n optionalProjections.push(enc.field);\n }\n });\n\n if (config[DETAIL]) {\n optionalProjections.push(...config.detail);\n }\n\n const encoder = this.encoder();\n optionalProjections.push(...encoder.getProjectionFields(layerConfig, schema));\n this.projections({ optionalProjections });\n return otherEncodings;\n }\n\n /**\n * return the normalized set of rows and facets and projections\n *\n * @param {Object} rows parameters needed to set horizontal axis consisiting of rows\n * @return {Object} facets, projections and normalized rows\n * @memberof MatrixResolver\n */\n horizontalAxis (rows, encoder) {\n if (rows) {\n this._horizontalAxis = setFacetsAndProjections(this, { type: ROW, fields: rows }, encoder);\n return this;\n }\n return this._horizontalAxis;\n }\n\n /**\n * return the normalized set of columns and facets and projections\n *\n * @param {Object} columns parameters needed to set vertical axis consisiting of columns\n * @return {Object} facets, projections and normalized columns\n * @memberof MatrixResolver\n */\n verticalAxis (columns, encoder) {\n if (columns) {\n this._verticalAxis = setFacetsAndProjections(this, { type: COL, fields: columns }, encoder);\n return this;\n }\n return this._verticalAxis;\n }\n\n /**\n * Gets the class definition of a particular cell type(if the particular type has been extended, that particular\n * definition is returned)\n *\n * @param {Object} cell cell whose class definition is to be retrieved\n * @return {Object} cell definition\n * @memberof MatrixResolver\n */\n getCellDef (cell) {\n const registry = this.registry().cells;\n\n Object.values(registry).forEach((e) => {\n if (e.prototype instanceof cell) {\n cell = e;\n }\n });\n return cell;\n }\n\n /**\n * return a visual cell creator along with its axis information to be injected to the datamodel creation\n * function\n *\n * @param {Object} GeomCell Type of cell to be created\n * @return {Object} Created cell\n * @memberof MatrixResolver\n */\n valueCellsCreator (context) {\n // reset matrix layers\n this.matrixLayers([]);\n\n return (datamodel, fieldInfo, facets) => createValueCells(context, datamodel, fieldInfo, facets);\n }\n\n /**\n * Callback to be applied on each cell of a matrix of a particular type\n *\n * @param {string} matrixType type of matrix on which callback is to be applied\n * @param {Function} callback function to be applied to each cell\n * @memberof MatrixResolver\n */\n forEach (matrixType, callback) {\n this[matrixType]().forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n callback(rIndex, cIndex, col);\n });\n });\n }\n\n getAllFields () {\n const retObj = this.projections();\n\n Object.entries(this.facets()).forEach((e) => {\n retObj[e[0]] = e[1];\n });\n return retObj;\n }\n\n resetSimpleAxes () {\n return this.axes({\n x: new Set(),\n y: new Set(),\n radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} componentRegistry\n * @param {*} config\n * @memberof MatrixResolver\n */\n createUnits (componentRegistry, config) {\n const {\n globalConfig,\n alias,\n coord\n } = config;\n const {\n layerRegistry,\n interactions\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n const { VisualUnit } = this.registry();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n interactions\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\n lifeCycleManager.notify({ client: units, action: INITIALIZED, formalName: UNIT });\n return this.units(units);\n }\n\n /**\n *\n *\n * @param {*} config\n * @memberof MatrixResolver\n */\n setRetinalAxisDomain (config, datamodel, encoders) {\n const {\n color,\n shape,\n size,\n globalConfig\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const {\n rowFacets,\n colFacets\n } = this.getAllFields();\n const encoding = {\n color,\n shape,\n size\n };\n const facetFields = [...rowFacets.map(e => e.toString()), ...colFacets.map(e => e.toString())];\n const retContext = {\n domains: encoders.simpleEncoder.getRetinalFieldsDomain(datamodel, encoding, facetFields, groupBy),\n axes: this.getRetinalAxes(),\n encoding\n };\n encoders.retinalEncoder.setCommonDomain(retContext);\n return this;\n }\n\n resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n getRetinalAxes () {\n const {\n color,\n shape,\n size\n } = this.axes();\n\n return {\n color: [...color],\n shape: [...shape],\n size: [...size]\n };\n }\n\n getSimpleAxes (type) {\n return this.axes()[`${type}`];\n }\n\n createRetinalAxes (fieldsConfig, config, encoders) {\n const retinalAxes = encoders.retinalEncoder.createAxis({\n fieldsConfig,\n config,\n axes: this.axes()\n });\n\n this.axes(retinalAxes);\n\n this.updateVisualUnit(config);\n\n return this;\n }\n\n createHeaders (placeholders, fieldNames, config) {\n let bottomLeft = [];\n let bottomRight = [];\n const {\n rows,\n columns\n } = placeholders;\n const {\n smartlabel: labelManager,\n lifeCycleManager\n } = this.dependencies();\n const {\n showHeaders,\n classPrefix\n } = config;\n const { TextCell, BlankCell } = this.registry().cells;\n const [leftRows, rightRows] = rows;\n const [topCols, bottomCols] = columns;\n const rowHeaders = fieldNames.rows;\n const blankCellCreator = cell => new BlankCell().config({ show: cell.config().show });\n\n const sanitizeCheckBorder = sanitizeCheck(config.facetsUserConfig);\n // Headers and footers are created based on the rows. Thereafter, using the column information\n // they are tabularized into the current structure\n const headers = {\n left: headerCreator(leftRows, rowHeaders[0], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager, sanitizeCheckBorder }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager, sanitizeCheckBorder })\n };\n const footers = {\n left: leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : [],\n right: rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []\n };\n const [topLeft, topRight] = [LEFT, RIGHT].map(type => topCols.map((col, i) => {\n if (i === topCols.length - 1) {\n return headers[type];\n }\n return footers[type];\n }));\n\n // Creating only bottom matrices if there is no information on the top\n if (topCols.length === 0) {\n [bottomLeft, bottomRight] = [LEFT, RIGHT].map(type => bottomCols.map((col, i) => {\n if (i === 0) {\n return headers[type];\n }\n return footers[type];\n }));\n } else {\n bottomLeft = bottomCols.map(() => (leftRows.length > 0 ? leftRows[0].map(blankCellCreator) : []));\n bottomRight = bottomCols.map(() => (rightRows.length > 0 ? rightRows[0].map(blankCellCreator) : []));\n }\n\n lifeCycleManager.notify({\n client: [topLeft, topRight, bottomLeft, bottomRight],\n action: INITIALIZED,\n formalName: FACET_HEADERS\n });\n\n return { topLeft, topRight, bottomLeft, bottomRight };\n }\n\n updateVisualUnit (retinalConfig) {\n const retinalAxes = this.getRetinalAxes();\n\n const { lifeCycleManager } = this.dependencies();\n lifeCycleManager.notify({ client: this.axes(), action: INITIALIZED, formalName: AXIS });\n lifeCycleManager.notify({ client: this.units(), action: BEFORE_UPDATE, formalName: UNIT });\n\n const units = [];\n const matrixLayers = this.matrixLayers();\n\n const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(retinalConfig);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n getMatrices (resolverConfig) {\n this._placeholderInfo = computeMatrices(resolverConfig);\n\n return this._placeholderInfo;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","import { MeasureSubtype, DimensionSubtype, FieldType } from 'muze-utils';\n\nimport { ScaleType } from '@chartshq/muze-axis';\n\n/**\n * Map of DataModel types to associated field types.\n */\nexport const dataTypeScaleMap = {\n [FieldType.DIMENSION]: ScaleType.BAND,\n [DimensionSubtype.CATEGORICAL]: ScaleType.BAND,\n [DimensionSubtype.TEMPORAL]: ScaleType.TIME,\n [FieldType.MEASURE]: ScaleType.LINEAR,\n [MeasureSubtype.CONTINUOUS]: ScaleType.LINEAR,\n [DimensionSubtype.BINNED]: ScaleType.BAND\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\nimport { scaleMaps } from '../enums/scale-maps';\nimport { getAxisType, getAxisKey } from '../group-helper';\nimport { dataTypeScaleMap } from '../data-type-scale-map';\nimport { CATEGORICAL, TEMPORAL, BAR, LINE, POINT, BOTH, Y, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\n const {\n LEFT,\n RIGHT,\n TOP,\n BOTTOM\n } = AxisOrientation;\n const allOrientations = axisType === Y ? [LEFT, RIGHT] : [TOP, BOTTOM];\n\n if (position === BOTH) {\n axisOrientation = allOrientations[axisIndex];\n } else {\n axisOrientation = position;\n }\n const axisConfig = {\n id: `${axisType}-${index}-${axisIndex}`,\n name: field.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\n type: dataTypeScaleMap[field.subtype()]\n };\n userAxisConfig.tickValues = field.format(userAxisConfig.tickValues);\n userAxisConfig.domain = field.format(userAxisConfig.domain);\n\n return mergeRecursive(axisConfig, userAxisConfig);\n};\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst createSimpleAxis = (axisConfig, field, axesCreators) => {\n const { labelManager } = axesCreators;\n const Cls = scaleMaps[dataTypeScaleMap[field.subtype()]];\n const simpleAxis = new Cls(axisConfig, { labelManager });\n return simpleAxis;\n};\n\nexport const getAdjustedDomain = (max, min) => {\n const y1ratio = max[0] / (max[0] - min[0]);\n const y2ratio = max[1] / (max[1] - min[1]);\n\n // adjust min/max values for positive negative values zero line etc\n let allSameSign = false;\n\n // if all numbers are positive set floor to zero\n if (min[0] > 0 && min[1] > 0 && min[1] > 0 && max[1] > 0) {\n allSameSign = true;\n min[0] = 0;\n min[1] = 0;\n }\n\n // if all numbers are negative set ceiling to zero\n if (min[0] < 0 && min[1] < 0 && min[1] < 0 && max[1] < 0) {\n allSameSign = true;\n max[0] = 0;\n max[1] = 0;\n }\n\n // align zero line if necessary\n if (!allSameSign && y1ratio !== y2ratio) {\n if (y1ratio < y2ratio) {\n // adjust min[1]\n min[1] = min[0] / max[0] * max[1];\n } else {\n // adjust min[0]\n min[0] = min[1] / max[1] * max[0];\n }\n }\n return [\n [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\n def.forEach((conf) => {\n conf.encoding = conf.encoding || {};\n !conf.encoding[axis] && (conf.encoding[axis] = {});\n conf.encoding[axis].field = encodingConfigs[axis].field;\n });\n }\n });\n};\n\n/**\n *\n *\n * @memberof MatrixResolver\n */\nexport const mutateAxesFromMap = (cacheMaps, axes) => {\n const {\n xAxesMap,\n yAxesMap\n } = cacheMaps;\n const {\n x: xAxisSet,\n y: yAxisSet\n } = axes;\n const xAxes = [];\n const yAxes = [];\n\n xAxisSet.forEach((axisId) => {\n const xAxis = xAxesMap.get(axisId);\n xAxes.push(xAxis);\n });\n yAxisSet.forEach((axisId) => {\n const yAxis = yAxesMap.get(axisId);\n yAxes.push(yAxis);\n });\n return {\n xAxes, yAxes\n };\n};\n\n/**\n * return a default mark based on predefined set of rules of type and subtype of the fields\n *\n * @param {string} colFieldType dimension/measure - temporal/ordinal/nominal\n * @param {string} rowFieldType dimension/measure - temporal/ordinal/nominal\n * @return {Object} return mark type\n */\nexport const getDefaultMark = (colFieldType, rowFieldType) => {\n let mark;\n\n if (colFieldType === CATEGORICAL || rowFieldType === CATEGORICAL) {\n mark = BAR;\n } else if (colFieldType === TEMPORAL || rowFieldType === TEMPORAL) {\n mark = LINE;\n } else {\n mark = POINT;\n }\n\n return mark;\n};\n\n/**\n *\n *\n * @param {*} axesCreators\n * @param {*} [fieldInfo=[]]\n *\n */\nexport const createRetinalAxis = (axesCreators, fieldProps = {}) => {\n const { axisType, fieldsConfig } = axesCreators;\n const field = fieldProps.field;\n const axis = [];\n const Cls = scaleMaps[axisType];\n\n fieldProps.type = fieldProps.type ? fieldProps.type : getAxisType(fieldsConfig, field || null);\n axis.push(new Cls(fieldProps));\n return axis;\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} val\n *\n */\nexport const getIndex = (arr, val) => {\n let i = 0;\n let arrIndex = -1;\n\n while (arrIndex === -1 && i < arr.length) {\n if (arr[i].toString() === val.toString()) {\n arrIndex = i;\n }\n i++;\n }\n return arrIndex;\n};\n\n/**\n *\n *\n * @param {*} colFields\n * @param {*} rowFields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\nexport const getLayerConfFromFields = (colFields, rowFields, userLayerConfig) => userLayerConfig.filter((conf) => {\n const userConf = conf instanceof Array ? conf : [conf];\n const encodingArr = [].concat(...userConf.map(d => d.encoding).filter(d => d !== undefined));\n\n if (!encodingArr.length) {\n return true;\n }\n\n const xFields = [].concat(...encodingArr.map(d => [d.x && d.x.field, d.x0 && d.x0.field]))\n .filter(d => d !== undefined && d !== null);\n const yFields = [].concat(...encodingArr.map(d => [d.y && d.y.field, d.y0 && d.y0.field]))\n .filter(d => d !== undefined && d !== null);\n\n if (!xFields.length && !yFields.length) {\n return true;\n }\n\n const colFieldExist = xFields.length ? xFields.every(d => colFields.indexOf(d) !== -1) : false;\n const rowFieldExist = yFields.length ? yFields.every(d => rowFields.indexOf(d) !== -1) : false;\n if (xFields.length && yFields.length) {\n return colFieldExist && rowFieldExist;\n }\n return colFieldExist || rowFieldExist;\n});\n\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n\nexport const getSortingConfig = (context, currentFieldName, axesConfig) => {\n const config = context.config();\n const dataModel = context.data();\n\n let lastSortConfig = null;\n if (Object.keys(config.sort).length !== 0) {\n return config.sort[currentFieldName];\n }\n\n const operations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n\n while (lastSortConfig = operations.pop()) {\n if (lastSortConfig.op === 'sort') break;\n }\n if (lastSortConfig &&\n lastSortConfig.criteria.length &&\n lastSortConfig.criteria[0][0] === currentFieldName) {\n return lastSortConfig.criteria[0][1];\n }\n return axesConfig().defaultSort;\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig,\n getSortingConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y, TEMPORAL } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const geomCellAxes = {};\n const {\n axes\n } = axesCreators;\n const {\n projections,\n indices\n } = fieldInfo;\n const {\n rowFields,\n columnFields\n } = projections;\n const {\n rowIndex,\n columnIndex\n } = indices;\n const axisFields = [{\n fields: rowFields,\n index: rowIndex\n }, {\n fields: columnFields,\n index: columnIndex\n }];\n const { resolver, facetFields, geomCell } = context;\n const xAxes = axes.x || [];\n const yAxes = axes.y || [];\n\n [rowFields, columnFields].forEach((fields, i) => {\n const type = i === 0 ? ROW : COLUMN;\n const axis = i === 0 ? Y : X;\n\n if (fields.length > 1) {\n axesCreators.position = BOTH;\n } else {\n axesCreators.position = this.axisFrom()[type];\n }\n geomCellAxes[axis] = generateAxisFromMap(axis, axisFields[i], axesCreators, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.dataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = getSortingConfig(context, currentFieldName, axes[0].config);\n if (sortingOrder && domains[axisType][key] instanceof Array) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields, type) {\n let facets = [];\n let projections = [];\n let counter = 0;\n const primaryFacets = [];\n const secondaryFacets = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n const axisFrom = this.axisFrom();\n\n for (let i = 0; i < primaryLen; i++) {\n let projArr = [primaryFields[i]];\n const primaryField = primaryFields[i];\n\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter];\n if (secondaryField && secondaryField.type() === MEASURE) {\n counter++;\n projArr = [primaryField, secondaryField];\n }\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n primaryFacets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n secondaryFacets.push(secondaryField);\n }\n }\n }\n if ((primaryFacets.length || secondaryFacets.length) && !projections.length) {\n type = type === COL ? COLUMN : type;\n if ((axisFrom[type] === LEFT || axisFrom[type] === TOP) && primaryFacets.length) {\n const axisFromIndex = primaryFacets.length - 1;\n const facet = primaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(secondaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n secondaryFacets.splice(existIndex, 1);\n }\n primaryFacets.splice(axisFromIndex, 1);\n } else {\n const axisFromIndex = 0;\n const facet = secondaryFacets[axisFromIndex];\n projections = [[facet]];\n const existIndex = getIndex(primaryFacets, facet);\n if (existIndex > -1) {\n projections = [[facet, facet]];\n primaryFacets.splice(existIndex, 1);\n }\n secondaryFacets.splice(axisFromIndex, 1);\n }\n }\n\n facets = [...primaryFacets, ...secondaryFacets];\n facets = facets.filter((el, index, self) => index === self.findIndex(t => (t.toString() === el.toString())));\n return {\n facets,\n projections\n };\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\n * @memberof CartesianEncoder\n */\n getRetinalFieldsDomain (dataModels, encoding) {\n const groupedModel = dataModels.groupedModel;\n const domains = {};\n for (const key in encoding) {\n if ({}.hasOwnProperty.call(encoding, key)) {\n const encodingObj = encoding[key];\n const field = encodingObj.field;\n if (!encodingObj.domain && field) {\n let domain = retriveDomainFromData(groupedModel, field);\n const fieldInstance = groupedModel.getFieldspace().fieldsObj()[field];\n const isTemporalField = fieldInstance.schema().subtype === TEMPORAL;\n\n if (isTemporalField) {\n domain = fieldInstance.data();\n }\n\n domains[field] = domain;\n }\n }\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n * @memberof CartesianEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n // let currentLayerIndex = 0;\n layerArray.length && layerArray.forEach((layer, i) => {\n const def = layerFactory.sanitizeLayerConfig(layer);\n def.order = i;\n serializedLayers.push(def);\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n const layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n\n // let currentLayerIndex = 0;\n columnFields.forEach((colField) => {\n const colFieldName = colField.toString();\n rowFields.forEach((rowField) => {\n let configs = [];\n const rowFieldName = rowField.toString();\n const encoding = {\n x: {\n field: colFieldName\n },\n y: {\n field: rowFieldName\n }\n };\n const rowFieldType = rowField.subtype();\n const colFieldType = colField.subtype();\n const mark = getDefaultMark(colFieldType, rowFieldType);\n\n const defConfigs = [{\n mark,\n def: {\n mark,\n encoding\n }\n }];\n\n const layerConfigs = getLayerConfFromFields(colField.getMembers(),\n rowField.getMembers(), userLayerConfig || []);\n if (layerConfigs.length) {\n configs = layerConfigs.map((layerConf) => {\n const mergedLayerConf = mergeRecursive(mergeRecursive({}, defConfigs[0].def), layerConf);\n const serializedLayerConfig = layerFactory.getSerializedConf(mergedLayerConf.mark,\n mergedLayerConf);\n return {\n mark: mergedLayerConf.mark,\n order: mergedLayerConf.order,\n def: serializedLayerConfig\n };\n });\n } else {\n configs = defConfigs;\n }\n\n layerConfig.push(...configs);\n });\n });\n return this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n\n hasMandatoryFields (fields) {\n const { colProjections, rowProjections } = fields;\n const colFields = super.hasMandatoryFields({ colProjections });\n const rowFields = super.hasMandatoryFields({ rowProjections });\n return colFields && rowFields;\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\n/**\n *\n *\n * @export\n * @class PolarEncoder\n * @extends {VisualEncoder}\n */\nexport default class PolarEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\n const {\n axes\n } = axesCreators;\n const geomCellAxes = axes;\n const {\n indices\n } = fieldInfo;\n const {\n rowIndex,\n columnIndex\n } = indices;\n // Dummy axes for polar, to create blank cells\n const pieAxes = geomCellAxes.pie || [];\n\n pieAxes[rowIndex] = pieAxes[rowIndex] || [];\n pieAxes[rowIndex][columnIndex] = [];\n\n const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\n * @memberof CartesianEncoder\n */\n getFacetsAndProjections (fields) {\n let counter = 0;\n const facets = [];\n const projections = [];\n const primaryFields = fields[0];\n const secondaryFields = fields[1];\n const primaryLen = primaryFields.length;\n const secondaryLen = secondaryFields.length;\n\n for (let i = 0; i < primaryLen; i++) {\n const primaryField = primaryFields[i];\n if (primaryField.type() === MEASURE) {\n const secondaryField = secondaryFields[counter++];\n const projArr = secondaryField ? [primaryField, secondaryField] : [primaryField];\n projections.push(projArr);\n } else {\n facets.push(primaryField);\n }\n }\n if (secondaryLen > counter) {\n for (let i = counter; i < secondaryLen; i++) {\n const secondaryField = secondaryFields[i];\n const projArr = [secondaryField];\n if (secondaryField.type() === MEASURE) {\n projections.push(projArr);\n } else {\n facets.push(secondaryField);\n }\n }\n }\n return {\n facets,\n projections\n };\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.dataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n static type () {\n return POLAR;\n }\n\n layers (...layers) {\n if (layers.length) {\n this._layers = layers[0];\n return this;\n }\n return this._layers;\n }\n\n /**\n *\n *\n * @param {*} datamodel\n * @param {*} config\n * @memberof PolarEncoder\n */\n fieldSanitizer (datamodel, config) {\n let sanitizedRows = [[], []];\n let sanitizedColumns = [[], []];\n const fields = super.fieldSanitizer(datamodel, config);\n const {\n layers\n } = config;\n const {\n rows,\n columns\n } = fields;\n const layer = layers[0];\n const encoding = layer.encoding;\n const radius = encoding && encoding.radius ? encoding.radius.field : null;\n const angle = encoding && encoding.angle ? encoding.angle.field : null;\n const sanitizedFields = [sanitizedRows, sanitizedColumns];\n\n [rows, columns].forEach((fieldType, typeIndex) => {\n fieldType.forEach((fieldSet, i) => fieldSet.forEach((field) => {\n if (field.toString() !== radius && field.toString() !== angle && field.type() !== MEASURE) {\n sanitizedFields[typeIndex][i].push(field);\n }\n }));\n });\n sanitizedColumns = [...new Set(sanitizedColumns)];\n sanitizedRows = [...new Set(sanitizedRows)];\n this.fieldInfo({ rows: sanitizedRows, columns: sanitizedColumns });\n return this.fieldInfo();\n }\n\n getRetinalFieldsDomain (dataModels, encoding, facetFields, groupBy) {\n let sizeField;\n let colorField;\n const fields = [];\n const layers = this.layers();\n const dataModel = dataModels.groupedModel;\n const fieldsConfig = dataModel.getFieldsConfig();\n const domains = {};\n if (layers && layers[0]) {\n const layer = layers[0];\n const layerEncoding = layer.def.encoding || {};\n\n [RADIUS, ANGLE, SIZE, COLOR].forEach((encType) => {\n const field = layerEncoding[encType] ? layerEncoding[encType].field : '';\n const measureField = fieldsConfig[field] && fieldsConfig[field].def.type === MEASURE;\n if (encType === SIZE && measureField) {\n sizeField = field;\n }\n if (encType === COLOR) {\n colorField = field;\n }\n fieldsConfig[field] && !measureField && fields.push(field);\n });\n }\n\n if (sizeField) {\n domains[sizeField] = dataModel.groupBy(facetFields, {\n [sizeField]: GROUP_BY_FUNCTIONS.SUM\n }).getFieldspace().fieldsObj()[sizeField].domain();\n }\n\n if (colorField) {\n const dm = dataModel.groupBy([...facetFields, ...fields], groupBy.measures);\n domains[colorField] = dm.getFieldspace().fieldsObj()[colorField].domain();\n }\n return domains;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\n let layerConfig = [];\n const {\n columnFields,\n rowFields\n } = fields;\n const allFields = [...columnFields, ...rowFields];\n\n allFields.forEach(() => {\n const encoding = {};\n let config = {\n mark: ARC,\n def: {\n encoding\n }\n };\n if (userLayerConfig && userLayerConfig.length > 0) {\n config = mergeRecursive(config, userLayerConfig[0]);\n }\n layerConfig.push(config);\n });\n if (layerConfig.length === 0) {\n layerConfig = userLayerConfig;\n }\n const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\n * @memberof PolarEncoder\n */\n serializeLayerConfig (layerArray) {\n const serializedLayers = [];\n\n layerArray.length && layerArray.forEach((layer) => {\n const def = layerFactory.getSerializedConf(layer.mark, layer);\n serializedLayers.push({\n mark: layer.mark,\n def\n });\n });\n return serializedLayers;\n }\n\n sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n hasMandatoryFields (fields) {\n const { optionalProjections } = fields;\n return super.hasMandatoryFields({ optionalProjections });\n }\n}\n","import { createRetinalAxis } from './encoder-helper';\nimport { COLOR, SHAPE, SIZE } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\n/**\n *\n *\n * @export\n * @class RetinalEncoder\n * @extends {VisualEncoder}\n */\nexport default class RetinalEncoder extends VisualEncoder {\n\n /**\n *\n *\n * @param {*} axesCreators\n *\n * @memberof RetinalEncoder\n */\n createAxis (axesCreators) {\n const { fieldsConfig, config } = axesCreators;\n const newAxes = {};\n\n [COLOR, SHAPE, SIZE].forEach((axisType) => {\n newAxes[`${axisType}`] = createRetinalAxis({ axisType, fieldsConfig }, config[axisType]);\n });\n return newAxes;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\n * @memberof RetinalEncoder\n */\n setCommonDomain (context) {\n const { domains, axes, encoding } = context;\n\n Object.entries(encoding).forEach((enc) => {\n if (enc[1] && enc[1].field) {\n const encType = enc[0];\n const field = enc[1].field;\n\n if (field) {\n axes[encType].forEach((axis) => {\n const domain = domains[field];\n !enc[1].domain && axis.updateDomain(domain);\n });\n }\n }\n });\n\n return axes;\n }\n}\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Artboard.\n * Artboard merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module\n */\n\nexport default {\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { ERROR_MSG } from 'muze-utils';\n\n/**\n * Interfaces for VisualGroup. Any new VisualGroup has to implement this class.\n * @class SimpleGroup\n */\nclass SimpleGroup {\n\n /**\n * This method is used to set or get the DataModel instance.\n *\n * @param {DataModel | undefined} dataModel Instance of datamodel.\n\n * @memberof SimpleGroup\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to set or get the group specific configuration\n * properties\n *\n * @param {Object | undefined} configObj The input configuration.\n * or instance of visual group.\n * @memberof SimpleGroup\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to return a serialized representation of the\n * instance's properties.\n *\n * @memberof SimpleGroup\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * This method is used to get or set the measurement object which houses\n * layout properties like width and height.\n *\n * @param {Object | undefined} mObj The measurement properties.\n * @memberof SimpleGroup\n */\n measurement () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n}\n\nexport default SimpleGroup;\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\n */\n constructor (matrixArr) {\n const instancesById = {};\n\n this.matrix(matrixArr || []);\n this.filter(() => true);\n\n this.each((el, rIdx, cIdx) => {\n const cellValue = el.valueOf();\n if (cellValue && cellValue.id) {\n const id = cellValue.id();\n instancesById[id] = {\n instance: cellValue,\n rowIndex: rIdx,\n colIndex: cIdx\n };\n }\n });\n\n this.instancesById(instancesById);\n }\n\n instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\n */\n matrix (...matrix) {\n if (matrix.length) {\n this._matrix = matrix[0];\n return this;\n }\n return this._matrix;\n }\n\n /**\n * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\n */\n filter (...fn) {\n if (fn.length) {\n this._filterFn = fn[0];\n return this;\n }\n return this._filterFn;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n width () {\n let rowWidth = 0;\n\n this.matrix().forEach((row) => {\n let currentRowWidth = 0;\n row.forEach((cell) => {\n currentRowWidth += cell.getLogicalSpace().width;\n });\n rowWidth = Math.max(rowWidth, currentRowWidth);\n });\n return rowWidth;\n }\n\n /**\n * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\n */\n height () {\n let rowHeight = 0;\n\n this.matrix().forEach((row) => {\n let currentRowHeight = 0;\n row.forEach((cell) => {\n currentRowHeight = Math.max(currentRowHeight, cell.getLogicalSpace().height);\n });\n rowHeight += currentRowHeight;\n });\n return rowHeight;\n }\n\n /**\n * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\n */\n each (fn) {\n const matrix = this.matrix();\n const filterFn = this.filter();\n\n matrix.forEach((row, rIndex) => {\n row.forEach((col, cIndex) => {\n if (filterFn(col)) {\n fn(col, rIndex, cIndex, matrix);\n }\n });\n });\n return this;\n }\n\n findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n\n data () {\n\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps, InvalidAwareTypes } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\nimport { ROWS, COLUMNS, DATA } from '../enums/constants';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\n\nconst sanitizeRetinalConfig = (retinalConf) => {\n const conf = {};\n for (const key in retinalConf) {\n const confValue = retinalConf[key];\n if (typeof confValue === 'string' || !confValue) {\n conf[key] = {\n field: retinalConf[key]\n };\n } else {\n conf[key] = confValue;\n }\n }\n return conf;\n};\n\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nconst hasValue = (val) => {\n let hasOneValue = false;\n for (let i = 0; i < val.length && !hasOneValue; i++) {\n for (let j = 0; j < val[i].length; j++) {\n if (!(val[i][j] instanceof InvalidAwareTypes)) {\n hasOneValue = true;\n break;\n }\n }\n }\n return hasOneValue;\n};\n\nexport const updateChecker = (context, props) => props.every((option) => {\n const val = context[option]();\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n case DATA:\n return val && !val.isEmpty() && hasValue(val.getData().data);\n\n default:\n return true;\n }\n});\n\nexport const initializeFields = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n // Get the resolver for the matrices\n const resolver = context.resolver();\n\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\n });\n\n matrixConfig = Object.assign(matrixConfig, retinalConfig);\n // Create the encoders for the group\n const encoders = {};\n encoders.retinalEncoder = new RetinalEncoder();\n encoders.simpleEncoder = context.createEncoderInstance();\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\n\n // Set the group type\n context.groupType(encoders.simpleEncoder.constructor.type());\n\n // Get sanitized fields as instances of the Vars Class\n const fields = encoders.simpleEncoder.fieldSanitizer(datamodel, matrixConfig);\n encoders.simpleEncoder.setAxisAndHeaders(config ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\n // Set the row and column axes\n resolver.horizontalAxis(fields.rows, encoders).verticalAxis(fields.columns, encoders);\n\n return {\n rows,\n columns,\n color,\n datamodel,\n size,\n detail,\n layers,\n transform,\n config,\n shape,\n resolver,\n matrixConfig,\n retinalConfig,\n encoders,\n fields\n };\n};\n\nexport const createMatrices = (context, sanitizedConfig) => {\n const { groupConfig, resolverConfig } = sanitizedConfig;\n const {\n config,\n resolver,\n matrixConfig,\n encoders,\n retinalConfig,\n fields\n } = groupConfig;\n\n const placeholderInfo = resolver.getMatrices(resolverConfig);\n\n context._originalGroupedData = context._groupedDataModel = placeholderInfo.dataModels.groupedModel;\n // Set the selection object\n context.selection(placeholderInfo.selection);\n\n // Create retinal axes\n resolver.createRetinalAxes(placeholderInfo.dataModels.parentModel.getFieldsConfig(), retinalConfig,\n encoders);\n\n // Domains are evaluated for each of the axes for commonality\n resolver.setRetinalAxisDomain(matrixConfig, placeholderInfo.dataModels, encoders);\n\n // Create matrix instances\n setMatrixInstances(context, placeholderInfo);\n\n // Prepare corner matrices\n context.cornerMatrices(resolver.createHeaders(placeholderInfo, fields, config));\n\n // Set placeholder information\n context.placeholderInfo(placeholderInfo);\n\n context._composition.axes = resolver.axes();\n context.metaData({\n border: getBorders(placeholderInfo, encoders.simpleEncoder)\n });\n\n resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n\nexport const initializeResolverFields = (context, config) => {\n const {\n datamodel,\n encoders,\n resolver,\n componentRegistry\n } = context;\n const {\n globalConfig,\n selection,\n transform\n } = config;\n const groupBy = globalConfig.autoGroupBy;\n const { smartlabel: labelManager } = resolver.dependencies();\n const fieldMap = datamodel.getFieldsConfig();\n const layerConfig = resolver.layerConfig();\n const registry = resolver.registry();\n const { fields: normalizedRows } = resolver.horizontalAxis();\n const { fields: normalizedColumns } = resolver.verticalAxis();\n const otherEncodings = resolver.optionalProjections(config, layerConfig, datamodel.getSchema());\n const facetsAndProjections = resolver.getAllFields();\n const { simpleEncoder } = encoders;\n const shouldRender = simpleEncoder.hasMandatoryFields(facetsAndProjections);\n return {\n datamodel,\n encoders,\n resolver,\n globalConfig,\n selection,\n transform,\n componentRegistry,\n groupBy,\n labelManager,\n fieldMap,\n layerConfig,\n registry,\n normalizedRows,\n normalizedColumns,\n otherEncodings,\n facetsAndProjections,\n simpleEncoder,\n shouldRender,\n config\n };\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n const { VisualUnit, layerRegistry } = context.registry();\n const { base: BaseLayer } = layerRegistry;\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {\n preset: (context) => {\n context._prevData = null;\n }\n },\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\n registry: {\n sanitization: (context, value) => {\n if (context.resolver) {\n context.resolver().registry({\n cells: value.cellRegistry,\n VisualUnit: value.VisualUnit\n });\n }\n return value;\n }\n },\n selection: {},\n [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup,\n getEncoder\n} from '../group-helper';\nimport {\n createUnitState,\n initializeGlobalState,\n setMatrixInstances,\n createMatrices,\n createLayerState,\n initializeResolverFields,\n initializeFields,\n updateChecker\n} from './helper';\nimport { setupChangeListeners } from './change-listener';\nimport { PROPS } from './props';\nimport {\n CONFIG,\n MOUNT,\n RETINAL,\n Y,\n ROWS,\n COLUMNS,\n DATA\n} from '../enums/constants';\n\n/**\n * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\n *\n * @class VisualGroup\n */\nclass VisualGroup extends SimpleGroup {\n\n /**\n * Creates an instance of VisualGroup. Requires dependencies and other registry options for placeholders\n * and layers that create individual units.\n *\n * @param {Object} registry Key value pair of compostions for the group\n * @param {Object} dependencies Dependencies needed to run the group\n * @memberof VisualGroup\n */\n constructor (registry, dependencies) {\n super();\n\n const {\n components,\n componentSubRegistry,\n interactions\n } = registry;\n\n this._dependencies = dependencies;\n // Generate getter/setter methods for all properties of the class\n // One can get each property by calling the method and can set it\n // by passing paramaters for the same. Thus, one can chain setter\n // getter methods.\n generateGetterSetters(this, this.constructor.getterSetters());\n generateGetterSetters(this, this.constructor.localOptions());\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n this._prevData = null;\n this._groupedDataModel = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.createMatrixResolver();\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layers.get(),\n cellRegistry: componentSubRegistry.cells.get(),\n VisualUnit: components.VisualUnit,\n interactions\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n static formalName () {\n return 'VisualGroup';\n }\n\n static localOptions () {\n return localOptions;\n }\n static getterSetters () {\n return PROPS;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\n */\n matrixInstance (...matrices) {\n if (matrices.length) {\n return this;\n }\n return this.composition().matrices;\n }\n\n /**\n * Returns the composition of visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n /**\n * Locks the model to prevent change listeners to be triggered until unlocked\n *\n * @return {Object} Instance of class VisualGroup\n * @memberof VisualGroup\n */\n lockModel () {\n this.store().model.lock();\n return this;\n }\n\n /**\n * Unlocks the model so that all change listeners can be triggered\n *\n * @return {Object} Instance of class VisualGroup\n */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\n\n getAxesByFacetKey (axisType, facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey];\n const axes = cells[0].valueOf().axes()[axisType] || [];\n\n return axes;\n }\n\n /**\n * This method is used to return a serialized representation of the instance's properties.\n *\n * @return {Object} Object with config proprties.\n * @memberof VisualGroup\n */\n serialize () {\n const store = this.store();\n\n return {\n [CONFIG]: store.get(CONFIG),\n [MOUNT]: store.get(MOUNT)\n };\n }\n\n /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices (sanitizedConfig) {\n createMatrices(this, sanitizedConfig);\n }\n\n getMandatoryFields () {\n const updateProps = updateChecker(this, [ROWS, COLUMNS, DATA]);\n let sanitizedValue = {\n groupConfig: {},\n resolverConfig: {},\n shouldRender: false\n };\n if (updateProps) {\n const localFields = initializeFields(this);\n const {\n datamodel,\n encoders,\n resolver,\n matrixConfig\n } = localFields;\n const context = {\n datamodel,\n componentRegistry: this.registry(),\n encoders,\n resolver\n };\n const resolverFields = initializeResolverFields(context, matrixConfig);\n sanitizedValue = {\n groupConfig: localFields,\n resolverConfig: resolverFields,\n shouldRender: resolverFields.shouldRender\n };\n }\n return sanitizedValue;\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\n }\n\n createEncoderInstance () {\n const layers = this.layers();\n\n return getEncoder(layers);\n }\n\n createMatrixResolver () {\n this.resolver(new MatrixResolver(this._dependencies));\n\n return this;\n }\n\n groupedData (...params) {\n if (params.length) {\n this._groupedDataModel = params[0];\n return this;\n }\n return this.getGroupByData();\n }\n\n resetData () {\n const oriData = this._originalGroupedData;\n if (oriData) {\n this._groupedDataModel = oriData;\n }\n\n return this;\n }\n}\n\nexport default VisualGroup;\n","import { PersistentBehaviour, SELECTION } from '@chartshq/muze-firebolt';\n\nexport default class SelectBehaviour extends PersistentBehaviour {\n static formalName () {\n return 'select';\n }\n\n setSelectionSet (addSet, selectionSet) {\n if (addSet === null) {\n selectionSet.reset();\n } else if (addSet.length) {\n const propagationInf = this.firebolt._propagationInf;\n // new add set\n const existingRemoveSet = addSet.filter(d => selectionSet._set[d] === SELECTION.SELECTION_OLD_EXIT\n || selectionSet._set[d] === SELECTION.SELECTION_NEW_EXIT);\n\n if (propagationInf.sourceId) {\n selectionSet.reset();\n selectionSet.add(addSet);\n } else {\n // existing add set\n if (existingRemoveSet.length) {\n selectionSet.updateEntry();\n selectionSet.add(existingRemoveSet);\n } else {\n selectionSet.updateExit();\n selectionSet.remove(addSet);\n }\n const { exitSet } = selectionSet.getSets({ keys: true });\n const mergedExitSet = [...new Set(exitSet[1]), ...new Set(exitSet[0])];\n const completeSetCount = selectionSet.getCompleteSet().length;\n if (exitSet[1].length !== completeSetCount && mergedExitSet.length === completeSetCount) {\n selectionSet.reset();\n }\n }\n } else {\n selectionSet.remove(selectionSet.getCompleteSet());\n }\n return this;\n }\n}\n","import { BEHAVIOURS, ACTIONS } from '@chartshq/muze-firebolt';\n\nconst CLASSPREFIX = 'muze';\n\nexport const actionBehaviourMap = {\n [ACTIONS.DRAG]: {\n target: `.${CLASSPREFIX}-gradient-rect`,\n behaviours: [BEHAVIOURS.BRUSH]\n },\n [ACTIONS.HOVER]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.HIGHLIGHT]\n },\n [ACTIONS.CLICK]: {\n target: [`.${CLASSPREFIX}-legend-columns`],\n behaviours: [BEHAVIOURS.SELECT]\n }\n};\n\nexport const propagationBehaviourMap = {\n [BEHAVIOURS.SELECT]: BEHAVIOURS.FILTER,\n [BEHAVIOURS.BRUSH]: BEHAVIOURS.HIGHLIGHT\n};\n","import * as BEHAVIOURS from '../enums/behaviours';\nimport * as sideEffects from '../enums/side-effects';\n\nexport const behaviourEffectMap = {\n [BEHAVIOURS.BRUSH]: [sideEffects.SELECTIONBOX, {\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }]\n};\n\nexport const propagationSideEffects = {\n [BEHAVIOURS.BRUSH]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.HIGHLIGHT]: [{\n name: sideEffects.Highlighter,\n options: {\n strategy: 'fade'\n }\n }],\n [BEHAVIOURS.SELECT]: ['filter']\n};\n\n","export const BRUSH = 'brush';\nexport const HIGHLIGHT = 'highlight';\nexport const TOOLTIP = 'tooltip';\nexport const FILTER = 'filter';\nexport const SELECT = 'select';\n\n","export const SELECTIONBOX = 'selectionBox';\nexport const Highlighter = 'highlighter';\nexport const Marker = 'marker';\n\n","import { propagationBehaviourMap } from './action-behaviour-map';\nimport { propagationSideEffects } from './behaviour-effect-map';\n\nexport const propagate = (firebolt, action, identifiers) => {\n const context = firebolt.context;\n const data = context.metaData();\n\n const propPayload = {};\n propPayload.action = propagationBehaviourMap[action] || action;\n // @TODO: Change fade propagationSideEffect for area layer\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = context.canvasAlias();\n const isMutableAction = firebolt._actions.behavioural[propPayload.action].constructor.mutates();\n\n const propConfig = {\n sourceId: firebolt.id(),\n payload: propPayload,\n criteria: propPayload.criteria === null ? null : identifiers,\n isMutableAction,\n action: propPayload.action\n };\n\n data.propagate(identifiers, propConfig, true);\n};\n\nexport const payloadGenerator = {\n __default: (selectionDataModel, propConfig) => {\n const propPayload = propConfig.payload;\n const sourceIdentifiers = propConfig.sourceIdentifiers;\n const dataObj = selectionDataModel.getData();\n let schema = dataObj.schema;\n const payload = Object.assign({}, propPayload);\n schema = dataObj.schema;\n const data = dataObj.data;\n const sourceFields = schema.map(d => d.name);\n payload.criteria = !sourceIdentifiers && selectionDataModel.isEmpty() ? null :\n [sourceFields, ...data];\n payload.sourceFields = sourceIdentifiers ? sourceIdentifiers.fields.map(d => d.name) : [];\n return payload;\n },\n brush: (dm, propConfig) => {\n const { criteria } = propConfig;\n return {\n criteria: criteria ? criteria.range : criteria\n };\n }\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const CONFIG = 'config';\nexport const DATAMODEL = 'dataModel';\nexport const AXES = 'axes';\nexport const LAYERDEFS = 'layerDef';\nexport const WIDTH = 'width';\nexport const MAXWIDTH = 'max-width';\nexport const HEIGHT = 'height';\nexport const MOUNTPOINT = 'mountPoint';\nexport const GRIDLINEPARENTGROUPCLASS = 'grid-lines';\nexport const TRANSFORM = 'transform';\nexport const CONSOLIDATED = 'consolidated';\nexport const FRAGMENTED = 'fragmented';\nexport const DEFAULTCOLOR = '#F44336';\nexport const DEFAULTSIZE = 50;\nexport const VERTICAL_BUFFER = 10;\nexport const HORIZONTAL_BUFFER = 2;\nexport const DEFAULTICONSIZE = { // approximately the (size needed) * Math.PI value\n circle: 64,\n square: 45.8,\n default: 42.8\n};\nexport const DEFAULTSHAPE = 'circle';\nexport const STEP = 'step';\nexport const GRADIENT = 'gradient';\nexport const ORDINAL = 'ordinal';\nexport const SCALE_FUNCTIONS = {\n size: 'getSize',\n shape: 'getShape',\n color: 'getColor'\n};\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const HORIZONTAL = 'horizontal';\nexport const VERTICAL = 'vertical';\nexport const CENTER = 'center';\nexport const VALUE = 'value';\nexport const PATH = 'path';\nexport const SHAPE = 'shape';\nexport const ICON = 'icon';\nexport const RECT = 'rect';\nexport const START = 'start';\nexport const UPPER = 'upper';\nexport const LOWER = 'lower';\nexport const END = 'end';\nexport const SIZE = 'size';\nexport const DISCRETE = 'discrete';\nexport const MEASURE = 'measure';\nexport const DEFAULT = 'default';\n\nexport const POSITION_ALIGNMENT_MAP = {\n [LEFT]: VERTICAL,\n [RIGHT]: VERTICAL,\n [TOP]: HORIZONTAL,\n [BOTTOM]: HORIZONTAL\n};\n\nexport const OPPOSITE_POSITION = {\n [LEFT]: RIGHT,\n [RIGHT]: LEFT\n};\n\n","import { Firebolt } from '@chartshq/muze-firebolt';\nimport { propagate, payloadGenerator } from './helper';\nimport { STEP, GRADIENT } from '../enums/constants';\nimport { HIGHLIGHT, SELECT } from '../enums/behaviours';\n/**\n * This class manages the interactions of legend.\n * @export\n * @class LegendFireBolt\n * @extends {Firebolt}\n */\nexport class LegendFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.initializeSideEffects();\n }\n\n getPropagationSelectionSet (selectionSet) {\n return selectionSet[0];\n }\n\n propagate (behaviourName, payload, selectionSet) {\n propagate(this, behaviourName, selectionSet, {\n payload\n });\n }\n\n getAddSetFromCriteria (criteria) {\n let values;\n let uniqueIds;\n const type = this.context.constructor.type();\n\n if (criteria === null) {\n uniqueIds = null;\n } else if (type === STEP) {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n } else if (type === GRADIENT) {\n uniqueIds = [];\n } else {\n values = criteria;\n if (values instanceof Array) {\n values = values.slice(1, criteria.length);\n uniqueIds = [...new Set([].concat(...values))];\n } else {\n values = Object.values(criteria);\n uniqueIds = this.context.data().filter(d => values.indexOf(d.range) !== -1).map(d => d.id);\n }\n }\n return {\n uids: uniqueIds,\n model: null\n };\n }\n\n getFullData () {\n return null;\n }\n\n onDataModelPropagation () {\n return (data, config) => {\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const payloadFn = payloadGenerator[config.action] || payloadGenerator.__default;\n const payload = payloadFn(data, config);\n const { propagationSourceId } = config;\n const propagationInf = {\n propagate: false,\n data,\n sourceId: propagationSourceId\n };\n const isActionSourceSame = config.sourceId === this.id();\n if (!isActionSourceSame && config.action === HIGHLIGHT) {\n // @todo make it configurable\n this.dispatchBehaviour(HIGHLIGHT, payload, propagationInf);\n }\n };\n }\n\n data () {\n return this.context.metaData();\n }\n\n id () {\n return `legend-${this.context._id}`;\n }\n\n sourceCanvas () {\n return this.context.canvasAlias();\n }\n\n shouldApplySideEffects () {\n return true;\n }\n\n /**\n * Finds out if a deselected legend item is hovered\n * @param {string} behaviour type of interaction\n * @return {bool} true if highlight should work on the legend item, false otherwise\n */\n shouldApplyHighlightEffect (behaviour) {\n const highlightedSet = this.getEntryExitSet(HIGHLIGHT);\n const selectionSet = this.getEntryExitSet(SELECT);\n\n if (highlightedSet && selectionSet) {\n const currentHighlightedSet = highlightedSet.mergedEnter.uids;\n const deselectedLegendItemsSet = selectionSet.mergedExit.uids;\n\n // Find out if the currently highlighted item is also the deselected item\n if (behaviour === HIGHLIGHT) {\n const disabledLegendItems = [].concat(...currentHighlightedSet).filter(\n id => [].concat(...deselectedLegendItemsSet).includes(id)\n );\n if (disabledLegendItems.length) {\n return false;\n }\n }\n }\n return true;\n }\n}\n","import {\n getEvent,\n getD3Drag\n } from 'muze-utils';\n\n/**\n * Adds dragging action to the target element.\n * @param {firebolt} firebolt firebolt\n * @param {SVGElement} targetEl Element on which brushing action is needed.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const drag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let endPos = {};\n let payload;\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const boundingBox = context.measurement().gradientDimensions;\n const axisType = context.config().align === 'horizontal' ? 'x' : 'y';\n const axisScale = context.axis().source().scale();\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n\n targetEl.call(d3Drag().on('start', () => {\n const event = getEvent();\n startPos = {\n x: event.x,\n y: event.y\n };\n }).on('drag', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }).on('end', () => {\n const event = getEvent();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n endPos.x = Math.max(0, Math.min(endPos.x, boundingBox.width));\n endPos.y = Math.max(0, Math.min(endPos.y, boundingBox.height));\n if (startPos[axisType] === endPos[axisType]) {\n payload = {\n criteria: null\n };\n } else {\n payload = {\n criteria: {\n [context.fieldName()]: [axisScale.invert(startPos[axisType] + rangeShifter * 2),\n axisScale.invert(endPos[axisType] + rangeShifter * 2)].sort((a, b) => a - b)\n }\n };\n }\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n }));\n};\n\nexport default drag;\n","import { getEvent } from 'muze-utils';\n\n/**\n * Adds mouse interactions to target element.\n * @param {Firebolt} Firebolt instance of firebolt.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\n/* istanbul ignore next */ const hover = firebolt => (targetEl) => {\n const dispatchBehaviour = function (args) {\n const event = getEvent();\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n firebolt.triggerPhysicalAction('hover', payload);\n event.stopPropagation();\n };\n\n targetEl.on('mouseover', dispatchBehaviour)\n .on('mousemove', dispatchBehaviour)\n .on('mouseout', () => {\n const event = getEvent();\n firebolt.triggerPhysicalAction('hover', {\n criteria: null\n });\n event.stopPropagation();\n });\n};\n\nexport default hover;\n","/**\n * Adds mouse interactions to target element.\n * @param {VisualUnit} instance instance of visual unit.\n * @param {SVGElement} targetEl Element on which the event listeners will be attached.\n * @param {Array} behaviours Array of behaviours\n */\nconst click = firebolt => (targetEl, behaviours) => {\n const dispatchBehaviour = function (args) {\n const payload = {\n criteria: firebolt.context.getCriteriaFromData(args)\n };\n behaviours.forEach(behaviour => firebolt.dispatchBehaviour(behaviour, payload));\n };\n\n targetEl.on('click', dispatchBehaviour);\n};\n\nexport default click;\n","import drag from './drag';\nimport hover from './hover';\nimport click from './click';\nimport * as ACTIONNAMES from '../../enums/actions';\n\nexport const physicalActions = {\n [ACTIONNAMES.DRAG]: drag,\n [ACTIONNAMES.HOVER]: hover,\n [ACTIONNAMES.CLICK]: click\n};\n\n","export const DRAG = 'drag';\nexport const HOVER = 'hover';\nexport const SELECTIONDRAG = 'selectiondrag';\nexport const CLICK = 'click';\n","import {\n getMousePos,\n getEvent,\n getD3Drag\n } from 'muze-utils';\nimport { HEIGHT, WIDTH, HORIZONTAL } from '../../enums/constants';\n\nconst getSelectionCriteria = (subject, axis, measures) => {\n let criteria = [];\n const {\n axisScale,\n axisType\n } = axis;\n const {\n startPos,\n endPos,\n selectionBoxMeasure,\n drawingInfMeasure,\n offset\n } = measures;\n const subjectStartPoint = subject[axisType];\n\n if (startPos[axisType] === endPos[axisType]) {\n criteria = [];\n } else if (subjectStartPoint + selectionBoxMeasure >= drawingInfMeasure + offset) {\n criteria = [axisScale.invert(drawingInfMeasure + offset - selectionBoxMeasure),\n axisScale.invert(drawingInfMeasure + offset)];\n } else if (subjectStartPoint - offset < offset) {\n criteria = [axisScale.invert(offset * 2), axisScale.invert(selectionBoxMeasure + offset * 2)];\n } else {\n criteria = [axisScale.invert(subjectStartPoint), axisScale.invert(subjectStartPoint + selectionBoxMeasure)];\n }\n axisType === 'x' ? criteria : criteria.reverse();\n return criteria;\n};\n\nexport const selectionBoxDrag = firebolt => (targetEl, behaviours) => {\n let startPos = {};\n let payload;\n const endPos = {};\n const d3Drag = getD3Drag();\n const context = firebolt.context;\n const axisScale = context.axis().source().scale();\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n const drawingInfMeasure = context.measurement().gradientDimensions[axisType === 'x' ?\n WIDTH : HEIGHT];\n const offset = axisScale.range()[axisType === 'x' ? 0 : 1];\n const measures = {\n drawingInfMeasure,\n offset\n };\n let subject = {};\n\n targetEl.call(d3Drag().on('start', function () {\n const event = getEvent();\n startPos = getMousePos(this, event.sourceEvent);\n subject = event.subject;\n }).on('drag', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n\n subject.x += event.dx;\n subject.y += event.dy;\n\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(subject, { axisScale, axisType }, measures);\n\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }).on('end', () => {\n const event = getEvent();\n const selectionBoxMeasure = subject[axisType === 'x' ? WIDTH : HEIGHT];\n measures.selectionBoxMeasure = selectionBoxMeasure;\n measures.startPos = startPos;\n measures.endPos = endPos;\n const criteria = getSelectionCriteria(event, { axisScale, axisType }, measures);\n payload = {\n criteria: {\n [context.fieldName()]: criteria\n },\n fadeOut: true,\n config: {\n transition: {\n duration: 200\n }\n }\n };\n firebolt.dispatchBehaviour(behaviours[0], payload);\n }));\n};\n\n","import { getSymbol, mergeRecursive } from 'muze-utils';\nimport {\n CENTER,\n LEFT,\n RIGHT\n} from '../enums/constants';\n\nexport const ALIGN = {\n HORIZONTAL: 'horizontal',\n VERTICAL: 'vertical'\n};\n\nexport const DEFAULT_MEASUREMENT = {\n height: 30,\n width: 30,\n maxWidth: Infinity,\n maxHeight: Infinity,\n padding: 2,\n margin: 2,\n marginHorizontal: 3,\n paddingRight: 4,\n border: 1\n};\n\nexport const LEGEND_TITLE = {\n text: '',\n orientation: (pos) => {\n if (pos === LEFT || pos === RIGHT) {\n return LEFT;\n } return CENTER;\n }\n};\n\nexport const DEFAULT_CONFIG = {\n buffer: {\n [ALIGN.HORIZONTAL]: 10,\n [ALIGN.VERTICAL]: 10\n },\n classPrefix: 'muze',\n borderStyle: 'solid',\n borderColor: 'rgba(0,0,0,0)',\n formatter: {\n bounds: {\n lower: 'less than',\n upper: 'more than'\n }\n },\n marker: {\n text: {\n formatter: data => data\n }\n },\n item: {\n text: {\n orientation: 'right',\n width: 10,\n formatter: (val, i, data, context) => context.valueParser()(val)\n },\n icon: {\n className: 'legend-icon',\n height: 20,\n width: 20,\n color: 'rgba(192,192,192,0.6)',\n type: 'square'\n }\n }\n // stops: 5\n};\n\nconst tempConfig = mergeRecursive({}, DEFAULT_CONFIG);\n\nconst ITEM_FORMATTER = {\n item: {\n text: {\n formatter: val => `${val[0]} - ${val[1]}`\n }\n }\n};\n\nexport const STEP_DEFAULT_CONFIG = mergeRecursive(tempConfig, ITEM_FORMATTER);\n\n/**\n * Creates a map of pre defined icons\n *\n * @param {string} icon Accepts a icon name like 'square', 'cross', 'diamond' etc\n * @return {Object} icon object which can be used to draw the icons\n */\nexport const ICON_MAP = (icon) => {\n if (icon && typeof (icon) === 'string') {\n return getSymbol(icon);\n } return icon;\n};\n\nexport const LEGEND_MARKER_PROPS = {\n size: 8,\n BUFFER: 4,\n ROTATE_HORIZONTAL: 180,\n ROTATE_VERTICAL: 90,\n shape: 'triangle'\n};\n","import { makeElement } from 'muze-utils';\nimport { SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { CLASSPREFIX, HEIGHT, WIDTH, HORIZONTAL, RECT } from '../../../enums/constants';\nimport { SELECTIONBOX } from '../../../enums/side-effects';\nimport { selectionBoxDrag } from '../../physical/selection-box-drag';\nimport { LEGEND_MARKER_PROPS } from '../../../legend/defaults';\nimport './styles.scss';\n\n/**\n * This class is used to create a selection box which is used by visual unit for brushing and\n * selection in the canvas.\n * @class SelectionBox\n */\n/* istanbul ignore next */ class SelectionBox extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._graphicElems = {\n rect: null\n };\n }\n\n static formalName () {\n return SELECTIONBOX;\n }\n\n /**\n * It returns the default configuration needed by selectionbox.\n * @return {Object} Default configuration of the selection box.\n */\n static defaultConfig () {\n return {\n className: 'legend-selection-box',\n classPrefix: CLASSPREFIX\n };\n }\n\n /**\n * Draws the selectionbox with the specified dimensions.\n */\n /* istanbul ignore next */ apply (selectionSet, payload) {\n let x;\n let y;\n let width;\n let height;\n const firebolt = this.firebolt;\n const context = firebolt.context;\n const config = this.config();\n const axis = context.axis().source();\n const className = `${config.classPrefix}-${config.className}`;\n const { criteria } = payload;\n const { rect } = this._graphicElems;\n\n if (criteria === null) {\n rect && rect.remove();\n return this;\n }\n\n const domain = criteria[firebolt.context.fieldName()];\n const axisScale = axis.scale();\n const range = domain ? [axis.getScaleValue(domain[0]), axis.getScaleValue(domain[1])] : [];\n\n const axisType = context.config().align === HORIZONTAL ? 'x' : 'y';\n\n const gradientDimension = firebolt.context.measurement().gradientDimensions[axisType === 'x' ?\n HEIGHT : WIDTH];\n\n const rangeShifter = axisScale.range()[axisType === 'x' ? 0 : 1];\n const legendGradContainer = context.getDrawingContext().svgContainer;\n const legendSelGroup = makeElement(legendGradContainer, 'g', [1],\n `${config.classPrefix}-selection-box-group`);\n\n const { size, BUFFER } = LEGEND_MARKER_PROPS;\n if (firebolt.context.config().align === HORIZONTAL) {\n x = range[0] - rangeShifter || 0;\n y = size + BUFFER;\n width = range[1] - range[0] || 0;\n height = gradientDimension;\n } else {\n x = size + BUFFER;\n y = range[1] - rangeShifter || 0;\n height = range[0] - range[1] || 0;\n width = gradientDimension;\n }\n const enterFn = function (el) {\n selectionBoxDrag(firebolt)(el, ['brush']);\n };\n\n const selBox = makeElement(legendSelGroup, RECT, [{ domain, x, y, width, height }], className,\n { enter: enterFn });\n selBox.attr('y', y)\n .attr('x', x)\n .attr(WIDTH, width)\n .attr(HEIGHT, height);\n this._graphicElems.rect = selBox;\n return this;\n }\n}\n\nexport default SelectionBox;\n\n","import { selectElement } from 'muze-utils';\n\nexport const strategies = (firebolt) => {\n const context = firebolt.context;\n const classed = (set, className, change) => {\n const classPrefix = context.config().classPrefix;\n const uids = set.uids.map(d => d[0]);\n selectElement(context.mount())\n .selectAll(`.${classPrefix}-legend-columns`)\n .filter(d => uids.indexOf(d.id) !== -1)\n .selectAll('div')\n .classed(className, change);\n };\n\n return {\n fade: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-fadeout`, false);\n } else {\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-fadeout`, true);\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-fadeout`, false);\n }\n },\n brighten: (set, config = {}) => {\n const classPrefix = context.config().classPrefix;\n if (!set.mergedEnter.length && !set.mergedExit.length) {\n classed(set.completeSet, config.className || `${classPrefix}-legend-brighten`, false);\n } else {\n classed(set.mergedEnter, config.className || `${classPrefix}-legend-brighten`, true);\n classed(set.mergedExit, config.className || `${classPrefix}-legend-brighten`, false);\n }\n }\n };\n};\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { strategies } from './strategies';\nimport { Highlighter } from '../../../enums/side-effects';\n\nexport default class LegendHighlighter extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._strategies = strategies(this.firebolt);\n this._strategy = 'brighten';\n }\n\n static formalName () {\n return Highlighter;\n }\n\n apply (selectionSet, payload, options = {}) {\n const strategy = this._strategies[options.strategy || this._strategy];\n\n strategy(selectionSet, this);\n }\n}\n","import { GenericSideEffect } from '@chartshq/muze-firebolt';\nimport { makeElement, getSymbol } from 'muze-utils';\nimport { Marker } from '../../../enums/side-effects';\nimport { CLASSPREFIX, HORIZONTAL } from '../../../enums/constants';\nimport { LEGEND_MARKER_PROPS } from '../../../legend/defaults';\nimport './styles.scss';\n\nconst SYMBOL_PADDING = (Math.sqrt(3) * 3);\nconst AXIS_STROKE = 1;\nconst MARKER_BUFFER = 10;\n\nconst createTextCell = (className, labelManagerRef, cells) => {\n const { TextCell } = cells;\n const cell = new TextCell(\n {\n type: 'text',\n className: `${className}-text`\n }, {\n labelManager: labelManagerRef()\n }).config({ maxLines: 1 });\n cell._minTickDiff = { height: 0, width: 0 };\n\n return cell;\n};\n\nconst getRelativePosition = (canvas, legendContainer) => ({\n top: legendContainer.getBoundingClientRect().top - canvas.getBoundingClientRect().top,\n left: legendContainer.getBoundingClientRect().left - canvas.getBoundingClientRect().left\n});\nexport default class LegendMarker extends GenericSideEffect {\n constructor (...params) {\n super(...params);\n this._graphicElements = {\n markerElement: null,\n legendmarkerTextContainer: null,\n legendmarkerText: null\n };\n }\n\n static formalName () {\n return Marker;\n }\n\n /**\n * It returns the default configuration needed by legend-marker.\n * @return {Object} Default configuration of the legend-marker.\n */\n static defaultConfig () {\n return {\n className: 'legend-marker',\n classPrefix: CLASSPREFIX,\n size: LEGEND_MARKER_PROPS.size,\n shape: LEGEND_MARKER_PROPS.shape\n };\n }\n\n apply (selectionSet, payload) {\n const className = `${this.config().classPrefix}-${this.config().className}`;\n if (payload.criteria && payload.criteria.length === 2) {\n const physicalAction = function () {\n // Register physical action on marker gere\n };\n const firebolt = this.firebolt;\n const labelManager = firebolt.context.labelManager;\n const context = firebolt.context;\n const legendConfig = firebolt.context.config();\n const legendScale = firebolt.context.scale();\n const { formatter: pointerTextFormatter } = legendConfig.marker.text;\n const config = this.config();\n const axis = context.axis().source();\n const dm = context.metaData();\n const domain = legendScale.domain();\n\n const range = payload.criteria[0] ? axis.getScaleValue(payload.criteria[1]) : 0;\n\n const legendGradContainer = context.getDrawingContext().svgContainer;\n\n const isFractional = payload.criteria[1][0] % 1 !== 0;\n\n const lableConfig = {\n top: 0,\n left: 0,\n labelText: isFractional ? payload.criteria[1][0].toFixed(2) : payload.criteria[1][0]\n };\n\n const { top, left } = getRelativePosition(context._canvasMount, legendGradContainer.node());\n const { oriTextHeight, oriTextWidth } = labelManager().getSmartText(lableConfig.labelText);\n let x;\n let y;\n let rotateAngle;\n\n const { size, shape } = config;\n if (context.config().align === HORIZONTAL) {\n x = range - (Math.sqrt(size / SYMBOL_PADDING)) + AXIS_STROKE;\n y = 5;\n rotateAngle = LEGEND_MARKER_PROPS.ROTATE_HORIZONTAL;\n lableConfig.top = top + y - 3 * MARKER_BUFFER;\n lableConfig.left = x + left - (oriTextWidth / 2) - (MARKER_BUFFER / 2);\n } else {\n y = range + Math.sqrt(size / (2 * SYMBOL_PADDING)) - AXIS_STROKE;\n x = 5;\n rotateAngle = LEGEND_MARKER_PROPS.ROTATE_VERTICAL;\n lableConfig.top = top + y - (3 * MARKER_BUFFER - 2) + (oriTextHeight / 2);\n lableConfig.left = x + left - oriTextWidth - MARKER_BUFFER;\n }\n\n const legendmarkerGroup = makeElement(legendGradContainer,\n 'g',\n [1],\n `${config.classPrefix}-${config.className}-group`);\n\n if (!this._graphicElements.markerElement) {\n this._graphicElements.markerElement = makeElement(legendmarkerGroup,\n 'path', [{ value: null }], className, { enter: physicalAction });\n }\n\n if (!this._graphicElements.legendmarkerTextContainer) {\n this._graphicElements.legendmarkerTextContainer = makeElement(\n context._canvasMount,\n 'div',\n [1],\n `${className}-text-container`);\n this._graphicElements.legendmarkerText = makeElement(\n this._graphicElements.legendmarkerTextContainer,\n 'div',\n [1],\n `${className}-text`);\n }\n const textElement = createTextCell(className, labelManager, context._cells);\n this._graphicElements.markerElement\n .data([{ value: payload.criteria }])\n .attr('transform', `translate(${x},${y}) rotate(${rotateAngle})`)\n .attr('d', getSymbol(shape).size(size * size)())\n .classed(`${className}-show`, true)\n .classed(`${className}-hide`, false);\n\n // pointer label formatter\n textElement.source(pointerTextFormatter(lableConfig.labelText, domain, dm));\n\n textElement.render(this._graphicElements.legendmarkerText.node());\n this._graphicElements.legendmarkerText\n .attr('style', `top: ${lableConfig.top}px; left:${lableConfig.left}px`)\n .classed(`${className}-show`, true)\n .classed(`${className}-hide`, false);\n } else if (this._graphicElements.markerElement && this._graphicElements.legendmarkerText) {\n this._graphicElements.markerElement\n .data([{ value: null }])\n .classed(`${className}-show`, false)\n .classed(`${className}-hide`, true);\n this._graphicElements.legendmarkerText\n .classed(`${className}-show`, false)\n .classed(`${className}-hide`, true);\n }\n }\n\n}\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n data: {},\n fieldName: {},\n legendContainer: {},\n measurement: {\n sanitization: (context, value) => {\n const measurement = mergeRecursive(context._measurement, value);\n ['padding', 'border', 'margin'].forEach((space) => {\n measurement[space] = Math.min(measurement[space] > 0 ? measurement[space] : 0,\n measurement.maxWidth * 0.1, measurement.maxHeight * 0.1);\n });\n return measurement;\n }\n },\n logicalSpace: {},\n metaData: {\n onset: (context, value) => context.firebolt().attachPropagationListener(value)\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.resetLogicalSpace();\n context.store().commit('range', value);\n return value;\n }\n },\n scale: {},\n smartTicks: {},\n store: {},\n title: {\n sanitization: (context, value) => mergeRecursive(context._title || {}, value)\n },\n labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\n }\n};\n","import { makeElement, FieldType, getReadableTicks } from 'muze-utils';\n\nimport {\n SCALE_FUNCTIONS,\n WIDTH,\n HEIGHT,\n LEFT,\n RIGHT,\n TOP,\n BOTTOM,\n MAXWIDTH,\n CENTER,\n HORIZONTAL,\n POSITION_ALIGNMENT_MAP\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\n */\nexport const getScaleInfo = (scale) => {\n const scaleType = scale.constructor.type();\n const domain = scale.uniqueValues();\n const steps = scale.config().stops || 1;\n const scaleFn = SCALE_FUNCTIONS[scaleType];\n\n return { scaleType, domain, steps, scaleFn };\n};\n\n/**\n * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n return getReadableTicks(domain, steps);\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} text\n * @param {*} measurement\n * @param {*} classPrefix\n */\nexport const titleCreator = (container, title, measurement, config) => {\n const { orientation } = config.item.text;\n let textAlign = LEFT;\n const { alignment, maxWidth, width, height, border, padding } = measurement;\n\n if (orientation === TOP || orientation === BOTTOM || alignment === HORIZONTAL) {\n textAlign = CENTER;\n }\n const titleWidth = Math.min(maxWidth, width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}px`)\n .style(HEIGHT, `${height}px`)\n .style('border-bottom', `${border}px ${config.borderStyle} ${config.borderColor}`)\n .style('text-align', title.orientation instanceof Function ?\n title.orientation(config.position) : title.orientation);\n return makeElement(titleContainer, 'td', [1], `${config.classPrefix}-legend-title-text`)\n .style(WIDTH, `${titleWidth}px`)\n .style(MAXWIDTH, `${maxWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${padding}px`)\n .text(title.text)\n .style('text-align', textAlign)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getMaxMeasures = (data, prop, labelManager) => {\n let maxHeight = -Infinity;\n let maxWidth = -Infinity;\n\n data.forEach((item) => {\n const value = prop ? item[prop] : item;\n const space = labelManager.getOriSize(value);\n maxHeight = Math.max(space.height + 2, maxHeight);\n maxWidth = Math.max(space.width + 2, maxWidth);\n });\n\n return { height: maxHeight, width: maxWidth };\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const formattedData = formatter(value, index, context.metaData(), context);\n const { height, width } = labelManager.getOriSize(formattedData);\n space[index] = { height, width };\n });\n return space;\n};\n\n/**\n *\n *\n * @param {*} textOrientation\n * @param {*} effPadding\n * @param {*} titleSpace\n *\n * @memberof Legend\n */\nexport const computeItemSpaces = (config, measures, data) => {\n let totalHeight = 0;\n let totalWidth = 0;\n let maxItemSpaces = {\n width: 0, height: 0\n };\n const {\n effPadding,\n titleWidth,\n labelSpaces,\n titleHeight,\n maxWidth\n } = measures;\n const {\n item,\n align\n } = config;\n const {\n icon,\n text\n } = item;\n const textOrientation = text.orientation;\n const itemSpaces = [];\n const iconSpaces = [];\n let maxIconWidth = 0;\n labelSpaces.forEach((labelSpace, i) => {\n const itemSpace = { width: 0, height: 0 };\n const iconSpace = { width: 0, height: 0 };\n const datum = data[i] || {};\n // Compute each legend item height/width\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n // Get label, icon and item widths\n labelSpace.width += effPadding;\n iconSpace.width = (datum.size ? 2 * Math.sqrt(datum.size / Math.PI) : icon.width) + effPadding;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n itemSpace.width = labelSpace.width + maxIconWidth;\n\n // Get label, icon and item heights\n labelSpace.height = Math.max(labelSpace.height, icon.height) + effPadding;\n iconSpace.height = labelSpace.height;\n itemSpace.height = labelSpace.height;\n } else {\n // Get label, icon and item widths\n labelSpace.width = Math.max(labelSpace.width, datum.size ? 2 * Math.sqrt(datum.size / Math.PI)\n : icon.width) + effPadding;\n iconSpace.width = labelSpace.width;\n itemSpace.width = labelSpace.width;\n maxIconWidth = Math.max(iconSpace.width, maxIconWidth);\n\n // Get label, icon and item heights\n labelSpace.height += effPadding;\n iconSpace.height = icon.height + effPadding;\n itemSpace.height = labelSpace.height + iconSpace.height;\n }\n // Compute height and width of legend for each alignment\n if (align === 'horizontal') {\n totalHeight = Math.max(totalHeight, itemSpace.height);\n } else {\n totalHeight += itemSpace.height;\n totalWidth = Math.max(totalWidth, itemSpace.width, titleWidth);\n }\n maxItemSpaces = {\n width: Math.max(itemSpace.width, maxItemSpaces.width),\n height: Math.max(itemSpace.height, maxItemSpaces.height)\n };\n itemSpaces.push(itemSpace);\n iconSpaces.push(iconSpace);\n });\n\n itemSpaces.forEach((itemSpace, i) => {\n if (align === 'horizontal') {\n itemSpace.height = totalHeight;\n // iconSpaces[i].width = maxIconWidth;\n if (textOrientation === LEFT || textOrientation === RIGHT) {\n labelSpaces[i].height = totalHeight;\n iconSpaces[i].height = totalHeight;\n itemSpaces[i].width = labelSpaces[i].width + iconSpaces[i].width + 2 * effPadding;\n } else {\n labelSpaces[i].width = iconSpaces[i].width;\n itemSpaces[i].width = iconSpaces[i].width;\n labelSpaces[i].width = iconSpaces[i].width;\n }\n totalWidth += itemSpaces[i].width;\n } else {\n itemSpace.width = Math.max(totalWidth, maxWidth);\n if (textOrientation === TOP || textOrientation === BOTTOM) {\n labelSpaces[i].width = totalWidth;\n iconSpaces[i].width = totalWidth;\n maxIconWidth = totalWidth;\n } else {\n const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelWidth + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\n */\nexport const getDomainBounds = (type, scaleInfo, domainInfo) => {\n const {\n scaleFn,\n scaleType,\n scale\n } = scaleInfo;\n const {\n domain,\n domainBounds,\n domainLeg,\n steps\n } = domainInfo;\n const ele = domain[type === 'lower' ? 0 : domain.length - 1];\n const step = steps[type === 'lower' ? 0 : steps.length - 1];\n\n return {\n [scaleType]: scaleType === 'size' ? scale[scaleFn](ele) * scale.getScaleFactor() : scale[scaleFn](ele),\n value: domainBounds[type],\n id: type === 'lower' ? 0 : domainLeg.length + 2,\n range: [ele, step]\n };\n};\n\nexport const prepareSelectionSetData = (data, fieldName, dm) => {\n const fieldType = dm.getFieldsConfig()[fieldName].def.type;\n if (fieldType === FieldType.DIMENSION) {\n return {\n keys: data.reduce((acc, d) => {\n acc[d.rawVal] = {\n uid: d.id,\n dims: [d.rawVal]\n };\n return acc;\n }, {}),\n fields: [fieldName]\n };\n }\n return {\n keys: data.reduce((acc, d) => {\n acc[d.id] = {\n uid: d.id,\n dims: [d.id]\n };\n return acc;\n }, {}),\n fields: [fieldName]\n };\n};\n\nexport const calculateTitleWidth = (measures, titleWidth, config) => {\n const { maxItemSpaces, margin, itemSpaces } = measures;\n const { position, buffer } = config;\n const alignment = POSITION_ALIGNMENT_MAP[position];\n let width = 0;\n\n if (alignment === HORIZONTAL) {\n const localBuffer = buffer[alignment];\n width = itemSpaces.reduce((acc, cur) => acc + cur.width + localBuffer, 0);\n } else if (maxItemSpaces.width < titleWidth) {\n width = titleWidth + 2 * margin;\n } else {\n width = maxItemSpaces.width;\n }\n return width;\n};\n","import {\n makeElement,\n selectElement,\n getUniqueId,\n getSmartComputedStyle,\n generateGetterSetters,\n mergeRecursive\n} from 'muze-utils';\nimport * as legendBehaviours from '../firebolt/behavioural';\n\nimport { LegendFireBolt } from '../firebolt/legend-firebolt';\nimport { actionBehaviourMap } from '../firebolt/action-behaviour-map';\nimport { physicalActions } from '../firebolt/physical';\nimport * as sideEffects from '../firebolt/side-effects';\nimport { behaviourEffectMap } from '../firebolt/behaviour-effect-map';\nimport { VALUE, PATH, RIGHT, LEFT, TOP, BOTTOM, POSITION_ALIGNMENT_MAP } from '../enums/constants';\nimport { PROPS } from './props';\nimport { DEFAULT_MEASUREMENT, DEFAULT_CONFIG, LEGEND_TITLE } from './defaults';\nimport {\n getItemMeasures,\n titleCreator,\n computeItemSpaces,\n prepareSelectionSetData,\n calculateTitleWidth\n} from './legend-helper';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class SimpleLegend\n */\nexport default class SimpleLegend {\n\n /**\n * Creates an instance of Legend.\n * @param {Object} dependencies Set of dependencies required by the legend\n * @memberof Legend\n */\n constructor (dependencies) {\n const { interactions } = dependencies.registry;\n this._data = [];\n this._metaData = [];\n this._mount = null;\n this._fieldName = null;\n this._title = Object.assign({}, LEGEND_TITLE);\n this._metaData = null;\n this._labelManager = dependencies.labelManager;\n this._cells = dependencies.cells;\n this._id = getUniqueId();\n this._measurement = Object.assign({}, this.constructor.defaultMeasurement());\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n\n const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n\n generateGetterSetters(this, PROPS);\n this._computedStyle = getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-item-info`);\n\n this._firebolt = new LegendFireBolt(this, {\n behavioural: Object.assign({}, interactions.behaviours.get(), legendBehaviours),\n physical: physicalActions,\n physicalBehaviouralMap: actionBehaviourMap\n }, sideEffects, behaviourEffectMap);\n }\n\n id () {\n return this._id;\n }\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new SimpleLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof SimpleLegend\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENT;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof SimpleLegend\n */\n firebolt (...params) {\n if (params.length) {\n return this;\n }\n return this._firebolt;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return PATH;\n }\n\n canvasAlias (...alias) {\n if (alias.length) {\n this._canvasAlias = alias[0];\n return this;\n }\n return this._canvasAlias;\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n mount (...params) {\n if (params.length) {\n this._mount = params[0];\n this.render();\n return this;\n }\n return this._mount;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n const {\n item,\n classPrefix\n } = this.config();\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${classPrefix}-legend-item-info`));\n return getItemMeasures(this, VALUE, item.text.formatter);\n }\n\n /**\n * Sets the height and width of a legend based on provided max\n * height and width and based on its contents\n *\n * @return {Instance} Current instance\n * @memberof Legend\n */\n setLegendMeasures () {\n const {\n width,\n height,\n maxWidth,\n maxHeight,\n padding,\n margin,\n border\n } = this.measurement();\n const {\n align\n } = this.config();\n\n // Effective padding, margin and padding\n const effPadding = padding * 2;\n const effBorder = border * 2;\n const effMargin = margin * 2;\n\n this.data(this.dataFromScale());\n // Get space occupied by title\n const titleSpace = this.getTitleSpace();\n const titleHeight = titleSpace.height > 0 ? titleSpace.height + effPadding : 0;\n const titleWidth = titleSpace.width + effPadding;\n\n // Get space occupied by labels\n const labelSpaces = this.getLabelSpaces(effPadding, align);\n const {\n totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth\n } = computeItemSpaces(this.config(),\n { effPadding, titleWidth, labelSpaces, titleHeight, maxWidth, maxHeight }, this.data());\n\n this.measurement({\n width: Math.max(totalWidth, width) + effMargin + effBorder,\n height: Math.max(totalHeight, height) + effMargin + effBorder,\n labelSpaces,\n iconSpaces,\n itemSpaces,\n maxItemSpaces,\n maxIconWidth,\n titleSpaces: {\n width: Math.min(maxWidth, this.measurement().width) - effMargin - effBorder,\n height: titleHeight\n }\n });\n return this;\n }\n\n /**\n * Returns the space occupied by the legend title\n *\n * @return {Object} Space occupied by title\n * @memberof Legend\n */\n getTitleSpace () {\n this._labelManager.setStyle(getSmartComputedStyle(selectElement('body'),\n `${this.config().classPrefix}-legend-title`));\n return this._labelManager.getOriSize(this.title().text ? this.title().text : '');\n }\n\n /**\n * Creates the title for the legend\n *\n * @param {DOM} container Container made for the title\n * @return {Selection} Title and it's node\n * @memberof Legend\n */\n renderTitle (container) {\n const { titleSpaces, border, padding, maxWidth } = this.measurement();\n\n const width = calculateTitleWidth(\n this.measurement(),\n this._labelManager.getOriSize(this._title.text).width,\n this.config()\n );\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\n border,\n padding,\n borderStyle,\n borderColor,\n alignment: POSITION_ALIGNMENT_MAP[this.config().position]\n }, this.config());\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const {\n classPrefix,\n borderStyle,\n borderColor,\n position\n } = this.config();\n const {\n border,\n marginHorizontal,\n maxHeight,\n height,\n width,\n maxWidth\n } = this.measurement();\n let {\n margin\n } = this.measurement();\n const legendContainer = makeElement(selectElement(this.mount()), 'div', [1], `${classPrefix}-legend-box`);\n let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n margin = marginHorizontal;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n margin = marginHorizontal;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\n }\n legendContainer.classed(`${classPrefix}-legend-box-${this._id}`, true);\n legendContainer.style('float', 'left');\n\n const widthBox = calculateTitleWidth(\n this.measurement(),\n this._labelManager.getOriSize(this._title.text).width,\n this.config()\n );\n\n const titleWidth = Math.min(maxWidth, widthBox);\n width < titleWidth ? selectElement(this.mount()).style('width', `${titleWidth}px`) : null;\n // set height and width\n legendContainer.style('width', `${titleWidth}px`)\n .style('height', `${Math.min(maxHeight, height)}px`)\n .style(`${marginPosition}`, `${margin}px`)\n .style('border', `${border}px ${borderStyle} ${borderColor}`);\n this.legendContainer(legendContainer.node());\n\n // create title\n this.renderTitle(legendContainer);\n firebolt.createSelectionSet(prepareSelectionSetData(this.data(), this.fieldName(), this.metaData()));\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n const type = this.metaData().getData().schema[0].type;\n if (type === 'measure') {\n return {\n [fieldName]: data.range\n };\n }\n return [[fieldName], [data.rawVal]];\n }\n\n getRangeFromIdentifiers ({ fields, entrySet }) {\n const data = this.data();\n const idRangeMap = data.reduce((acc, v) => {\n acc[v.id] = v;\n return acc;\n }, {});\n\n return fields.reduce((acc, v) => {\n acc[v] = entrySet.reduce((ranges, id) => {\n if (id in idRangeMap) {\n ranges.push(idRangeMap[id].range);\n }\n return ranges;\n }, []);\n return acc;\n }, {});\n }\n\n setParentInfo (info) {\n this._canvasMount = info.canvasRoot;\n }\n}\n","import {\n LEFT,\n RIGHT,\n START,\n END,\n TOP,\n BOTTOM,\n HORIZONTAL,\n VERTICAL,\n CENTER,\n SHAPE,\n VALUE\n} from '../enums/constants';\n\nconst legendOrientation = {\n [HORIZONTAL]: {\n datasets: data => ({\n row: [1],\n column: data\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n itemSpaces,\n width\n } = measurement;\n const {\n buffer\n } = config;\n return {\n row: {\n width: `${width + itemSpaces.length * buffer[HORIZONTAL] || 1}px`,\n padding: `${0}px`\n },\n column: {\n width: (d, i) => `${itemSpaces[i].width + buffer[HORIZONTAL]}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, height } = measurement;\n return {\n iconHeight: height,\n iconWidth: maxItemSpaces.width,\n stepPadding: {\n horizontal: true,\n vertical: false\n }\n };\n }\n },\n [VERTICAL]: {\n datasets: data => ({\n row: data,\n column: d => [d]\n }),\n itemContainerMeasures: (measurement, config) => {\n const {\n width\n } = measurement;\n const { padding } = config;\n\n return {\n row: {\n width: `${width}px`,\n padding: `${padding}px`\n },\n column: {\n width: `${width}px`,\n padding: `${0}px`\n }\n };\n },\n getStepSpacesInfo: (measurement) => {\n const { maxItemSpaces, width } = measurement;\n return {\n iconHeight: maxItemSpaces.height,\n iconWidth: width,\n stepPadding: {\n horizontal: false,\n vertical: true\n }\n };\n }\n }\n};\n\nexport const positionConfig = {\n [LEFT]: legendOrientation[VERTICAL],\n [RIGHT]: legendOrientation[VERTICAL],\n [TOP]: legendOrientation[HORIZONTAL],\n [BOTTOM]: legendOrientation[HORIZONTAL]\n};\n\nexport const alignmentMap = {\n [LEFT]: END,\n [RIGHT]: START,\n [TOP]: CENTER,\n [BOTTOM]: CENTER\n};\n\n// Reverses data for step legend\nexport const stepData = data => ({\n [LEFT]: data.reverse(),\n [RIGHT]: data.reverse(),\n [TOP]: data,\n [BOTTOM]: data\n});\n\n// Changes the item layout based on the position of the text\nexport const itemStack = {\n [LEFT]: [VALUE, SHAPE],\n [RIGHT]: [SHAPE, VALUE],\n [TOP]: [VALUE, SHAPE],\n [BOTTOM]: [SHAPE, VALUE]\n};\n","import { makeElement, selectElement, applyStyle } from 'muze-utils';\nimport { ICON_MAP } from './defaults';\nimport { positionConfig, alignmentMap, itemStack } from './position-config';\nimport {\n WIDTH,\n HEIGHT,\n CENTER,\n VALUE,\n RECT,\n LEFT,\n DEFAULTICONSIZE,\n VERTICAL_BUFFER,\n HORIZONTAL_BUFFER,\n HORIZONTAL,\n VERTICAL,\n DEFAULT,\n TOP,\n BOTTOM,\n OPPOSITE_POSITION\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} legendInstance\n * @param {*} align\n *\n */\nexport const getItemContainers = (container, data, legendInstance) => {\n const measurement = legendInstance.measurement();\n const config = legendInstance.config();\n const {\n itemSpaces\n } = measurement;\n const {\n classPrefix,\n position\n } = config;\n const positionObj = positionConfig[position];\n const datasets = positionObj.datasets(data);\n const measures = positionObj.itemContainerMeasures(measurement, config);\n\n const rows = makeElement(container, 'div', datasets.row, `${classPrefix}-legend-row`);\n rows.style(HEIGHT, (d, i) => `${itemSpaces[i].height}px`);\n rows.style(WIDTH, measures.row.width);\n rows.style('padding', measures.row.padding);\n\n const columns = makeElement(rows, 'div', datasets.column, `${classPrefix}-legend-columns`);\n columns.style(WIDTH, measures.column.width);\n columns.style('padding', measures.column.padding);\n\n return columns;\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} classPrefix\n * @param {*} data\n *\n * @memberof DiscreteLegend\n */\nexport const createLegendSkeleton = (context, container, classPrefix, data) => {\n let gradWidth = 0;\n let gradHeight = 0;\n let maxGradHeight = 0;\n let maxGradWidth = 0;\n const measurement = context.measurement();\n const {\n margin,\n border,\n titleSpaces,\n width,\n height,\n maxWidth,\n maxHeight\n } = measurement;\n\n gradHeight = height - (titleSpaces.height + 2 * margin + 2 * border);\n gradWidth = width - (margin * 2 + border * 2);\n\n maxGradHeight = maxHeight - (titleSpaces.height + margin * 2 + border * 2);\n maxGradWidth = maxWidth - (margin * 2 + border * 2);\n\n let legendBody = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n\n legendBody.style(WIDTH, `${gradWidth}px`);\n\n legendBody.style(HEIGHT, `${gradHeight}px`);\n\n legendBody.select(`.${classPrefix}-legend-overflow`).remove();\n // Create a div with scroll when overflow\n if (maxGradWidth && maxGradWidth < gradWidth) {\n legendBody = legendBody.style(WIDTH, `${maxGradWidth}px`).style('overflow-x', 'scroll');\n }\n // Create a div with scroll when overflow\n if (maxGradHeight && maxGradHeight < gradHeight) {\n legendBody.style(HEIGHT, `${maxGradHeight}px`).style('overflow-y', 'scroll');\n }\n\n legendBody = makeElement(legendBody, 'div', [1], `${classPrefix}-legend-overflow`);\n\n const legendItem = getItemContainers(legendBody, data, context);\n return { legendItem };\n};\n\n/**\n * Creates legend item based on alignment and text orientation\n *\n * @param {Selection} container Point where items are to be mounted\n * @return {Instance} Current instance\n * @memberof Legend\n */\nexport const createItemSkeleton = (context, container) => {\n const {\n classPrefix,\n item\n } = context.config();\n const textOrientation = item.text.orientation;\n const stack = itemStack[textOrientation];\n const itemSkeleton = makeElement(container, 'div', (d, i) => stack.map(e => [e, d[e], d.color, d.size,\n d.value, context.fieldName(), i]), `${classPrefix}-legend-item-info`);\n\n const alignClass = alignmentMap[textOrientation];\n\n itemSkeleton.classed(alignClass, true);\n return { itemSkeleton };\n};\n\n/**\n *\n *\n * @param {*} measureType\n * @param {*} stepColorCheck\n */\nexport const applyItemStyle = (item, measureType, stepColorCheck, context) => {\n const {\n padding,\n labelSpaces,\n iconSpaces,\n maxIconWidth\n } = context.measurement();\n\n const { align } = context.config().align;\n\n const diff = stepColorCheck ? -padding * 2 : 0;\n\n if (item[0] === VALUE) {\n return `${labelSpaces[item[6]][measureType]}px`;\n }\n\n if (measureType === 'width' && !stepColorCheck && align === VERTICAL) {\n return `${maxIconWidth}px`;\n } else if (align === HORIZONTAL) {\n return `${maxIconWidth}px`;\n }\n return `${iconSpaces[item[6]][measureType] - diff}px`;\n};\n\n/**\n *\n *\n * @param {*} str\n *\n */\nconst checkPath = (str) => {\n if (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(str) && /[\\dz]$/i.test(str) && str.length > 4) {\n return true;\n }\n return false;\n};\n\n/**\n *\n *\n * @param {*} d\n * @param {*} elem\n */\nconst createShape = function (d, elem, defaultIcon) {\n const groupElement = elem;\n // const { shape, size, update } = d;\n const shape = d[1] || defaultIcon;\n const defaultIconSize = DEFAULTICONSIZE[shape] || DEFAULTICONSIZE[DEFAULT];\n const size = d[3] || defaultIconSize * Math.PI;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n return createShape(d, elem);\n });\n } else if (shape instanceof Element) {\n let newShape = shape.cloneNode(true);\n\n if (newShape.nodeName.toLowerCase() === 'img') {\n const src = newShape.src || newShape.href;\n newShape = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n newShape.setAttribute('href', src);\n }\n const shapeElement = selectElement(newShape);\n shapeElement.attr('transform', `scale(${size / 100})`);\n return selectElement(groupElement.node().appendChild(newShape));\n } else if (typeof shape === 'string') {\n let pathStr;\n if (checkPath(shape)) {\n pathStr = shape;\n } else {\n pathStr = ICON_MAP(shape).size(size)();\n }\n return makeElement(groupElement, 'path', data => [data]).attr('d', pathStr);\n }\n d[1] = 'circle';\n return createShape(d, elem, 'circle');\n};\n\n/**\n * Returns the icon of the legend item\n *\n * @param {Object} datum Data property attached to the item\n * @param {number} width width of the item\n * @param {number} height height of the item\n * @return {Object|string} returns the path string or the string name of the icon\n * @memberof Legend\n */\nexport const getLegendIcon = (datum, width, height, defaultIcon) => {\n const icon = ICON_MAP(datum[1]);\n\n if (icon) {\n return icon.size(datum[3] || Math.min(width, height) * Math.PI);\n }\n return ICON_MAP(datum[3] ? 'circle' : defaultIcon).size(datum[3] || Math.min(width, height) * Math.PI);\n};\n\n/**\n *\n *\n */\nexport const renderIcon = (icon, container, datum, context) => {\n const {\n classPrefix,\n iconHeight,\n padding,\n color,\n iconWidth,\n align\n } = context;\n\n let { maxIconWidth } = context;\n\n if (align === HORIZONTAL) {\n maxIconWidth = iconWidth + 2 * padding;\n }\n const svg = makeElement(container, 'svg', f => [f], `${classPrefix}-legend-icon-svg`)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .style(WIDTH, `${Math.ceil(maxIconWidth)}px`)\n .style(HEIGHT, `${iconHeight}px`);\n\n const transalate = maxIconWidth / 2 - padding;\n\n if (icon !== RECT) {\n const group = makeElement(svg, 'g', [datum[1]], `${classPrefix}-legend-icon`);\n createShape(datum, group, icon)\n .attr('transform', `translate(${transalate} ${iconHeight / 2})`)\n .attr('fill', datum[2] || color)\n .attr('stroke', datum[2] || color);\n } else {\n makeElement(svg, RECT, [datum[1]], `${classPrefix}-legend-icon`)\n .attr('x', 0)\n .attr('y', 0)\n .attr(WIDTH, maxIconWidth)\n .attr(HEIGHT, iconHeight)\n .attr('fill', datum[2] || color);\n }\n};\n\n/**\n * Renders the items in the legend i.e, icon and text\n *\n * @param {DOM} container Point where item is to be mounted\n * @memberof Legend\n */\nexport const renderDiscreteItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n classPrefix,\n shape,\n align\n } = context.config();\n const {\n maxIconWidth,\n padding,\n margin,\n border\n } = context.measurement();\n const {\n width: iconWidth,\n height: iconHeight,\n color,\n className\n } = item.icon;\n\n const textOrientation = item.text.orientation;\n const formatter = item.text.formatter;\n\n labelManager.useEllipsesOnOverflow(true);\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, false, context),\n height: d => applyItemStyle(d, HEIGHT, false, context),\n 'text-align': CENTER,\n padding: `${padding}px`\n });\n\n const marginHorizontalBuffer = HORIZONTAL_BUFFER;\n\n const bufferCondition = textOrientation === TOP || textOrientation === BOTTOM\n || !padding || !margin || !border;\n\n const marginVerticalBuffer = bufferCondition ? 0 : VERTICAL_BUFFER;\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = context.metaData();\n const position = OPPOSITE_POSITION[textOrientation] || LEFT;\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\n .style(`padding-${position}`, '0px')\n .style(`margin-${position}`, `${align === HORIZONTAL ? marginHorizontalBuffer : marginVerticalBuffer}px`);\n } else {\n // const icon = getLegendIcon(d, iconWidth, iconHeight, type);\n selectElement(this).classed(`${classPrefix}-${className}`, true);\n selectElement(this).classed(`${classPrefix}-${className}-${i}`, true);\n renderIcon(shape, selectElement(this), d, {\n classPrefix,\n // iconWidth,\n iconWidth: 2 * Math.sqrt(d[3] / Math.PI) || iconWidth,\n iconHeight,\n maxIconWidth,\n padding,\n color,\n align\n });\n }\n });\n};\n\n/**\n* Renders the items in the legend i.e, icon and text\n*\n* @param {DOM} container Point where item is to be mounted\n* @memberof Legend\n*/\nexport const renderStepItem = (context, container) => {\n const labelManager = context._labelManager;\n const {\n item,\n position,\n classPrefix\n } = context.config();\n const {\n maxItemSpaces,\n maxIconWidth,\n padding\n } = context.measurement();\n const {\n width,\n height,\n color\n } = item.icon;\n const {\n formatter\n } = item.text;\n\n labelManager.useEllipsesOnOverflow(true);\n const { iconHeight, iconWidth, stepPadding } = positionConfig[position].getStepSpacesInfo({\n maxItemSpaces, height, width\n });\n\n applyStyle(container, {\n width: d => applyItemStyle(d, WIDTH, stepPadding.horizontal, context),\n height: d => applyItemStyle(d, HEIGHT, stepPadding.vertical, context),\n 'text-align': 'center',\n padding: `${padding}px`\n });\n\n labelManager.setStyle(context._computedStyle);\n const dataArr = context.metaData();\n const data = context.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n const formattedData = formatter([data[d[6]].range[0], data[d[6]].range[1]], i, dataArr, context);\n selectElement(this).text(formattedData);\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal,\n getReadableTicks,\n InvalidAwareTypes\n} from 'muze-utils';\nimport SimpleLegend from './simple-legend';\nimport { DISCRETE, LEFT, SIZE } from '../enums/constants';\nimport { getScaleInfo } from './legend-helper';\nimport { createLegendSkeleton, createItemSkeleton, renderDiscreteItem } from './renderer';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class DiscreteLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new DiscreteLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn, steps } = getScaleInfo(scale);\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n let domainForLegend = [];\n if (scaleType === SIZE && type === FieldType.MEASURE) {\n domainForLegend = steps instanceof Array ? steps : getReadableTicks(domain, domain.length);\n } else if (subtype === DimensionSubtype.TEMPORAL) {\n domainForLegend = [...new Set(field.data())];\n } else {\n domainForLegend = [...new Set(domain)];\n }\n\n const len = domainForLegend.length;\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.MEASURE) {\n value = (+domainForLegend[i]).toFixed(0);\n const nextVal = domainForLegend[i + 1] ? +domainForLegend[i + 1] : +value;\n range = [value, i === len - 1 ? nextVal.toFixed(0) : nextVal.toFixed(0) - 1];\n } else {\n let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\n };\n }).filter(d => d.value !== null);\n\n domainForLegend = scaleType === SIZE ? domainForLegend.sort((a, b) => a[scaleType] - b[scaleType])\n : domainForLegend.sort((a, b) => {\n const domainValue =\n !(a.value instanceof InvalidAwareTypes || a.value instanceof InvalidAwareTypes)\n ? a.value.localeCompare(b.value)\n : 1;\n return domainValue;\n });\n return domainForLegend;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const data = this.data();\n\n const { classPrefix } = this.config();\n const legendContainer = super.render(this.mount());\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n renderDiscreteItem(this, itemSkeleton);\n\n legendContainer.selectAll('div')\n .filter((datum, i, allSelections) => !allSelections[i].classList.contains(`${classPrefix}-legend-body`))\n .style('float', LEFT);\n\n firebolt.mapActionsAndBehaviour();\n return legendContainer;\n }\n}\n","import { makeElement, applyStyle } from 'muze-utils';\nimport { ContinousAxis } from '@chartshq/muze-axis';\nimport { BOTTOM, RIGHT } from '../enums/constants';\nimport { ALIGN, LEGEND_MARKER_PROPS } from './defaults';\nimport '../styles.scss';\n\n/**\n *\n *\n * @param {*} data\n *\n */\nexport const getGradientDomain = (data) => {\n if (typeof data[0].value === 'number') {\n return data.reduce((accumulator, currentValue) =>\n [Math.min(currentValue.value, accumulator[0]), Math.max(currentValue.value, accumulator[1])],\n [Number.MAX_VALUE, Number.MIN_VALUE]);\n }\n return data.map(e => e.value);\n};\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} domain\n *\n */\nexport const makeLinearGradient = (container, data, domain, id) => {\n const defs = makeElement(container, 'defs', [1]);\n const linearGradient = makeElement(defs, 'linearGradient', [1])\n .attr('id', `linear-gradient-${id}`)\n .attr('x1', '0%')\n .attr('y2', '0%');\n\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\n .attr('stop-color', d => d.color);\n return linearGradient;\n};\n\n/**\n * Creates an axis cell with a linear axis for computing space and\n * creating gradient legend\n *\n * @return {AxisCell} Instance of Axis Cell for the gradient axis\n * @memberof Legend\n */\nexport const createAxis = (context) => {\n const data = context.data();\n const { align } = context.config();\n const AxisCell = context._cells.AxisCell;\n const newAxis = new ContinousAxis({\n id: `legend-${context._id}`,\n orientation: align === ALIGN.VERTICAL ? RIGHT : BOTTOM,\n style: context._computedStyle,\n nice: false,\n showAxisName: false,\n tickValues: data.map(d => d.value),\n fixedBaseline: false,\n labels: {\n rotation: null\n }\n }, { labelManager: context._labelManager });\n\n newAxis.domain(getGradientDomain(data));\n newAxis.range([1, 1]);\n return new AxisCell().source(newAxis).config({\n margin: { left: 0, bottom: 0, top: 0, right: 0 }\n });\n};\n\n/**\n *\n *\n * @param {*} container\n * @param {*} data\n * @param {*} classPrefix\n *\n * @memberof GradientLegend\n */\nconst createLegendSkeleton = (container, classPrefix, data, id) => {\n const domain = getGradientDomain(data);\n const legendContainer = makeElement(container, 'div', [1], `${classPrefix}-legend-body`);\n const legendGradSvg = makeElement(legendContainer, 'svg', [1], `${classPrefix}-gradient`);\n const legendGradCont = makeElement(legendGradSvg, 'g', [1], `${classPrefix}-gradient-group`);\n const linearGradient = makeLinearGradient(legendGradSvg, data, domain, id);\n const legendRect = makeElement(legendGradCont, 'rect', [1], `${classPrefix}-gradient-rect`);\n\n return {\n legendContainer,\n legendGradCont,\n legendGradSvg,\n linearGradient,\n legendRect\n };\n};\n\n/**\n * Renders the axis for the gradient\n *\n * @param {Selection} container Point where axis is to be mounted\n * @param {number} height Height for axis\n * @param {number} width Width for axis\n * @memberof Legend\n */\nexport const renderAxis = (context, container, height, width) => {\n const axis = context.axis();\n\n axis.source().config({\n tickFormat: (val, i) => context.config().item.text.formatter(val, i, context.metaData(), context)\n });\n axis.setAvailableSpace(width, height);\n axis.render(container.node());\n axis.source().render();\n};\n\n/**\n * Renders gradient legends\n *\n * @param {Selection} container Point where the legend is to be appended\n * @memberof GradientLegend\n */\nexport const renderGradient = (context, container) => {\n let gradHeight = 0;\n let gradWidth = 0;\n const {\n align,\n classPrefix,\n item\n } = context.config();\n const data = context.data();\n // Create the skeleton for the legend\n const {\n legendContainer,\n legendGradSvg,\n legendGradCont,\n linearGradient,\n legendRect\n } = createLegendSkeleton(container, classPrefix, data, context._id);\n const labelDim = context.axis().source().getAxisDimensions().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (margin * 2 + border * 2));\n\n const { size: markerSize, BUFFER } = LEGEND_MARKER_PROPS;\n const markerWithBuffer = markerSize + BUFFER;\n\n if (align === ALIGN.HORIZONTAL) {\n gradientDimensions.height = item.icon.height;\n gradientDimensions.width = gradWidth - 2 * padding - labelDim.width / 2;\n linearGradient.attr('x2', '100%').attr('y1', '0%');\n legendGradCont.attr('transform', `translate( ${labelDim.width / 2} ${markerWithBuffer})`);\n renderAxis(context, legendContainer, gradHeight - item.icon.height - padding, gradWidth - 2 * padding - 1);\n\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}px`,\n width: `${Math.min(width, maxWidth)}px`,\n padding: `${padding}px`\n });\n\n legendRect.attr('height', gradientDimensions.height);\n legendRect.attr('width', gradientDimensions.width - labelDim.width / 2);\n } else {\n gradientDimensions.height = gradHeight - 2 * padding - labelDim.height / 2;\n gradientDimensions.width = item.icon.width;\n linearGradient.attr('x2', '0%').attr('y1', '100%');\n legendGradCont.attr('transform', `translate(${markerWithBuffer} ${labelDim.height / 2})`);\n renderAxis(\n context,\n legendContainer,\n gradHeight - 2 * padding - 1,\n gradWidth - (gradientDimensions.width + markerWithBuffer) - padding * 2\n );\n\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}px`,\n padding: `${padding}px`\n });\n legendRect.attr('height', gradientDimensions.height - labelDim.height / 2);\n legendRect.attr('width', gradientDimensions.width);\n }\n\n // Apply Styles to the legend plot area\n applyStyle(legendGradSvg, {\n height: `${gradientDimensions.height + markerWithBuffer}px`,\n width: `${gradientDimensions.width + markerWithBuffer}px`\n });\n\n // Apply styles to the legend rect\n applyStyle(legendRect, {\n fill: `url(#linear-gradient-${context._id})`\n });\n legendGradSvg.attr('height', gradientDimensions.height + markerWithBuffer);\n legendGradSvg.attr('width', gradientDimensions.width + markerWithBuffer);\n\n context.measurement({\n gradientDimensions\n });\n context._legendGradientSvg = legendGradSvg;\n return context;\n};\n","import SimpleLegend from './simple-legend';\nimport { getScaleInfo, getInterpolatedData, getInterpolatedArrayData } from './legend-helper';\nimport { GRADIENT, LEFT, SIZE } from '../enums/constants';\nimport { HIGHLIGHT } from '../enums/behaviours';\nimport { Marker } from '../enums/side-effects';\nimport { renderGradient, createAxis } from './gradient-helper';\nimport '../styles.scss';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class GradientLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new GradientLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\n * @memberof GradientLegend\n */\n axis (...axis) {\n if (axis.length) {\n this._axis = axis[0];\n return this;\n }\n return this._axis;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainForLegend[0] = domain[0];\n }\n domainForLegend = [...domainForLegend, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainForLegend.push(domain[1]);\n }\n // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\n }\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n return domainForLegend.map((ele, i) => {\n const value = domainForLegend[i];\n return {\n [scaleType]: scaleType === SIZE ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](ele),\n value: +value.toFixed(1),\n id: i\n };\n }).filter(d => d.value !== null);\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces (effPadding) {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const axis = createAxis(this);\n const axisSpace = axis.getLogicalSpace();\n const space = { width: axisSpace.width - effPadding, height: axisSpace.height - effPadding };\n const axisDomainLength = axis.source().domain().length;\n const labelSpaces = new Array(axisDomainLength).fill(space);\n\n this.axis(axis);\n return labelSpaces;\n }\n\n /**\n *\n *\n *\n * @memberof GradientLegend\n */\n getDrawingContext () {\n return {\n svgContainer: this._legendGradientSvg\n };\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const legendContainer = super.render(this.mount());\n // create Legend\n renderGradient(this, legendContainer);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n firebolt.mapSideEffects({\n [HIGHLIGHT]: [Marker]\n });\n return legendContainer;\n }\n\n /**\n *\n *\n * @param {*} data\n *\n * @memberof SimpleLegend\n */\n getCriteriaFromData (data) {\n return [[this.fieldName()], [data.value]];\n }\n\n getRangeFromIdentifiers ({ fields, criteria }) {\n return fields.reduce((range, v) => {\n range[v] = criteria[v];\n return range;\n }, {});\n }\n}\n","import SimpleLegend from './simple-legend';\nimport {\n getScaleInfo,\n getInterpolatedData,\n getItemMeasures\n} from './legend-helper';\nimport {\n createLegendSkeleton,\n createItemSkeleton,\n renderStepItem\n} from './renderer';\nimport { STEP, RECT, LEFT, SIZE, HORIZONTAL } from '../enums/constants';\nimport { stepData } from './position-config';\nimport '../styles.scss';\nimport { STEP_DEFAULT_CONFIG, DEFAULT_MEASUREMENT } from './defaults';\n\n/**\n * Creates a Legend from the axes of a canvas\n *\n * @param {Object} dependencies : legend data\n * @class Legend\n */\nexport default class StepLegend extends SimpleLegend {\n\n /**\n * Initializes an instance of the class\n *\n * @static\n * @param {Object} dependencies Set of dependencies required by the legend\n * @return {Instance} returns a new instance of Legend\n * @memberof Legend\n */\n static create (dependencies) {\n return new StepLegend(dependencies);\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof StepLegend\n */\n static defaultConfig () {\n STEP_DEFAULT_CONFIG.buffer[HORIZONTAL] = 0;\n return STEP_DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n const isFraction = ele => ele % 1 !== 0;\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\n\n if (steps instanceof Array) {\n if (domain[0] < steps[0]) {\n domainLeg[0] = domain[0];\n }\n domainLeg = [...domainLeg, ...steps];\n if (domain[domain.length - 1] > steps[steps.length - 1]) {\n domainLeg.push(domain[1]);\n }\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n } else {\n domainLeg = getInterpolatedData(domain, steps, scaleParams);\n }\n\n domainLeg = [...new Set(domainLeg)].sort((a, b) => a - b);\n domainLeg = domainLeg.map((ele, i) => {\n let value = null;\n let range;\n if (i < domainLeg.length - 1) {\n const left = isFraction(ele) ? ele.toFixed(1) : ele;\n\n const numRight = +domainLeg[i + 1];\n const right = isFraction(numRight) ? numRight.toFixed(1) : numRight;\n\n value = `${left} - ${right}`;\n range = [left, right];\n } else if (domainLeg.length === 1) {\n value = isFraction(ele) ? ele.toFixed(1) : ele;\n\n const numRight = +domainLeg[i + 1];\n const right = isFraction(numRight) ? numRight.toFixed(1) : numRight;\n range = [value, right];\n }\n\n return {\n [scaleType]: scaleType === SIZE\n ? scale[scaleFn](ele) * scale.getScaleFactor()\n : scale[scaleFn](ele),\n value,\n id: i + 1,\n range\n };\n }).filter(d => d.value !== null);\n\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\n * @memberof Legend\n */\n getLabelSpaces () {\n this.config({\n item: {\n text: {\n orientation: this.config().position\n }\n }\n });\n const {\n item\n } = this.config();\n const stepItemBuffer = DEFAULT_MEASUREMENT.padding * 2;\n return getItemMeasures(this, 'range', item.text.formatter, stepItemBuffer);\n }\n\n /**\n *\n *\n *\n * @memberof Legend\n */\n elemType () {\n return RECT;\n }\n\n /**\n * Render the legend with its title\n *\n * @param {DOM} mountPoint Point where the legend and title are to be appended\n * @return {Instance} Current instance of legend\n * @memberof Legend\n */\n render () {\n const firebolt = this.firebolt();\n const { classPrefix, position } = this.config();\n const data = stepData(this.data())[position];\n\n const legendContainer = super.render(this.mount());\n\n // create Legend\n const { legendItem } = createLegendSkeleton(this, legendContainer, classPrefix, data);\n const { itemSkeleton } = createItemSkeleton(this, legendItem);\n\n renderStepItem(this, itemSkeleton);\n legendContainer.selectAll('div').style('float', LEFT);\n firebolt.mapActionsAndBehaviour();\n return legendContainer;\n }\n\n getCriteriaFromData (data) {\n const fieldName = this.fieldName();\n return {\n [fieldName]: data.range\n };\n }\n}\n","import { GradientLegend, DiscreteLegend, StepLegend } from '@chartshq/muze-legend';\n\n/**\n * Contants to be used as attr\n */\nexport const ROWS = 'rows';\nexport const COLUMNS = 'columns';\nexport const DATA = 'data';\nexport const COLOR = 'color';\nexport const SHAPE = 'shape';\nexport const SIZE = 'size';\nexport const DETAIL = 'detail';\nexport const LAYERS = 'layers';\nexport const TRANSFORM = 'transform';\nexport const INITIALIZED = 'isInitialized';\nexport const SOURCE = 'source';\nexport const WIDTH = 'width';\nexport const HEIGHT = 'height';\nexport const PADDING = 'padding';\nexport const BORDER = 'border';\nexport const MARGIN = 'margin';\nexport const CONFIG = 'config';\nexport const MOUNT = 'mount';\nexport const CANVAS_UPDATED = 'canvasUpdated';\nexport const CLASSPREFIX = 'classPrefix';\nexport const POLICIES = '_policies';\nexport const LEGEND = 'legend';\nexport const TITLE = 'title';\nexport const SUB_TITLE = 'subtitle';\nexport const RESOLVE = 'resolve';\nexport const DISCRETE = 'discrete';\nexport const STEP_COLOR = 'step-color';\nexport const GRADIENT = 'gradient';\nexport const LINEAR = 'linear';\nexport const ORDINAL = 'ordinal';\nexport const MUZE_PREFIX = 'muze';\n\nexport const TITLE_TEMPLATE_NOT_ALLOWED_TAGS = [\n 'script',\n 'style'\n];\n\nexport const ICON_SHAPES = {\n SQUARE: 'square',\n CIRCLE: 'circle'\n};\n\nexport const IS_POINT_MAP = {\n true: ICON_SHAPES.CIRCLE,\n false: ICON_SHAPES.SQUARE\n};\n\nexport const LEGEND_TYPE_MAP = {\n [`${ORDINAL}-${true}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SIZE}`]: DiscreteLegend,\n [`${ORDINAL}-${true}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${COLOR}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${ORDINAL}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${SIZE}`]: DiscreteLegend,\n [`${LINEAR}-${false}-${SHAPE}`]: DiscreteLegend,\n [`${LINEAR}-${true}-${COLOR}`]: StepLegend,\n [`${LINEAR}-${false}-${COLOR}`]: GradientLegend\n};\n\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const GROUP = 'group';\nexport const LAYOUT = 'layout';\nexport const RETINAL = 'retinal';\nexport const DIMENSION = 'dimension';\nexport const MEASURE = 'measure';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const POINT = 'point';\nexport const MESSAGE = 'message';\nexport const ERROR_MESSAGE = 'Insufficient data or incorrect configurations';\nexport const COMMON_INTERACTION = 'common';\nexport const INDIVIDUAL_INTERACTION = 'individual';\n","import { ComposedVars, SimpleVariable } from '@chartshq/visual-group';\nimport { TITLE_TEMPLATE_NOT_ALLOWED_TAGS } from './constants';\n\n/**\n * This method creates a new composed variable instance from multiple variables. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\n * @return {ComposedVars} Instance of composed variable\n */\nexport const share = (...vars) => new ComposedVars(...vars.map(variable => new SimpleVariable(variable)));\n\n/**\n *\n *\n * @param {*} node\n *\n */\nfunction treeShakeNode (node) {\n if (node.nodeType !== Node.ELEMENT_NODE) { return; }\n\n if (TITLE_TEMPLATE_NOT_ALLOWED_TAGS.indexOf(node.tagName.toLowerCase()) !== -1) {\n node.parentNode.removeChild(node);\n } else {\n for (const childNode of node.childNodes) {\n treeShakeNode(childNode);\n }\n }\n}\n\n/**\n * A string template tagged function which sanitizes input html formatted string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\n * @return {Function} Returns a function which returns the sanitized html string.\n */\nexport function html (strings, ...exps) {\n let htmlCode = '';\n const expLn = exps.length;\n let i = 0;\n\n for (; i < expLn; ++i) {\n htmlCode += strings[i] + exps[i];\n }\n htmlCode += strings[i];\n\n const frag = document.createDocumentFragment();\n const wrapper = document.createElement('div');\n\n frag.appendChild(wrapper);\n wrapper.innerHTML = htmlCode;\n\n treeShakeNode(wrapper);\n const { innerHTML } = wrapper;\n\n return () => innerHTML;\n}\n","import { mergeRecursive, CommonProps } from 'muze-utils';\n\nconst defaultPolicy = (registrableComponents) => {\n const aliases = registrableComponents.map(comp => comp.alias());\n return {\n behaviours: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n },\n sideEffects: {\n '*': (propagationPayload) => {\n const propagationCanvas = propagationPayload.sourceCanvas;\n return propagationCanvas ? aliases.indexOf(propagationCanvas) !== -1 : true;\n }\n }\n };\n};\n\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\n */\n enableCrossInteractivity (policy = {}) {\n const registrableComponents = this._registrableComponents;\n const mergedPolicy = mergeRecursive(mergeRecursive({}, defaultPolicy(registrableComponents)), policy);\n\n registrableComponents.forEach((canvas) => {\n canvas.firebolt().crossInteractionPolicy(mergedPolicy);\n });\n\n return this;\n }\n}\n\nexport const actionModel = (() => new ActionModel())();\n","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`,\n baseFontLimit: 16,\n upperFontLimit: 24,\n baseSizeLimit: 100,\n upperSizeLimit: 300,\n fractionImage: 0.8,\n fractionChild: 0.7\n};\n\nexport const CANVAS = 'canvas';\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\n * This is the local options semantics based on which setters getters are created and reactivity is initiated.\n * This local object is only valid for Canvas.\n * Canvas merges global and local object both to the model\n *\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n *\n * @module LocalOptions\n */\n\nexport const localOptions = {\n [ROWS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLUMNS]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [COLOR]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SHAPE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [SIZE]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n sanitization: (config) => {\n if (typeof config === 'string' || !config) {\n return {\n field: config\n };\n }\n return config;\n }\n }\n },\n [DETAIL]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n\n [LAYERS]: {\n value: [],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Array'\n }\n },\n [TRANSFORM]: {\n value: null,\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object'\n }\n }\n};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([title, titleConfig]) => {\n let t = title;\n if (typeof title === 'string' || !title) {\n t = () => title;\n }\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return [t, mergeRecursive(defConfig, titleConfig)];\n }\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([subtitle, subtitleConfig]) => {\n let sub = subtitle;\n if (typeof subtitle === 'string' || !subtitle) {\n sub = () => subtitle;\n }\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return [sub, mergeRecursive(defConfig, subtitleConfig)];\n }\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","import { COMMON_INTERACTION } from './constants';\n\nexport const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffects: {\n tooltip: COMMON_INTERACTION\n },\n behaviours: {\n highlight: COMMON_INTERACTION,\n select: COMMON_INTERACTION,\n brush: COMMON_INTERACTION,\n filter: COMMON_INTERACTION\n },\n tooltip: {\n\n }\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\n },\n legend: {\n position: 'right',\n color: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n shape: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n },\n size: {\n show: true,\n padding: 1,\n margin: 3,\n border: 1,\n height: 20,\n width: 20\n }\n },\n showHeaders: false,\n minWidth: 100,\n minHeight: 100,\n facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\n border: {\n style: 'solid',\n color: '#d6d6d6',\n width: 2,\n collapse: true,\n spacing: 0\n },\n autoGroupBy: {\n disabled: false\n },\n invalidValues: {},\n sort: {}\n};\n\nexport const EXCLUDE_CONFIG_KEYS = ['sort'];\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\n }\n}\n","/**\n * This file exports constants that will be used to\n * create the state store of the table layout.\n */\n/**\n * The index of top, bottom and center in the matrix\n */\nexport const VIEW_INDEX = {\n top: 0,\n center: 1,\n bottom: 2\n};\n\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\n};\n\n/**\n * The width of the grid suppied by the user.\n */\nexport const GRID_WIDTH = 'width';\n\n/**\n * The height of the grid supplied by the user.\n */\nexport const GRID_HEIGHT = 'height';\n\n/**\n * The border for the grid\n */\nexport const BORDER = 'border';\n\n /**\n * The index of the first visible row in view matrix.\n */\nexport const ROW_POINTER = 'rowPointer';\n\n/**\n * The index of the first visible column in the view matrix.\n */\nexport const COLUMN_POINTER = 'columnPointer';\n\n/**\n * Flag to specify whether row sizes should be equal.\n */\nexport const ROW_SIZE_IS_EQUAL = 'isRowSizeEqual';\n\n/**\n * Flag to specify whether column sizes are equal.\n */\nexport const COLUMN_SIZE_IS_EQUAL = 'isColumnSizeEqual';\n\n/**\n * Field to store an array an of the widths of visible columns.\n * @computed\n */\nexport const COLUMN_WIDTHS = 'visibleColumnWidths';\n\n/**\n * Field to store an array of heights of visible rows.\n * @computed\n */\nexport const ROW_HEIGHTS = 'visibleRowHeights';\n\n/**\n * Field to store the width of the left matrix.\n * @computed\n */\nexport const LEFT_MATRIX_WIDTH = 'leftMatrixWidth';\n\n/**\n * Field to store the width of the right matrix.\n * @computed\n */\nexport const RIGHT_MATRIX_WIDTH = 'rightMatrixWidth';\n\n/**\n * Field to store the height of the top matrix.\n * @computed\n */\nexport const TOP_MATRIX_HEIGHT = 'topMatrixHeight';\n\n/**\n * Field to store the height of the bottom matrix.\n * @computed\n */\nexport const BOTTOM_MATRIX_HEIGHT = 'bottomMatrixHeight';\n\n/**\n * The dom element to render the layout inside.\n */\nexport const MOUNT_POINT = 'mount';\n\n/**\n * The id attribute of the left table element.\n */\nexport const LEFT_TABLE_ID = 'grid-left';\n\n/**\n * The id attribute of the right table element.\n */\nexport const RIGHT_TABLE_ID = 'grid-right';\n\n/**\n * The id attribute of the top table.\n */\nexport const TOP_TABLE_ID = 'grid-top';\n\n/**\n * The id attribute of the bottom table.\n */\nexport const BOTTOM_TABLE_ID = 'grid-bottom';\n\n/**\n * The id attribute of the center table.\n */\nexport const CENTER_TABLE_ID = 'grid-center';\n\n/**\n * The id attribute of the top div.\n */\nexport const TOP_DIV_ID = 'muze-div-top';\n\n/**\n * The id attribute of the bottom div.\n */\nexport const BOTTOM_DIV_ID = 'muze-div-bottom';\n\n/**\n * The id attribute of the center div.\n */\nexport const CENTER_DIV_ID = 'muze-div-center';\n\n/**\n * Field that indicates if the row configuration has changed\n */\nexport const HAVE_ROWS_CHANGED = 'haveRowsChanged';\n\n/**\n * Field that indicates if the column configuration has changed\n */\nexport const HAVE_COLUMNS_CHANGED = 'haveColumnsChanged';\n\n/**\n * Field that indicates if the values configuration for the center matrix has changed\n */\nexport const HAVE_VALUES_CHANGED = 'haveValuesChanged';\n\n/**\n * Field that indicates the width of row matrix\n */\nexport const ROW_MATRIX_WIDTH = 'rowMatrixWidth';\n\n/**\n * Field that indicates the height of row matrix\n */\nexport const COLUMN_MATRIX_HEIGHT = 'columnMatrixHeight';\n\n/**\n * Field that indicates the unit width of layout\n */\nexport const UNIT_WIDTH = 'unitWidth';\n\n/**\n * Field that indicates the unit height of layout\n */\nexport const UNIT_HEIGHT = 'unitHeight';\n\n/**\n * Field that indicates the style object\n */\nexport const STYLE = 'style';\n\n/**\n * Field that indicates the color configuration\n */\nexport const COLOR = 'color';\n\n/**\n * Field that indicates width\n */\nexport const WIDTH = 'width';\n\n/**\n * Field that indicates collpase property for border\n */\nexport const COLLAPSE = 'collapse';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SPACING = 'spacing';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const DISTRIBUTION = 'distribution';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const GUTTERSPACE = 'gutterSpace';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const BREAK_PAGE = 'breakPage';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_ROW_BORDERS = 'showRowBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_COL_BORDERS = 'showColBorders';\n\n/**\n * Field that indicates spacing property for border\n */\nexport const SHOW_VALUE_BORDERS = 'showValueBorders';\n\nexport const HEIGHT = 'height';\nexport const COLUMN = 'column';\nexport const ROW = 'row';\nexport const TOP = 'top';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const CENTER = 'center';\nexport const CLICK = 'click';\nexport const ROW_LEFT = 'rowLeft';\nexport const ROW_RIGHT = 'rowRight';\nexport const COLUMN_BOTTOM = 'colBottom';\nexport const COLUMN_TOP = 'colTop';\nexport const AUTO = 'auto';\nexport const ROW_SPAN = 'rowSpan';\nexport const COL_SPAN = 'colSpan';\nexport const ROW_ROOT = 'rowRoot';\nexport const COLUMN_ROOT = 'columnRoot';\nexport const PRIMARY = 'primary';\nexport const SECONDARY = 'secondary';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser, FieldType } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { BEHAVIOURS } from '@chartshq/muze-firebolt';\nimport { payloadGenerator } from '@chartshq/visual-unit';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID, LEGEND }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\n\n/**\n * Instantiate high level components. Canvas knows what all high level component it has.\n * @nice-to-have dynamic high level components.\n * - Is it even required ?\n * - Reactive to source (canvas) streaming ?\n * @param {*} context Canvas instance\n * @return {Object.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixFacetConfig = (config) => {\n if (config) {\n const isGridLinePresent = {};\n const { border, gridLines } = config;\n if (gridLines) {\n isGridLinePresent.x = !!gridLines.x;\n isGridLinePresent.y = !!gridLines.y;\n }\n const facetsUserConfig = {\n isBorderPresent: border || {},\n isGridLinePresent\n };\n return {\n facetsUserConfig,\n isFacet: false\n };\n }\n return {};\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const excludeKeys = (config, keys) => {\n const emptyValueKeyObject = {};\n keys.forEach((key) => {\n if (config && config[key] && Object.keys(config[key]).length) {\n emptyValueKeyObject[key] = {};\n }\n });\n return emptyValueKeyObject;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const legend = layoutManager.getComponent(LEGEND);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n if (legend) {\n legend.setComponentInfo({ rootNode: parentContainer });\n }\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\n};\n\n/**\n *\n *\n * @memberof Canvas\n */\nexport const dispatchProps = (context) => {\n const lifeCycleManager = context.dependencies().lifeCycleManager;\n lifeCycleManager.notify({ client: context, action: 'beforeupdate' });\n const visualGroup = context.composition().visualGroup;\n\n const allOptions = context._allOptions;\n for (const key in allOptions) {\n const value = context[key]();\n if (value !== null) {\n visualGroup[key] && visualGroup[key](value);\n }\n }\n const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n\n const sanitizedData = visualGroup.getMandatoryFields();\n if (sanitizedData.shouldRender) {\n visualGroup.createMatrices(sanitizedData);\n } else {\n visualGroup.remove();\n }\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n dispatchProps(context);\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nconst applyPropagationPolicy = (firebolt, { behaviours, sideEffects }) => {\n for (const key in behaviours) {\n firebolt.changeBehaviourStateOnPropagation(key, behaviours[key]);\n }\n for (const key in sideEffects) {\n firebolt.changeSideEffectStateOnPropagation(key, sideEffects[key]);\n }\n};\n\nconst isMeasure = fields => fields.every(field => field.type() === FieldType.MEASURE);\n\nconst isSplom = (fields) => {\n const { rowProjections, colProjections } = fields;\n const colProj = colProjections.flat();\n const rowProj = rowProjections.flat();\n\n if (isMeasure(colProj) && isMeasure(rowProj)) {\n return true;\n }\n return false;\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const splom = isSplom(visualGroup.resolver().getAllFields());\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\n valueMatrix.each((cell) => {\n const unitFireBolt = cell.valueOf().firebolt();\n applyPropagationPolicy(unitFireBolt, { behaviours, sideEffects });\n if (splom) {\n unitFireBolt.payloadGenerators({\n [BEHAVIOURS.BRUSH]: (inst, dm, propConfig, facetFields) => payloadGenerator.brush(inst, dm,\n { ...propConfig, ...{ includeMeasures: false } }, facetFields)\n });\n unitFireBolt.sideEffects().selectionBox.config({\n persistent: true\n });\n } else {\n unitFireBolt.payloadGenerators({\n [BEHAVIOURS.BRUSH]: payloadGenerator.brush\n });\n unitFireBolt.sideEffects().selectionBox.config({\n persistent: false\n });\n }\n });\n applyPropagationPolicy(firebolt, { behaviours, sideEffects });\n }\n};\n\n/**\n * Sets the rotation for all x axes if any axis has the rotation config set in the\n * entire view\n *\n * @param {Array} columns Column cells that contain the axes cells\n */\nexport const setLabelRotationForAxes = (context) => {\n let rotation = 0;\n\n const xAxes = context.xAxes() || [];\n\n (() => {\n for (let i = 0; i < xAxes.length; i++) {\n for (let j = 0; j < xAxes[i].length; j++) {\n const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\n * This is the global options semantics based on which setters getters are created and reactivity is initiated.\n * Format\n * PROPERTRY_NAME: {\n * value: // default value of the property,\n * meta: {\n * typeCheck: // The setter value will be checked using this. If the value is function then the setter value\n * // is passed as args.\n * typeExpected: // The output of typecheck action will be tested against this. Truthy value will set the\n * // value to the setter\n * sanitizaiton: // Need for sanitization before type is checked\n * }\n * }\n * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig, fixFacetConfig, excludeKeys } from './canvas/helper';\nimport { DEFAULT_CONFIG, EXCLUDE_CONFIG_KEYS } from './defaults';\n\nexport default {\n data: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel\n }\n },\n width: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n height: {\n value: 0,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitWidth: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n minUnitHeight: {\n value: 50,\n meta: {\n sanitization: intSanitizer,\n typeCheck: Number.isInteger\n }\n },\n config: {\n value: [null, null],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n takesMultipleParams: true,\n sanitization: ([config, auxConfig = {}], oldConfig) => {\n // Stores additional config, if passed\n const { reset = false } = auxConfig;\n let oldConf = {};\n\n // handle the default cases for facet, as it is different to other charts\n const facetDefaultConfig = fixFacetConfig(config);\n config = mergeRecursive(config, facetDefaultConfig);\n\n if (!reset) {\n oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n oldConf = Object.assign(oldConf, excludeKeys(config, EXCLUDE_CONFIG_KEYS));\n }\n\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n\n return fixScrollBarConfig(newConf);\n }\n\n }\n }\n};\n","import { sanitizeIP, mergeRecursive } from 'muze-utils';\nimport { TOP, CENTER, BOTTOM } from '../enums/constants';\n\n/*\n * This is the abstract implementation of the root layout. This takes care of common work which all the layouts\n * has to handle. The common work includes sanitizaion of inputs, update, rerender, dispose etc. This class can't be\n * used directly (as ofcourse this is an abstract implementaiton), the class which is implementing it has to implement\n * the necessary methods and gives its on visual.\n */\n\n/**\n * This class is used to create a generic layout. It can be extended to create layouts\n * of different types\n * @class GenericLayout\n */\nexport default class GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config configuration to be given for the layout\n * @param {Object} dependencies external dependencies.\n *\n * @memberof GenericLayout\n *\n */\n constructor (mountPoint, measurement, config, dependencies) {\n this._config = {};\n this._measurement = {};\n this._matrices = [];\n // External dependencies to be included for the layout. This includes the ext global dependencies like\n // smartlabel which has one single implementation of throughout the page or per isntance\n this._dependencies = dependencies;\n\n this.measurement(measurement);\n this.mountPoint(mountPoint);\n this.config(config);\n }\n\n /**\n * Returns an object which is used to recreate the layout.\n * @return {Object} the serialized components\n */\n serialize () {\n return {\n measurement: this.measurement(),\n config: this.config(),\n matrices: this.matrices()\n };\n }\n\n /**\n * Sets/Gets the config for the layout\n * @param {Object} config configuration for the layout\n * @return {Layout|Object} Gets the Config/ Returns this instance when set\n */\n config (config) {\n if (config) {\n this._config = mergeRecursive(this._config || {}, config);\n this._config.border.width = Math.max(0, this._config.border.width);\n return this;\n }\n return this._config;\n }\n\n /**\n * Sets/Gets the measurement for the layout\n * @param {Object} measurement measurement for the layout\n * @return {Layout|Object} Gets the measurement/ Returns this instance when set\n */\n measurement (measurement) {\n if (measurement) {\n this._measurement = mergeRecursive(this._measurement || {}, measurement);\n\n return this;\n }\n return this._measurement;\n }\n\n /**\n * Sets/Gets the matrices for the layout\n * @param {Object} matrices matrices for the layout\n * @return {Layout|Object} Gets the matrices/ Returns this instance when set\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = sanitizeIP.typeObj([TOP, CENTER, BOTTOM], matrices);\n\n return this;\n }\n return this._matrices;\n }\n\n /**\n * Sets/Gets the matrix for row\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n rowMatrix (matrix) {\n if (matrix) {\n this._rowMatrix = matrix;\n return this;\n }\n return this._rowMatrix;\n }\n\n /**\n * Sets/Gets the matrix for columns\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n columnMatrix (matrix) {\n if (matrix) {\n this._columnMatrix = matrix;\n return this;\n }\n return this._columnMatrix;\n }\n\n /**\n * Sets/Gets the matrix for value\n * @param {Object} matrix matrices for the layout\n * @return {Layout|Object} Gets the matrix/ Returns this instance when set\n */\n centerMatrix (matrix) {\n if (matrix) {\n this._centerMatrix = matrix;\n return this;\n }\n return this._centerMatrix;\n }\n\n /**\n * Sets/Gets the mountPoint for the layout\n * @param {Object} mountPoint mountPoint for the layout\n * @return {Layout|Object} Gets the mountPoint/ Returns this instance when set\n */\n mountPoint (mountPoint) {\n if (mountPoint) {\n this._mountPoint = mountPoint;\n\n return this;\n }\n return this._mountPoint;\n }\n}\n","import * as FieldNames from '../enums/constants';\n\n/**\n * Default configuration of the layout\n * @return {Object} returns the default configuration\n */\nexport const DEFAULT_CONFIGURATION = {\n [FieldNames.BORDER]: {\n [FieldNames.STYLE]: 'solid',\n [FieldNames.COLOR]: '#d6d6d6',\n [FieldNames.WIDTH]: 2,\n [FieldNames.COLLAPSE]: true,\n [FieldNames.SPACING]: 0\n },\n [FieldNames.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\n [FieldNames.GUTTERSPACE]: { rows: [], columns: [] },\n [FieldNames.DISTRIBUTION]: { rows: [], columns: [] },\n [FieldNames.BREAK_PAGE]: { rows: [], columns: [] },\n [FieldNames.ROW_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_SIZE_IS_EQUAL]: false,\n [FieldNames.COLUMN_POINTER]: 0,\n [FieldNames.ROW_POINTER]: 0\n};\n\n/**\n * Default measurements for the layout\n * @return {Object} returns the default measurements\n */\nexport const DEFAULT_MEASUREMENTS = {\n [FieldNames.GRID_WIDTH]: 100,\n [FieldNames.GRID_HEIGHT]: 100,\n [FieldNames.UNIT_WIDTH]: 100,\n [FieldNames.UNIT_HEIGHT]: 100\n};\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n","/**\n * This file exports utility functions that are used across the layout module\n */\nimport { Symbols } from 'muze-utils';\nimport { PRIMARY, SECONDARY, HEIGHT, WIDTH } from '../enums/constants';\n\nconst nest = Symbols.nest;\n/**\n *\n *\n * @param {*} isTransposed\n *\n */\nconst getMeasureInfo = (isTransposed) => {\n if (isTransposed) {\n return {\n firstMeasure: HEIGHT,\n secondMeasure: WIDTH\n };\n }\n return {\n firstMeasure: WIDTH,\n secondMeasure: HEIGHT\n };\n};\n\n/**\n *\n *\n * @param {*} i\n * @param {*} page\n *\n */\nconst findInPage = (i, page) => {\n let count = 0;\n for (const x in page) {\n if (i < page[x]) {\n count = x;\n break;\n }\n }\n return count;\n};\n\n/**\n * Creates a single matrix from two matrices\n *\n * @param {Array} matrix Input matrix\n * @return {Array} Joined matrix\n * @memberof VisualMatrix\n */\nexport const combineMatrices = (matrix, config) => {\n const { isTransposed } = config;\n let joinedMatrix = matrix[0].length > 0 ? matrix[0] : matrix[1];\n if (isTransposed) {\n joinedMatrix = matrix[0].length > 0 ? [...matrix[0]] : [];\n joinedMatrix = matrix[1].length > 0 ? [...joinedMatrix, ...matrix[1]] : joinedMatrix;\n } else {\n joinedMatrix = joinedMatrix.map((row, rowIndex) => {\n let rowData = [];\n if (matrix[0].length > 0) {\n rowData = [...matrix[0][rowIndex]];\n }\n if (matrix[1].length > 0) {\n rowData = [...rowData, ...matrix[1][rowIndex]];\n }\n return rowData;\n });\n }\n return joinedMatrix;\n};\n\n/**\n * Creates a hirachical tree from the context\n *\n * @param {Object} context context for creating tree\n * @return {Object} nested tree\n */\nexport const createTree = (context) => {\n let matrixTree = {};\n let lastLevelKey = 0;\n let facet = PRIMARY;\n const nestFn = nest();\n const keys = [];\n const layoutMatrix = context._layoutMatrix;\n const primaryMatrix = context.primaryMatrix();\n const secondaryMatrix = context.secondaryMatrix();\n const { isTransposed, breakPage } = context.config();\n\n if (!isTransposed) {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix[0].length - 1; i++) {\n keys.push(i);\n }\n keys.push(primaryMatrix[0].length - 1);\n if (facet === SECONDARY || secondaryMatrix.length === 0) {\n lastLevelKey = primaryMatrix[0].length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const keyLength = primaryMatrix.length > 0 ? primaryMatrix[0].length : 0;\n for (let i = secondaryMatrix[0].length - 1; i > 0; i--) {\n keys.push(i + keyLength);\n }\n keys.push(keyLength);\n\n if (facet === PRIMARY) {\n lastLevelKey = keyLength;\n }\n } else {\n lastLevelKey = primaryMatrix.length > 0 ? primaryMatrix[0].length - 1 : 0;\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n matrixTree = nestFn.entries(layoutMatrix);\n } else {\n if (primaryMatrix.length === 0) {\n facet = PRIMARY;\n } else if (secondaryMatrix.length === 0) {\n facet = SECONDARY;\n } else {\n facet = primaryMatrix.length >= secondaryMatrix.length ? PRIMARY : SECONDARY;\n }\n if (primaryMatrix.length > 0) {\n for (let i = 0; i < primaryMatrix.length - 1; i++) {\n keys.push(i);\n }\n // if (facet === PRIMARY) {\n keys.push(primaryMatrix.length - 1);\n // } else {\n if (facet === SECONDARY) {\n lastLevelKey = primaryMatrix.length - 1;\n }\n }\n if (secondaryMatrix.length > 0) {\n const primaryMatrixLength = primaryMatrix.length;\n for (let i = secondaryMatrix.length - 1; i > 0; i--) {\n keys.push(i + primaryMatrixLength);\n }\n // if (facet === SECONDARY) {\n keys.push(primaryMatrixLength);\n // }\n if (facet === PRIMARY) {\n lastLevelKey = primaryMatrixLength;\n }\n }\n keys.forEach((key) => {\n let counter = -1;\n return nestFn.key((d) => {\n counter++;\n return `${d[key].valueOf()}-${findInPage(counter, breakPage)}`;\n });\n });\n let newMatrix = [];\n newMatrix = layoutMatrix[0].map((col, colIndex) => layoutMatrix.map(row => row[colIndex]));\n matrixTree = nestFn.entries(newMatrix);\n }\n return { tree: matrixTree, lastLevelKey };\n};\n\n/**\n * Gives the min measues\n *\n * @param {boolean} isTransposed is column matrix\n * @param {Object} unitMeasures min measures to be given to cells\n * @return {Object} dimension min cell\n */\nexport const getMinMeasures = (isTransposed, unitMeasures) => {\n if (!isTransposed) {\n return {\n height: unitMeasures.height,\n width: 0\n };\n }\n return {\n height: 0,\n width: unitMeasures.width\n };\n};\n\n/**\n * Get the logical space from the tree\n *\n * @param {Node} item tree to be calculated\n * @param {number} measures width and height\n * @param {Array} minMeasures min measures for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} dimension\n */\nexport const getLogicalSpace = (item, measures, minMeasures, maxMeasure = []) => {\n const { firstMeasure, secondMeasure } = measures;\n let firstMeasureValue = 0;\n let secondMeasureValue = 0;\n item.values.forEach((valueArray) => {\n let fMeasure = 0;\n let sMeasure = 0;\n valueArray.forEach((placeholder, colIndex) => {\n placeholder.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\n maxMeasure[colIndex] = Math.max(maxMeasure[colIndex] || 0, space[firstMeasure]);\n fMeasure += +maxMeasure[colIndex];\n });\n secondMeasureValue += sMeasure;\n firstMeasureValue = Math.max(firstMeasureValue, fMeasure);\n item.space = {\n [secondMeasure]: Math.ceil(secondMeasureValue),\n [firstMeasure]: Math.ceil(firstMeasureValue)\n };\n });\n return {\n [secondMeasure]: secondMeasureValue,\n [firstMeasure]: firstMeasureValue\n };\n};\n\n/**\n * Computes the logical spcae taken by the matrix tree\n *\n * @param {*} [item={}] tree to be viewed\n * @param {boolean} [isTransposed=false] is column matrix\n * @param {*} unitMeasures min measues for a cell\n * @param {Array} maxMeasure max measures for a col/row\n * @return {Object} logical space taken\n */\nexport const computeLogicalSpace = (item = {}, config, maxMeasures) => {\n const { isTransposed = false, unitMeasures } = config;\n const { firstMeasure, secondMeasure } = getMeasureInfo(isTransposed);\n const { values } = item;\n const minMeasures = getMinMeasures(isTransposed, unitMeasures);\n\n if (values[0].key) {\n const logicalSpace = { [firstMeasure]: 0, [secondMeasure]: 0 };\n\n values.forEach((valueItem) => {\n // Compute logical space for lowest level\n const space = computeLogicalSpace(valueItem, config, maxMeasures);\n // Set logical space for first measure\n logicalSpace[firstMeasure] = Math.max(logicalSpace[firstMeasure], space[firstMeasure],\n minMeasures[firstMeasure]);\n\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\n\n return getLogicalSpace(item, { firstMeasure, secondMeasure }, minMeasures, maxMeasures);\n};\n\n/**\n * Gives the space taken by a row\n *\n * @param {Array} row matrix array of rows\n * @return {Object} dimension of the row\n */\nexport const spaceTakenByRow = (row) => {\n let height = 0;\n let width = 0;\n row.forEach((col) => {\n const spaces = col.getLogicalSpace();\n height = Math.max(height, spaces.height);\n width += spaces.width;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Gives the space taken by a column\n *\n * @param {Array} matrix column matrix\n * @param {number} colIndex column index\n * @return {Object} dimension of the column\n */\nexport const spaceTakenByColumn = (matrix, colIndex) => {\n let height = 0;\n let width = 0;\n matrix.forEach((row) => {\n const col = row[colIndex];\n const spaces = col.getLogicalSpace();\n width = Math.max(width, spaces.width);\n height += spaces.height;\n });\n return {\n width,\n height\n };\n};\n\n/**\n * Creates different level matrices\n *\n * @param {Object} item matrix tree\n * @param {boolean} isTransposed is column matrix\n * @return {Object} matrix of each level\n */\nexport const createMatrixEachLevel = (item, isTransposed) => {\n if (item.values[0].key) {\n const arr = [];\n item.values.forEach((child) => {\n if (!isTransposed) {\n arr.push(...createMatrixEachLevel(child, isTransposed));\n } else {\n const eachLevel = createMatrixEachLevel(child, isTransposed);\n eachLevel.forEach((e, i) => {\n arr[i] = arr[i] || [];\n arr[i].push(...e);\n });\n }\n });\n item.matrix = arr;\n return arr;\n }\n if (!isTransposed) {\n item.matrix = item.values;\n } else {\n item.matrix = item.values[0].map((col, colIndex) => item.values.map(row => row[colIndex]));\n }\n return item.matrix;\n};\n\n/**\n * Breaks the matrix into two part\n *\n * @param {Array} matrix input matrix\n * @param {boolean} isTransposed is column matrix\n * @param {number} breakPointer point in matrix where it is to be broken\n * @return {Array} two broken matrix\n */\nexport const breakMatrix = (matrix, isTransposed, breakPointer) => {\n const primaryMatrix = [];\n const secondaryMatrix = [];\n if (isTransposed) {\n matrix.forEach((row, rowIndex) => {\n if (rowIndex >= breakPointer) {\n secondaryMatrix.push(row);\n } else {\n primaryMatrix.push(row);\n }\n });\n } else {\n matrix.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n if (columnIndex >= breakPointer) {\n secondaryMatrix[rowIndex] = secondaryMatrix[rowIndex] || [];\n secondaryMatrix[rowIndex].push(column);\n } else {\n primaryMatrix[rowIndex] = primaryMatrix[rowIndex] || [];\n primaryMatrix[rowIndex].push(column);\n }\n });\n });\n }\n return [primaryMatrix, secondaryMatrix];\n};\n\n/**\n * Distributed width returned\n *\n * @param {Object} context context for the width distibution\n * @return {number} distributed widths\n */\nexport const getDistributedWidth = (context, layoutConfig) => {\n const {\n availableWidth,\n width,\n row\n } = context;\n const {\n isDistributionEqual,\n isTransposed,\n distribution\n } = layoutConfig;\n let distSum = 0;\n if (distribution && distribution[0]) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n return row.map((col, colIndex) => {\n const space = col.getLogicalSpace().width;\n let distWidth = (space + (availableWidth - width) * (space / width));\n if (isTransposed) {\n if (distribution.length > 0) {\n distWidth = (availableWidth * distribution[colIndex] / distSum);\n } else if (isDistributionEqual || width === 0) {\n const rowLen = row.length;\n distWidth = (availableWidth / rowLen);\n }\n }\n return Math.floor(distWidth);\n });\n};\n\n/**\n * Distributeed heights returned\n *\n * @param {Object} context input for the height distribution\n * @return {Object} distribured heights\n */\nexport const getDistributedHeight = (context) => {\n let distSum = 0;\n let gutterSum = 0;\n let heightWithoutGutter = 0;\n const {\n isTransposed,\n distribution,\n availableHeight,\n height,\n isDistributionEqual,\n gutter,\n matrix,\n cIdx\n } = context;\n\n if (distribution && distribution[0] !== undefined) {\n distSum = distribution.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n if (gutter && gutter[0] !== undefined) {\n gutterSum = gutter.reduce((t, n) => {\n t += n;\n return t;\n });\n }\n heightWithoutGutter = availableHeight - Math.floor(availableHeight * gutterSum);\n\n const colLen = matrix.length;\n return matrix.map((row, rIdx) => {\n const col = row[cIdx];\n const space = col.getLogicalSpace().height;\n let distHeight = (space + (heightWithoutGutter - height) * (space / height));\n\n if (!isTransposed) {\n if (distribution.length > 0 && colLen === distribution.length) {\n distHeight = (heightWithoutGutter * distribution[rIdx] / distSum);\n } else if (isDistributionEqual || context.height === 0) {\n distHeight = (heightWithoutGutter / colLen);\n }\n }\n return Math.floor(distHeight);\n });\n};\n\n/**\n *\n *\n * @param {*} arr\n * @param {*} beg\n * @param {*} end\n */\nexport const extraCellsRemover = (arr, beg, end) => arr.slice(beg, -end);\n\n/**\n * Creates matrix instancess\n *\n * @param {Array} [arr=[]] mutated arry\n * @param {number} depth depth of the tree\n * @param {Array} matrixInfo Details about the matrix(tree, etc) to be inserted\n * @param {boolean} layout Instance of layout\n */\nexport const createMatrixInstances = (arr = [], depth, matrixInfo, layout) => {\n const breakPointer = layout._breakPointer;\n const config = layout.config();\n const {\n isTransposed\n } = config;\n const {\n tree,\n layoutMatrix\n } = matrixInfo;\n\n if (depth === 0) {\n const brokenMatrix = breakMatrix(tree.matrix, isTransposed, breakPointer);\n arr.push({\n matrix: tree.matrix,\n primaryMatrix: brokenMatrix[0],\n secondaryMatrix: brokenMatrix[1],\n space: tree.space\n });\n return arr;\n }\n const nextLevel = depth - 1;\n tree.values.forEach((e) => {\n createMatrixInstances(arr, nextLevel, {\n tree: e,\n layoutMatrix\n }, layout);\n });\n return arr;\n};\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, value) => mergeRecursive(context._config || {}, value)\n },\n maxMeasures: {},\n availableSpace: {},\n logicalSpace: {}\n};\n","import { PRIMARY } from '../enums/constants';\n/**\n *\n *\n */\nexport const defaultConfig = {\n distribution: [],\n classPrefix: 'muze',\n isDistributionEqual: true,\n unitMeasures: {\n height: 100,\n width: 100,\n border: 1\n },\n isTransposed: false,\n facet: PRIMARY,\n extraCellLengths: []\n};\n","import { mergeRecursive, generateGetterSetters, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { HEIGHT, WIDTH } from '../enums/constants';\nimport { defaultConfig } from './default-config';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n // Prepare matrices\n this._lastLevelKey = 0;\n this._primaryMatrix = matrix[0] || [];\n this._secondaryMatrix = matrix[1] || [];\n this._maxMeasures = [];\n this._availableSpace = {};\n\n // Store the config\n generateGetterSetters(this, PROPS);\n const defCon = Object.assign({}, this.constructor.defaultConfig());\n this.config(mergeRecursive(defCon, config));\n\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @param {*} params\n * @returns\n * @memberof VisualMatrix\n */\n primaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._primaryMatrix;\n }\n\n secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\n }\n\n /**\n * Returns the space taken by visual matrix\n *\n * @return {Object} space taken by the matrix\n * @memberof VisualMatrix\n */\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n /**\n * Sets the provied space to the visual matrix\n *\n * @param {number} width width provided\n * @param {number} height height provided\n * @memberof VisualMatrix\n */\n setAvailableSpace (width, height) {\n this.availableSpace({ width, height });\n const tree = this.tree();\n const heightMeasures = this.populateMaxMeasures(HEIGHT, tree);\n const widthMeasures = this.populateMaxMeasures(WIDTH, tree);\n const depth = this.calculateDepth(widthMeasures, heightMeasures);\n\n this.viewableMatrix = this.createViewPortMatrix(depth);\n this.viewableMeasures = this.redistributeSpaces(width, height);\n return this;\n }\n\n /**\n * Populate the max measures in the array\n *\n * @param {Array} measures array to be filled with max measures\n * @param {Object} matrixTree matrix tree of visual matrix\n * @param {number} measure width or height\n * @param {number} [depth=0] depth of the tree that to be calculated\n * @memberof VisualMatrix\n */\n populateMaxMeasures (type, matrixTree, depth = 0, measures = []) {\n measures[depth] = Math.max(measures[depth] || 0, matrixTree.space[type]);\n if (matrixTree.values) {\n const childDepth = depth + 1;\n matrixTree.values.forEach((child) => {\n if (child.space) {\n measures = this.populateMaxMeasures(type, child, childDepth, measures);\n }\n });\n }\n return measures;\n }\n\n /**\n * Gets the viewable measures for the current viewable matrix\n *\n * @return {Object} Set of viewable measures\n * @memberof VisualMatrix\n */\n getViewableSpaces () {\n return this.viewableMeasures;\n }\n\n /**\n * Returns the matrix that can be viewed in the current viewport\n *\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n getViewableMatrices () {\n return this.viewableMatrix;\n }\n\n /**\n * Creates the viewport that can be viewed together\n *\n * @param {number} depth maxDepth that can be viewed in the viewport\n * @return {Array} Set of matrices that can be viewed\n * @memberof VisualMatrix\n */\n createViewPortMatrix (depth) {\n const arr = [];\n createMatrixInstances(arr, depth, this.removeExtraCells(), this);\n return arr;\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = (matrix[0].length > 0 ? matrix[0][0].length : 0);\n this._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\n\n // Create Tree\n this._tree = {\n key: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures, heightMeasures) {\n let i;\n const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\n } else {\n cWidths = maxMeasures.map(() => 0);\n }\n rHeights = getDistributedHeight({\n matrix,\n cIdx: this._lastLevelKey,\n height: mHeight,\n availableHeight: height,\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n });\n if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = maxHeights[matrixIndex][rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends VisualMatrix {\n\n /**\n *Creates an instance of VisualMatrix.\n * @param {any} matrix Two set of matrices\n * @param {any} [config={}] Configuration for VisualMatrix\n * @memberof VisualMatrix\n */\n constructor (matrix, config = {}) {\n super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\n }\n\n /**\n * Computes the logical space taken by the entire matrixTree\n *\n * @return {Object} Logical space taken\n * @memberof VisualMatrix\n */\n computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const columnMeasures = [width, width];\n\n return {\n rowHeights: {\n primary: rowHeights[0],\n secondary: rowHeights[1]\n },\n columnWidths: {\n primary: columnWidths[0],\n secondary: columnWidths[1]\n },\n height: {\n primary: heightMeasures[0],\n secondary: heightMeasures[1]\n },\n width: {\n primary: columnMeasures[0],\n secondary: columnMeasures[1]\n }\n };\n });\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n const {\n isTransposed,\n extraCellLengths\n } = this.config();\n const matrix = this._layoutMatrix;\n const tree = mergeRecursive({}, this.tree());\n const begCellLen = extraCellLengths[0];\n const endCellLen = extraCellLengths[1] || Number.NEGATIVE_INFINITY;\n const layoutMatrix = !isTransposed ? extraCellsRemover(matrix, begCellLen, endCellLen) :\n matrix.slice(0).map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n tree.values = extraCellsRemover(tree.values, begCellLen, endCellLen);\n\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\n }\n\n /**\n * Calculates the depth of the tree that can be viewed\n *\n * @param {Array} widthMeasures array of widths\n * @param {Array} heightMeasures array of heights\n * @return {number} depth of the tree\n * @memberof VisualMatrix\n */\n calculateDepth (widthMeasures) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, j);\n }\n\n /**\n * Redistributes the provied space to all cells\n *\n * @param {*} viewableMatrix current viewport matrix\n * @param {*} width provied width\n * @param {*} height provied height\n * @return {Object} current viewports matrixes with measures\n * @memberof VisualMatrix\n */\n redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.viewableMatrix.forEach((matrixInst) => {\n const matrix = matrixInst.matrix;\n const mWidth = 0;\n const mHeight = 0;\n const options = { mWidth, mHeight, matrix, width, height, maxHeights, maxWidths };\n const maxMeasures = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\n const mWidth = spaceTakenByRow(matrix[this._lastLevelKey]).width;\n const cWidths = getDistributedWidth({\n row: matrix[this._lastLevelKey],\n width: mWidth,\n availableWidth: width\n }, this.config());\n\n matrix.forEach((row, rIdx) => row.forEach((col, cIdx) => {\n const oldLogicalSpace = col.getLogicalSpace();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\n for (let x = 0; x < maxHeights.length; x++) {\n maxHeights[x] = rHeights;\n }\n maxWidths.push(cWidths);\n return { maxHeights, maxWidths };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\n const matrix = matrixInst.matrix;\n const rowHeights = [[0], [0]];\n const columnWidths = [[0], [0]];\n const heights = [0, 0];\n const widths = [0, 0];\n const breakPointer = this._breakPointer;\n\n const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} from '../enums/constants';\n\n/**\n * Gets measurement for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @return {Object} Logical height/width of the matrix\n */\nexport function getMatrixMeasurement (matrix, type) {\n if (matrix) {\n return matrix.getLogicalSpace()[type];\n }\n return 0;\n}\n\n/**\n * Sets available space for an instance of visual matrix\n *\n * @param {Array} matrix instance of visual matrix\n * @param {string} type height/width\n * @param {number} value Value of measurement\n */\nexport function setMatrixMeasurement (matrix, type, value) {\n if (matrix) {\n const spaces = matrix.getLogicalSpace();\n if (value && spaces[type] !== value) {\n type === HEIGHT ? matrix.setAvailableSpace(spaces.width, value) :\n matrix.setAvailableSpace(value, spaces.height);\n }\n }\n}\n\nconst setAvailableSpace = (matrix, widths, heights) => {\n matrix.forEach((row, rIdx) => {\n row.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(widths[cIdx], heights[rIdx]);\n });\n });\n};\n\nconst setViewSpaces = (layout, pointerType, viewSpaces) => {\n let pointer = layout.config()[`${pointerType}Pointer`];\n if (viewSpaces.length - 1 < pointer) {\n pointer = 0;\n layout.config({ [`${pointerType}Pointer`]: pointer });\n }\n return pointer;\n};\n\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\n\n // Figuring out total space needed by current view space\n const columnViewSpace = columnViewPages[layout.config().columnPointer];\n\n // Getting height of column matrix\n const columnMatrixHeight = columnViewSpace.height.primary + columnViewSpace.height.secondary;\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\n };\n};\n/**\n * Computes the measurements of space for all matrices in the\n * layout\n *\n * @param {Object} layout Instance of grid layout\n * @return {Object} set of measurements for the layout\n */\nexport const computeLayoutMeasurements = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n","/**\n * Gets view matrices based on current pointers for row and column\n *\n * @param {Object} layout instance of layout\n * @param {number} rowPointer current row pointer\n * @param {number} columnPointer current column pointer\n * @return {Object} returns the view matrix and its relevant information\n */\nexport const getViewMatrices = (layout, rowPointer, columnPointer) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const centerMatrix = layout.centerMatrix();\n const matrices = layout.matrices();\n const rowMatrices = rowMatrix.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\n const centralMatrixPointer = {\n row: 0,\n column: 0\n };\n\n for (let i = rowPointer - 1; i >= 0; i--) {\n const length = Math.max(rowMatrices[i].primaryMatrix.length,\n rowMatrices[i].secondaryMatrix.length);\n centralMatrixPointer.row += length;\n }\n /* istanbul ignore next */\n for (let i = columnPointer - 1; i >= 0; i--) {\n const matrix = columnMatrices[i];\n const { primaryMatrix, secondaryMatrix } = matrix;\n const length = Math.max(primaryMatrix[0] ? primaryMatrix[0].length : 0,\n secondaryMatrix[0] ? secondaryMatrix[0].length : 0);\n centralMatrixPointer.column += length;\n }\n\n matrices.top[1] = columnMatrices[columnPointer].primaryMatrix;\n matrices.bottom[1] = columnMatrices[columnPointer].secondaryMatrix;\n\n matrices.center[0] = rowMatrices[rowPointer].primaryMatrix;\n matrices.center[2] = rowMatrices[rowPointer].secondaryMatrix;\n\n const rowMatrixLen = Math.max(matrices.center[0].length, matrices.center[2].length);\n /* istanbul ignore next */\n const columnMatrixLen = Math.max(matrices.top[1][0] ? matrices.top[1][0].length : 0, matrices.bottom[1][0] ?\n matrices.bottom[1][0].length : 0);\n matrices.center[1] = centerMatrix.slice(centralMatrixPointer.row, centralMatrixPointer.row + rowMatrixLen)\n .map(matrix => matrix.slice(centralMatrixPointer.column, centralMatrixPointer.column + columnMatrixLen));\n\n return {\n matrices,\n rowPages: rowMatrices.length,\n columnPages: columnMatrices.length\n };\n};\n\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\n/**\n * Returns measurements of the cells of the current matrix\n *\n * @param {Object} layout instance of layout\n * @return {Object} returns the measurements for current view matrix\n */\nexport const getViewMeasurements = (layout, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\n };\n};\n","/**\n * This file declares a table that can be extended to create a Datagrid, crosstab\n * and man other visualzations that require a tabular structure.\n */\n\nimport { getUniqueId, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\n/**\n * This class is used to create a tabular structure that\n * can house charts and values.\n *\n * @class GridLayout\n */\nexport default class GridLayout extends GenericLayout {\n\n /**\n * Creates an instance of TableLayout.\n * @param {HTMLElement} matrices Set of upto 9 matrices containing the cells to be rendered\n * @param {HTMLElement} mountPoint DOM element/d3 selection where the layout is to be mounted\n * @param {Object} measurement The dimensions of the layout\n * @param {Object} config external configurations.\n * @memberof GenericLayout\n */\n constructor (matrices, mountPoint, measurement, config) {\n super(mountPoint, measurement, config);\n this.matrices(matrices);\n this.config(this.constructor.defaultConfig());\n this._layoutId = getUniqueId();\n this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\n }\n\n /**\n * Returns initial set of measurements for the grid layout\n *\n * @static\n * @return {Object} Returns initial set of measurements\n * @memberof GridLayout\n */\n static defaultMeasurement () {\n return DEFAULT_MEASUREMENTS;\n }\n\n /**\n * Returns initialconfiguration for grid layout\n *\n * @static\n * @return {Object} Returns initial configuration for grid layout\n * @memberof GridLayout\n */\n static defaultConfig () {\n return DEFAULT_CONFIGURATION;\n }\n\n /**\n * This function is used to return an instance of GridLayout\n *\n * @return {GridLayout} Instance of grid layout.\n * @static\n * @memberof GridLayout\n */\n static create () {\n return new GridLayout(null, null, this.defaultMeasurement(), this.defaultConfig());\n }\n\n /**\n * Sets/Gets the matrices for the layout\n *\n * @param {Array} matrices Set of matrices\n * @return {Object} Getter/Setter\n * @memberof GridLayout\n */\n matrices (matrices) {\n if (matrices) {\n this._matrices = generateVisualMatrices(this, matrices);\n return this;\n }\n return super.matrices(matrices);\n }\n\n /**\n * Triggers the computations for the layout based on the matrices available\n * This causes a reflow in the entire layout system.\n *\n * @return {Object} Layout instance\n * @memberof GridLayout\n */\n triggerReflow () {\n this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\n const totalPages = viewMatricesInfo[`${pageType}Pages`];\n const pointer = Math.min(Math.max(1, pageNumber), totalPages);\n this.config({\n [`${pageType}Pointer`]: pointer - 1\n });\n this.setViewInformation();\n this.renderGrid();\n return this;\n }\n\n pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\n\nexport const generateVisualMatrices = (context, matrices) => {\n // Set of matrices for layout is generated starting with the left matrix\n let leftMatrix = [];\n let rightMatrix = [];\n let topMatrix = [];\n let bottomMatrix = [];\n let begColCells;\n let endColCells;\n const {\n isRowSizeEqual,\n isColumnSizeEqual,\n gutterSpace,\n distribution,\n border,\n breakPage,\n priority\n } = context.config();\n const {\n minUnitHeight,\n minUnitWidth\n } = context.measurement();\n const { top, center, bottom } = matrices;\n const [topLeft, topColumns, topRight] = top;\n const [leftRows, valueMatrix, rightRows] = center;\n const [bottomLeft, bottomColumns, bottomRight] = bottom;\n\n if (leftRows.length > 0) {\n // If no left matrix is present, context will be empty\n leftMatrix = [...topLeft, ...leftRows, ...bottomLeft];\n }\n if (rightRows.length > 0) {\n // If no right matrix is present, context will be empty\n rightMatrix = [...topRight, ...rightRows, ...bottomRight];\n }\n if (topColumns.length > 0 && topColumns[0].length > 0) {\n // If no top matrix is present, context will be empty\n topMatrix = topColumns.map((d, i) => [...topLeft[i], ...d, ...topRight[i]]);\n }\n if (bottomColumns.length > 0 && bottomColumns[0].length > 0) {\n // If no bottom matrix is present, context will be empty\n bottomMatrix = bottomColumns.map((d, i) => [...bottomLeft[i], ...d, ...bottomRight[i]]);\n }\n\n context.rowMatrix(new RowMatrix([leftMatrix, rightMatrix], {\n isDistributionEqual: isRowSizeEqual,\n distribution: distribution.rows,\n gutter: gutterSpace.rows,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.row,\n breakPage: breakPage.rows.map(e => e + Math.max(topLeft.length, topRight.length)),\n extraCellLengths: [topLeft.length, bottomLeft.length]\n }));\n\n if (topLeft.length > 0) {\n begColCells = topLeft[0].length;\n } else {\n begColCells = bottomLeft.length > 0 ? bottomLeft[0].length : 0;\n }\n\n if (topRight.length > 0) {\n endColCells = topRight[0].length;\n } else {\n endColCells = bottomRight.length > 0 ? bottomRight[0].length : 0;\n }\n\n context.columnMatrix(new ColumnMatrix([topMatrix, bottomMatrix], {\n isDistributionEqual: isColumnSizeEqual,\n distribution: distribution.columns,\n gutter: gutterSpace.columns,\n isTransposed: true,\n unitMeasures: {\n width: minUnitWidth,\n height: minUnitHeight,\n border: border.width\n },\n priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = (isFacet, showHeaders) => ({\n [`${TOP}-${LEFT}`]: isFacet && showHeaders ? LEFT : NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: isFacet && showHeaders ? RIGHT : NO_BORDERS,\n [`${CENTER}-${LEFT}`]: isFacet ? `${CENTER}${LEFT}` : ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: isFacet ? `${CENTER}${RIGHT}` : ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n});\n\nconst applySpecificBorder = (params) => {\n const { type, borderWidth, borderStyle, cells, color } = params;\n cells.style(`border-${type}`, `${borderWidth}px ${borderStyle} ${color}`);\n};\n\nconst specificBorderApplier = (params) => {\n const { borderTypes, showBorders, cells, borderInfo, name, isFacet } = params;\n const {\n color,\n style,\n width\n } = borderInfo;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder({\n cells,\n color: showBorders[borderType] ? color : 'transparent',\n type: borderType,\n borderWidth: width,\n borderStyle: style,\n name,\n isFacet\n });\n });\n};\n\nconst borderApplier = (cells, borderInfo, name, isFacet) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n [ROW]: () => specificBorderApplier({\n borderTypes: [TOP, BOTTOM],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [COLUMN]: () => specificBorderApplier({\n borderTypes: [LEFT, RIGHT],\n showBorders: showColBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [CENTER]: () => specificBorderApplier({\n borderTypes: [LEFT, RIGHT, TOP, BOTTOM],\n showBorders: showValueBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [LEFT]: () => specificBorderApplier({\n borderTypes: [LEFT],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [RIGHT]: () => specificBorderApplier({\n borderTypes: [RIGHT],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [`${CENTER}${LEFT}`]: () => specificBorderApplier({\n borderTypes: [LEFT, TOP, BOTTOM],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n }),\n [`${CENTER}${RIGHT}`]: () => specificBorderApplier({\n borderTypes: [RIGHT, TOP, BOTTOM],\n showBorders: showRowBorders,\n cells,\n borderInfo,\n name,\n isFacet\n })\n };\n};\n\nexport const applyBorders = (params) => {\n const { cells, border, row, column, isFacet, showHeaders } = params;\n const name = `${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`;\n const borderApplierFn = borderApplier(cells, border, name, isFacet);\n const borderMapVal = borderMap(isFacet, showHeaders)[name];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\n const spans = [];\n viewMatrix.forEach((row, ridx) => {\n spans[ridx] = spans[ridx] || [];\n row.forEach((col, i) => {\n if (viewMatrix[ridx][i]) {\n const currSpan = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\n };\n};\n\n/**\n * This function is used to set the col and row spans\n * for the matrices based on repeated/hierarchichal data\n *\n * @export\n * @param {Array} matrix The 2d array for which filtering is to be done\n * @param {string} type Type of array (center, top, bottom)\n * @param {number} index Index of array in the row\n * @return {Object} containing the view matrix and their spans\n */\nexport function cellSpanMaker (matrix, type, index) {\n let spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\n};\n","import { ERROR_MSG } from 'muze-utils';\n/**\n * An Interface to be implemented if the transaction support is necessary. This class ensures reactivity to\n * global properties.\n */\nexport default class TransactionSupport {\n /**\n * Property accessor for data member of the class. Data is passed to the system by calling this method.\n */\n data () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for width of the class. Width is passed as an integer.\n */\n width () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for height of the class. Height is passed as an integer.\n */\n height () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n\n /**\n * Property accessor for config of the class. Config is passed as an object.\n */\n config () {\n throw new Error(ERROR_MSG.INTERFACE_IMPl);\n }\n}\n","import { TOP, BOTTOM, LEFT, TITLE, SUB_TITLE, GROUP, LAYOUT, LEGEND } from '../constants';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const arrangeComponents = (context) => {\n const legendConfig = context.config().legend;\n const titleConfig = context.title()[1];\n const subtitleConfig = context.subtitle()[1];\n const titleLayouts = {\n [`${TOP}-${TOP}`]: [TITLE, SUB_TITLE, GROUP],\n [`${BOTTOM}-${BOTTOM}`]: [GROUP, SUB_TITLE, TITLE],\n [`${TOP}-${BOTTOM}`]: [TITLE, GROUP, SUB_TITLE],\n [`${BOTTOM}-${TOP}`]: [SUB_TITLE, GROUP, TITLE]\n };\n const legendLayouts = [\n [LEGEND, LAYOUT],\n [LAYOUT, LEGEND]\n ];\n const titlePosition = titleConfig.position || TOP;\n const subtitlePosition = subtitleConfig.position || TOP;\n\n return {\n headers: titleLayouts[`${titlePosition}-${subtitlePosition}`],\n legends: legendConfig.position === LEFT || legendConfig.position === TOP ?\n legendLayouts[0] : legendLayouts[1]\n };\n};\n","/**\n * Flag to specify whether direction is vertical.\n */\nexport const MARGIN = 'margin';\nexport const LEFT = 'left';\nexport const RIGHT = 'right';\nexport const BOTTOM = 'bottom';\nexport const TOP = 'top';\nexport const SPACE_FIXER = 'spaceFixer';\nexport const CLASSPREFIX = 'muze';\nexport const VERTICAL_ALIGN = 'verticalAlign';\nexport const TEXT_ALIGN = 'textAlign';\nexport const IS_OFFSET = 'isOffset';\nexport const MIDDLE = 'middle';\nexport const BASELINE = 'baseline';\nexport const SHOW = 'show';\nexport const CENTER = 'center';\nexport const TEXT = 'text';\nexport const HEADER = 'header';\nexport const HEIGHT = 'height';\nexport const WIDTH = 'width';\nexport const DATA = 'data';\nexport const AXES = 'axes';\nexport const FACET_BY_FIELDS = 'facetByFields';\nexport const FIELDS = 'fields';\nexport const TRANSFORM = 'transform';\nexport const LAYER_DEF = 'layerDef';\nexport const CONFIG = 'config';\nexport const DETAIL_FIELDS = 'detailFields';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\n\nexport const TEXT_CELL = 'text-cell';\nexport const AXIS_CELL = 'axis-cell';\nexport const GEOM_CELL = 'geom-cell';\nexport const BLANK_CELL = 'blank-cell';\n\nexport const PADDING = 'padding';\nexport const HEADER_PADDING = 'headerPadding';\nexport const TITLE_PADDING = 'titlePadding';\n\nexport const TITLE = 'title';\nexport const SUBTITLE = 'subtitle';\n","// eneum to refer to simple cell\nexport const SIMPLE = 'simple';\n// eneum to refer to header cell\nexport const TEXT = 'text';\n// enum to refer to axis cell\nexport const AXIS = 'axis';\n// enum to refer to visual cell\nexport const GEOM = 'geom';\n// enum to refer blank cell\nexport const BLANK = 'blank';\n","import {\n ERROR_MSG,\n getUniqueId,\n mergeRecursive\n} from 'muze-utils';\nimport { SIMPLE } from './enums/cell-type';\nimport { SIMPLE_CELL } from './constants';\n\n/**\n * This file declares a class that is used as an interface to create new\n * SimpleCell elements.\n * @module SimpleCell\n */\n/**\n * Base class for all table cells.\n *\n * @interface\n * @class SimpleCell\n */\nclass SimpleCell {\n\n /**\n * Creates an instance of SimpleCell.\n *\n * @param {*} config The input configuration.\n * @memberof SimpleCell\n */\n constructor (config) {\n this._id = getUniqueId();\n\n const defConfig = mergeRecursive({}, this.constructor.defaultConfig());\n this._config = mergeRecursive(defConfig, config || {});\n\n this._mount = null;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n */\n get type () {\n return SIMPLE;\n }\n\n static formalName () {\n return SIMPLE_CELL;\n }\n\n /**\n * Returns the type of the placehlder.\n *\n * @readonly\n * @memberof SimpleCell\n * @return {Object} Default config for the placeholder\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the value contained by the SimpleCell.\n *\n * @memberof SimpleCell\n */\n valueOf () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a unique identifier for the instance used\n * to control selective rendering.\n *\n * @memberof SimpleCell\n */\n id () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns a serialized representation of the instance.\n *\n * @memberof SimpleCell\n */\n serialize () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Returns an object with width and height fields\n * specifying the space taken up by this metod.\n *\n * @memberof SimpleCell\n */\n getLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Method used to set the space available to render the SimpleCell\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @memberof SimpleCell\n */\n setAvailableSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n render () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Render the SimpleCell inthe supplied mount point.\n *\n * @param {HTMLElement} mount The mount point to render in.\n * @memberof SimpleCell\n */\n remove () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\n }\n\n}\n\nexport default SimpleCell;\n","export const SIMPLE_CELL = 'SimpleCell';\nexport const TEXT_CELL = 'TextCell';\nexport const AXIS_CELL = 'AxisCell';\nexport const BLANK_CELL = 'BlankCell';\nexport const GEOM_CELL = 'GeomCell';\n\n","/**\n * This file exports variables that are used as defaults for\n * the placeholders\n */\nimport * as CONSTANTS from './constants';\n\n /**\n * Default Configuration for the cells\n * @return {Object} Default configuration\n */\nexport const DEFAULT_CONFIG = {\n [CONSTANTS.MARGIN]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.SPACE_FIXER]: 2,\n [CONSTANTS.IS_OFFSET]: false,\n [CONSTANTS.VERTICAL_ALIGN]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null,\n [CONSTANTS.PADDING]: {\n [CONSTANTS.LEFT]: 8,\n [CONSTANTS.RIGHT]: 8,\n [CONSTANTS.TOP]: 10,\n [CONSTANTS.BOTTOM]: 0\n },\n [CONSTANTS.HEADER_PADDING]: {\n [CONSTANTS.LEFT]: 8,\n [CONSTANTS.RIGHT]: 5,\n [CONSTANTS.TOP]: 2,\n [CONSTANTS.BOTTOM]: 5\n },\n [CONSTANTS.TITLE_PADDING]: {\n [CONSTANTS.LEFT]: 0,\n [CONSTANTS.RIGHT]: 0,\n [CONSTANTS.TOP]: 0,\n [CONSTANTS.BOTTOM]: 0\n }\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { GEOM, TEXT, AXIS, BLANK } from './enums/cell-type';\n\nconst DEFAULT_PROPS = {\n mount: {},\n availHeight: {},\n availWidth: {},\n config: {\n sanitization: (context, value) => mergeRecursive(context._config, value)\n },\n logicalSpace: {},\n minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, DEFAULT_PROPS),\n [AXIS]: DEFAULT_PROPS,\n [BLANK]: DEFAULT_PROPS\n};\n","/**\n * This file declares a class that represents a table cell\n * used to house an axis.\n * @module VisualCell\n */\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport { CLASSPREFIX, HEIGHT, WIDTH, AXIS_CELL, BOTTOM, TOP } from './enums/constants';\nimport SimpleCell from './simple-cell';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { AXIS } from './enums/cell-type';\nimport { PROPS } from './props';\nimport * as CONSTANTS from './constants';\n\n/**\n * Computes the logical space of the an axis instance within an axis cell\n *\n * @param {Object} context Required to get the needed parameters to compute axis space\n * @return {Object} Returns the logical space for axis\n */\nconst computeAxisSpace = (context) => {\n let logicalWidth;\n let logicalHeight;\n const axis = context.source();\n const {\n spaceFixer,\n margin\n } = context.config();\n const {\n width,\n height\n } = axis.getLogicalSpace();\n const {\n show\n } = axis.config();\n if (show === true) {\n logicalHeight = Math.floor(height + margin.top + margin.bottom + spaceFixer);\n logicalWidth = Math.floor(width + margin.left + margin.right + spaceFixer);\n } else {\n [logicalWidth, logicalHeight] = [width, height];\n }\n return {\n width: logicalWidth,\n height: logicalHeight\n };\n};\n\n/**\n * Represents an axis cell.\n *\n * @class Axis\n */\nclass AxisCell extends SimpleCell {\n\n /**\n * Creates an instance of AxisCell.\n *\n * @param {Object} config The input config.\n * @memberof AxisCell\n */\n constructor (config) {\n super(config);\n\n this._axis = null;\n this._availHeight = null;\n this._availWidth = null;\n this._logicalSpace = null;\n\n generateGetterSetters(this, PROPS[AXIS]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof AxisCell\n */\n get type () {\n return AXIS;\n }\n\n /**\n * This method return the value conatined by this SimpleCell.\n *\n * @return {SimpleAxis | ColorAxis} Instance of SimpleAxis or ColorAxis.\n * @memberof AxisCell\n */\n valueOf () {\n return this.source().id;\n }\n\n /**\n * This method return the unique identififer of the axis\n *\n * @return {string} Id of the axis.\n * @memberof AxisCell\n */\n get id () {\n return this._id;\n }\n\n static formalName () {\n return CONSTANTS.AXIS_CELL;\n }\n\n /**\n * Retrns the serialized representation of this cell.\n *\n * @return {Object}Object with serializable props.\n * @memberof AxisCell\n */\n serialize () {\n return {\n type: AXIS,\n axis: this.source().serialize()\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof AxisCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * return the space taken up by an axis element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof AxisCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeAxisSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space availiable to render\n * the SimpleCell.\n *\n * @param {number} width The width of SimpleCell.\n * @param {number} height The height of SimpleCell.\n * @return {Instance} Returns current Instance\n * @memberof AxisCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n const {\n margin,\n isOffset\n } = this.config();\n\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the axis inside the axis cell.\n *\n * @param {HTMLElement} mount The mount point.\n * @return {Selection} node where axis mounted\n * @memberof AxisCell\n */\n /* istanbul ignore next */render (mount) {\n if (!mount) {\n return this;\n }\n let actualWidth = 0;\n let actualHeight = 0;\n const axis = this.source();\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const {\n margin\n } = this.config();\n const {\n top,\n bottom,\n left,\n right\n } = margin;\n const {\n show,\n orientation\n } = axis.config();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [this], `${CLASSPREFIX}-${AXIS_CELL}`);\n const selection = makeElement(wrapperDiv, 'svg', [1], `${CLASSPREFIX}-axis-container`);\n selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}px`)\n .style('margin-top', top)\n .style('margin-bottom', bottom)\n .style('margin-left', left)\n .style('margin-right', right);\n\n axis.mount(selection.node());\n return selection;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Current instance of AxisCell\n * @memberof AxisCell\n */\n remove () {\n this.source() && this.source().remove();\n this.mount() && this.mount().remove();\n return this;\n }\n}\n\nexport default AxisCell;\n\n","/**\n * This file declares a class that represents a BLANK element in a table.\n * @module VisualCell\n */\nimport {\n selectElement,\n makeElement,\n applyStyle,\n generateGetterSetters\n } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { CLASSPREFIX, BLANK_CELL } from './enums/constants';\nimport { BLANK } from './enums/cell-type';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { PROPS } from './props';\nimport * as CONSTANTS from './constants';\n\n/**\n * Represents a table haeder.\n *\n * @class BLANK\n */\nclass BlankCell extends SimpleCell {\n\n /**\n * Creates an instance of BLANK.\n * @param {Object} config The input configuration.\n * @memberof BLANK\n */\n constructor (config) {\n super(config);\n\n generateGetterSetters(this, PROPS[BLANK]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof BlankCell\n */\n get type () {\n return BLANK;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof BlankCell\n */\n valueOf () {\n return this.id;\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof BlankCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * This method is used to return a unique identifier for\n * the BLANK cell.\n *\n * @return {string} The unique identifier for the BLANK.\n * @memberof BlankCell\n */\n get id () {\n return this._id;\n }\n\n static formalName () {\n return CONSTANTS.BLANK_CELL;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof BLANK\n */\n serialize () {\n return {\n type: BLANK\n };\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof BLANK\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n return {\n width: this.width || 0,\n height: this.height || 0\n };\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the BLANK cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof BLANK\n */\n /* istanbul ignore next */render (mount) {\n if (mount) {\n const { style } = this.config();\n // append span element to mount point\n this.mount(mount);\n const container = selectElement(mount);\n const elem = makeElement(container, 'div', [this.id]);\n elem.classed(`${CLASSPREFIX}-${BLANK_CELL}`, true);\n elem.style('width', `${this.availWidth()}px`);\n elem.style('height', `${this.availHeight()}px`);\n elem.html('');\n // apply style on the returned element\n if (style) {\n applyStyle(elem, style);\n }\n } return this;\n }\n\n /**\n * Removes the cell(Disposal)\n *\n * @return {Instance} Returns current Instance\n * @memberof BlankCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n\n getMinMeasures () {\n return 0;\n }\n }\nexport default BlankCell;\n","import {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n HEADER,\n TITLE,\n SUBTITLE\n} from './enums/constants';\n\nexport const setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\n\nexport const isTitleSubtitle = (subType) => {\n let returnVal = false;\n if (subType === `${TITLE}` || subType === `${SUBTITLE}`) {\n returnVal = true;\n }\n return returnVal;\n};\n\n/**\n* Computes the Logical Space for the text\n*\n* @param {Object} context Required to get the needed parameters to compute text space\n* @return {Object} Logical space taken up by text\n* @memberof TextCell\n*/\nexport const computeTextSpace = (context) => {\n const { labelManager } = context.dependencies();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n const { height: smHeight, width: smWidth } = smartSpace;\n space.width = smWidth;\n space.height = smHeight;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n const { subType, headerPadding } = context.config();\n if (!isTitleSubtitle(subType)) {\n space.width += headerPadding[LEFT] + headerPadding[RIGHT];\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\n };\n } return {\n width: 0,\n height: 0\n };\n};\n\nexport const setPadding = (measures) => {\n const { elem, className, headerPadding, padding, type, titlePadding } = measures;\n let localPadding;\n if (isTitleSubtitle(className)) {\n localPadding = titlePadding;\n } else if (type === HEADER) {\n localPadding = headerPadding;\n } else {\n localPadding = padding;\n }\n [TOP, BOTTOM, LEFT, RIGHT].forEach((position) => {\n elem.style(`padding-${position}`, `${localPadding[position]}px`);\n });\n return elem;\n};\n","/**\n * This file declares a class that represents a Text element in a table.\n * @module VisualCell\n */\n\nimport {\n selectElement,\n makeElement,\n getSmartComputedStyle,\n generateGetterSetters\n} from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { TEXT } from './enums/cell-type';\nimport { PROPS } from './props';\nimport { DEFAULT_CONFIG } from './enums/defaults';\nimport { CLASSPREFIX, TOP, BOTTOM, LEFT, RIGHT, HEADER, WIDTH, TEXT_CELL } from './enums/constants';\nimport './text-cell.scss';\nimport * as CONSTANTS from './constants';\nimport {\n setSmartText,\n computeTextSpace,\n setPadding\n} from './text-cell-helper';\n\n/**\n * Represents a table haeder.\n *\n * @class Text\n */\nclass TextCell extends SimpleCell {\n\n /**\n * Creates an instance of Text.\n * @param {Object} config The input configuration.\n * @param {string} dependencies Dependencies for the class(labelManager)\n * @memberof Text\n */\n constructor (config, dependencies) {\n super(config);\n\n this._dependencies = dependencies;\n this._className = this._config.className ||\n (this._config.type === HEADER ? `${CLASSPREFIX}-${HEADER}-cell` : `${CLASSPREFIX}-${TEXT}-cell`);\n this._computedStyle = getSmartComputedStyle(selectElement('body'), this._className);\n this._dependencies.labelManager.setStyle(this._computedStyle);\n generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof TextCell\n */\n get type () {\n return TEXT;\n }\n\n /**\n * This method return the value contained by this SimpleCell.\n *\n * @return {string} The text value contained by this cell.\n * @memberof TextCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return a unique identifier for\n * the Text cell.\n *\n * @return {string} The unique identifier for the Text.\n * @memberof TextCell\n */\n get id () {\n return this._id;\n }\n\n /**\n * Returns the dependencies of the instance\n *\n * @return {Object} Dependencies needed by the class\n * @memberof TextCell\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n * This method is used to obtain a serialized representation of this instance.\n *\n * @return {Object} Object with serilizable props.\n * @memberof TextCell\n */\n serialize () {\n return {\n text: this.source(),\n type: TEXT\n };\n }\n\n /**\n * return the default configuration for the text cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof TextCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n static formalName () {\n return CONSTANTS.TEXT_CELL;\n }\n\n /**\n * This method return the space taken up\n * by the text with the style applied.\n *\n * @return {Object} width and height taken up by the text.\n * @memberof Text\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeTextSpace(this));\n }\n const space = computeTextSpace(this);\n this.logicalSpace(space);\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the available space.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n setAvailableSpace (width, height) {\n this.availWidth(width);\n this.availHeight(height);\n setSmartText(this);\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * This method is used to render the Text cell inside\n * the provided mount point.\n *\n * @param {HTMLElement} mount The mount point for this cell.\n * @return {Instance} Returns current Instance\n * @memberof Text\n */\n render (mount) {\n const availWidth = this.availWidth();\n const availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation,\n padding,\n type,\n headerPadding,\n className,\n titlePadding\n } = this.config();\n\n this.mount(mount);\n if (show) {\n const container = selectElement(mount);\n let elem = makeElement(container, 'div', [this.id], `${CLASSPREFIX}-${TEXT_CELL}`);\n const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n\n [TOP, BOTTOM, LEFT, RIGHT].forEach((position) => {\n container.style(`margin-${position}`, `${margin[position]}px`);\n });\n\n elem = setPadding({ elem, className, headerPadding, padding, type, titlePadding });\n if (this._className === 'muze-grid-headers') {\n elem.style('text-align', textAlign);\n }\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Instance} Returns current Instance\n * @memberof TextCell\n */\n remove () {\n this.mount() && this.mount().remove();\n return this;\n }\n }\n\nexport default TextCell;\n","/**\n * This file declares a class that is used to represent a table cell\n * that houses a visual unit.\n * @module VisualCell\n */\n\nimport { selectElement, makeElement, generateGetterSetters } from 'muze-utils';\nimport SimpleCell from './simple-cell';\nimport { GEOM } from './enums/cell-type';\nimport { PROPS } from './props';\nimport {\n CLASSPREFIX, HEIGHT, WIDTH, DATA, AXES, FACET_BY_FIELDS, FIELDS, TRANSFORM, LAYER_DEF, CONFIG, GEOM_CELL,\n DETAIL_FIELDS\n} from './enums/constants';\nimport * as CONSTANTS from './constants';\nimport { DEFAULT_CONFIG } from './enums/defaults';\n\n/**\n * Calculates the logical space of the cell\n *\n * @param {Object} context Required to get the needed parameters to compute unit space\n * @return {Object} Logical space taken up by the unit\n * @memberof GeomCell\n */\nconst computeGeomSpace = (context) => {\n const config = context.source().config();\n const { width, height } = config;\n return {\n width: Math.ceil(width),\n height: Math.ceil(height + context.getCaptionSpace().height)\n };\n};\n\n /**\n * This class represents a SimpleCell for visual unit.\n *\n * @class GeomCell\n */\nclass GeomCell extends SimpleCell {\n\n /**\n * Creates an instance of GeomCell.\n * @param {Object} config The input configuration.\n * @memberof GeomCell\n */\n constructor (config) {\n super(config);\n\n this._unit = null;\n this._layers = null;\n this._axes = {};\n this._datamodel = {};\n this._facetByFields = {};\n this._fields = null;\n this._transform = null;\n this._caption = null;\n\n generateGetterSetters(this, PROPS[GEOM]);\n }\n\n /**\n * return the type pf SimpleCell cell.\n *\n * @readonly\n * @memberof GeomCell\n */\n get type () {\n return GEOM;\n }\n\n /**\n * This method return the value contained by this cell.\n *\n * @return {VisualUnit} Instance of visual unit contained by visual unit.\n * @memberof GeomCell\n */\n valueOf () {\n return this.source();\n }\n\n /**\n * This method is used to return the id of the\n * visual unit housed by this cell.\n *\n * @return {string} The unique id of the visual unit.\n * @memberof GeomCell\n */\n get id () {\n return this.source().id();\n }\n\n static formalName () {\n return CONSTANTS.GEOM_CELL;\n }\n\n /**\n * This method return a serialized representation of\n * this instance.\n *\n * @return {Object} Object with serializable props.\n * @memberof GeomCell\n */\n serialize () {\n return {\n type: GEOM,\n unit: this.source().serialize(),\n caption: this.caption()\n };\n }\n\n /**\n * return the default configuration for the geom cell\n *\n * @static\n * @return {Object} Default configuration of the cell\n * @memberof GeomCell\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n * Updates the model based on the changed parameters\n *\n * @return {Instance} return instance\n * @memberof GeomCell\n */\n updateModel () {\n const unit = this.source();\n unit.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\n return this;\n }\n\n /**\n * It gives the space taken by the caption of the unit\n *\n * @return {Object} return the space taken by caption\n * @memberof GeomCell\n */\n getCaptionSpace () {\n const caption = this.caption();\n\n let captionSpace = { width: 0, height: 0 };\n if (caption) {\n captionSpace = caption.getLogicalSpace();\n }\n return captionSpace;\n }\n\n /**\n * return the space taken up by the element in the dom.\n *\n * @return {Object} Object with width and height fields.\n * @memberof GeomCell\n */\n getLogicalSpace () {\n if (!this.logicalSpace()) {\n this.logicalSpace(computeGeomSpace(this));\n }\n return this.logicalSpace();\n }\n\n /**\n * This method is used to set the space available to\n * render the SimpleCell.\n *\n * @param {number} width The available width.\n * @param {number} height The available height.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n setAvailableSpace (width, height) {\n const unit = this.source();\n\n this.availWidth(width);\n this.availHeight(height);\n unit.lockModel()\n .width(width).height(height - this.getCaptionSpace().height)\n .unlockModel();\n this.logicalSpace(null);\n return this;\n }\n\n /**\n * his method is used to render the visual unit inside the provided cell.\n *\n * @param {HTMLElement} mount The mountpoint in the table.\n * @return {Instance} Returns current Instance\n * @memberof GeomCell\n */\n render (mount) {\n if (mount) {\n this.mount(mount);\n const availHeight = this.availHeight();\n const availWidth = this.availWidth();\n const caption = this.caption();\n const wrapperDiv = makeElement(selectElement(mount), 'div', [1], `${CLASSPREFIX}-${GEOM_CELL}`);\n\n if (caption) {\n const captionDom = makeElement(wrapperDiv, 'div', [caption], `${CLASSPREFIX}-unit-caption`).node();\n caption.render(captionDom);\n }\n const selection = makeElement(wrapperDiv, 'div', [1], `${CLASSPREFIX}-unit`);\n wrapperDiv.style(WIDTH, `${availWidth}px`).style(HEIGHT, `${availHeight}px`);\n selection.style(WIDTH, `${availWidth}px`)\n .style(HEIGHT, `${availHeight - this.getCaptionSpace().height}px`);\n this.source().mount(selection.node());\n }\n return this;\n }\n\n /**\n * Disposes the cell\n *\n * @return {Object} Current instance\n * @memberof GeomCell\n */\n remove () {\n this.mount() && this.mount().remove();\n this.source().remove();\n return this;\n }\n}\n\nexport default GeomCell;\n","import AxisCell from './axis-cell';\nimport BlankCell from './blank-cell';\nimport TextCell from './text-cell';\nimport GeomCell from './geom-cell';\nimport SimpleCell from './simple-cell';\n\nimport * as CONSTANTS from './constants';\n\nexport const DEFAULT_PLACEHOLDERS = {\n [CONSTANTS.SIMPLE_CELL]: SimpleCell,\n [CONSTANTS.TEXT_CELL]: TextCell,\n [CONSTANTS.AXIS_CELL]: AxisCell,\n [CONSTANTS.GEOM_CELL]: GeomCell,\n [CONSTANTS.BLANK_CELL]: BlankCell\n};\n","import { DEFAULT_PLACEHOLDERS } from './defaults';\n\n/**\n * Creates a registry for the cells, which can be used for\n * setting a new cell or getting the registered cells\n *\n * @return {Object} Setters and getters for registered cells\n */\nconst cellRegistry = () => {\n const reg = DEFAULT_PLACEHOLDERS;\n return {\n register: (def) => {\n const key = def.formalName();\n if (key in reg) {\n reg[key] = def;\n }\n return cellRegistry;\n },\n get: () => reg\n };\n};\nexport default cellRegistry;\n","import { TextCell } from '@chartshq/visual-cell';\nimport { escapeHTML } from 'muze-utils';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\n */\nconst resolveTitleSubTitleContent = (rawContent) => {\n if (typeof rawContent === 'function' && !rawContent._sanitize) {\n return rawContent();\n }\n return escapeHTML(rawContent());\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} cellType\n * @param {*} labelManager\n * @param {*} prevCell\n *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`,\n subType: cellType\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\n\n return {\n height: cell.getLogicalSpace().height,\n cell\n };\n};\n\n/**\n *\n *\n * @param {*} config\n * @param {*} type\n * @param {*} labelManager\n * @param {*} cell\n *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\n labelManager,\n prevCell\n );\n};\n\n/**\n *\n *\n * @param {*} context\n */\nexport const createHeaders = (context, canvasHeight, canvasWidth) => {\n let headerHeight = 0;\n const headers = {};\n const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\n\n const { height, cell } = createHeading(config, type, context.dependencies().smartlabel,\n context[`${type}Cell`]);\n\n headers[`${type}Cell`] = cell;\n context._composition[type] = cell;\n headerHeight += height;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\nimport {\n VERTICAL, HORIZONTAL, LEFT, RIGHT, LEGEND_TYPE_MAP, PADDING,\n BORDER, MARGIN, SIZE, COLOR, IS_POINT_MAP, POINT\n} from '../constants';\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n *\n */\nexport const legendCreator = (canvas) => {\n let LegendCls;\n const dataset = [];\n const axes = canvas.getRetinalAxes();\n\n Object.entries(axes).forEach((axisInfo) => {\n const scale = axisInfo[1][0];\n const scaleType = axisInfo[0];\n const scaleProps = canvas[scaleType]();\n\n if (scaleProps.field && scale) {\n const {\n type,\n step\n } = scale.config();\n\n const stepMapper = typeof step === 'boolean' ? step : false;\n LegendCls = LEGEND_TYPE_MAP[`${type}-${stepMapper}-${scaleType}`];\n dataset.push({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n * @param {*} mark mark of the layers in the canvas\n * @param {*} scaleType type of the scale to draw the legend ie shape, size or color\n *\n */\nexport const legendIconShapeMapper = (layers, scaleType) => {\n const layerMarks = layers.map(el => el.mark);\n const shape = IS_POINT_MAP[(scaleType === COLOR || scaleType === SIZE)\n && layerMarks.includes(POINT)];\n return shape;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\n */\nexport const legendInitializer = (legendConfig, canvas, measurement, prevLegends) => {\n const legends = [];\n const {\n height,\n width,\n headerHeight\n } = measurement;\n const {\n position,\n align\n } = legendConfig;\n\n const legendInfo = legendCreator(canvas);\n const { invalidValues } = canvas.config();\n const interactionRegistry = canvas.registry().interactions;\n const parser = getValueParser(invalidValues);\n\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\n legend = LegendCls.create({\n labelManager: canvas._dependencies.smartlabel,\n cells: {\n AxisCell, TextCell\n },\n registry: {\n interactions: interactionRegistry\n }\n });\n }\n legendMeasures.maxHeight = align === VERTICAL ? (height - headerHeight) : height * 0.2;\n legendMeasures.maxWidth = align === HORIZONTAL ? width : width * 0.2;\n legendMeasures.width = Math.min(legendMeasures.maxWidth, config.width);\n legendMeasures.height = Math.min(legendMeasures.maxHeight, config.height);\n\n [PADDING, BORDER, MARGIN].forEach((e) => {\n legendMeasures[e] = config[e];\n });\n const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n\n const mark = canvas.composition().visualGroup.resolver().matrixLayers()[0][0];\n config.shape = legendIconShapeMapper(mark, scaleType);\n\n legend.scale(scale)\n .valueParser(parser)\n .title(title)\n .fieldName(fieldName)\n .config(config)\n .metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName]))\n .measurement(legendMeasures)\n .canvasAlias(canvas.alias())\n .setLegendMeasures();\n\n legends.push({ canvas, legend, scaleType });\n }\n });\n return legends;\n};\n\n/**\n *\n *\n * @param {*} legends\n * @param {*} legendConfig\n * @param {*} availableHeight\n * @param {*} availableWidth\n *\n */\nexport const getLegendSpace = (legends, legendConfig, availableHeight, availableWidth) => {\n const legendMeasures = legends.map(legendInfo => legendInfo.legend.measurement());\n const legendSpace = { width: 0, height: 0 };\n\n legendMeasures.forEach((space) => {\n let height = 0;\n let width = 0;\n width = Math.min(space.width, space.maxWidth);\n height = Math.min(space.height, space.maxHeight);\n\n if (legendConfig.align === HORIZONTAL) {\n if (legendSpace.width + width > availableWidth) {\n legendSpace.width = availableWidth;\n legendSpace.height += height;\n } else {\n legendSpace.width += width;\n legendSpace.height = Math.max(legendSpace.height, height);\n }\n } else if (legendSpace.height + height > availableHeight) {\n legendSpace.height = height;\n legendSpace.width += width;\n } else {\n legendSpace.height += height;\n legendSpace.width = Math.max(legendSpace.width, width);\n }\n });\n if (legendConfig.align === HORIZONTAL) {\n legendSpace.width = availableWidth;\n }\n return legendSpace;\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} headerHeight\n *\n */\nexport const createLegend = (context, headerHeight, height, width) => {\n const measurement = {\n height,\n width,\n headerHeight\n };\n const { legend } = context.config();\n const { show, position } = legend;\n\n legend.classPrefix = context.config().classPrefix;\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n\n legend.show = show ? ((align === VERTICAL && width > 200) || (align === HORIZONTAL && height > 200)) : show;\n legend.align = align;\n return legendInitializer(legend, context, measurement, context.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n\n setComponentInfo () {\n throw Error('setComponentInfo is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\n sel.exit().remove();\n const selEnter = sel.enter().append('div');\n\n const cont = selEnter.merge(sel);\n cont.classed(`${layoutConfig.classPrefix}-inner-container`, true);\n const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.height;\n\n [container, legendMount].forEach((elem) => {\n elem.style('width', `${Math.floor(legWidth)}px`)\n .style('height', `${legHeight}px`)\n .style('float', LEFT);\n });\n\n if (align === VERTICAL) {\n let sections = -1;\n let currHeight = legHeight;\n let currWidth = 0;\n\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n if (leg.measurement().height > currHeight) {\n sections++;\n currWidth = 0;\n currHeight = legHeight;\n } else {\n sections < 0 && sections++;\n }\n sectionComponents[sections] = sectionComponents[sections] || [];\n currHeight -= Math.min(leg.measurement().height, currHeight);\n currWidth = Math.max(Math.min(leg.measurement().width, leg.measurement().maxWidth), currWidth);\n sectionComponents[sections].push({\n legend: leg,\n legendHeight: legHeight,\n legendWidth: currWidth\n });\n });\n\n const mount = makeElement(legendMount, ['div'], sectionComponents, `${classPrefix}-legend-section`);\n // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.classed(`${classPrefix}-legend-vertical-section`, true)\n .style('width', d => `${d[0].legendWidth}px`);\n makeElement(mount, ['div'], d => d, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .each(function (d) {\n d.legend.mount(this);\n })\n .style('width', d => `${d.legendWidth}px`);\n } else {\n const mount = makeElement(legendMount, 'div', [1], `${classPrefix}-legend-section`);\n mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${classPrefix}-legend-components`, {}, d => d.legend.id())\n .style('width', d => `${d.legend.measurement().width}px`)\n .each(function (d) { d.legend.mount(this); });\n }\n }\n\n draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n setComponentInfo (params) {\n const { rootNode } = params;\n this.components.forEach((legendInfo) => {\n const leg = legendInfo.legend;\n leg.setParentInfo({ canvasRoot: rootNode });\n });\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\nimport '../../border-applier.scss';\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n const { classPrefix, row, column, dimensions, border, isFacet, showHeaders } = this.params.config;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders({ cells, border, row, column, isFacet, showHeaders });\n }\n\n renderTable (mount, className, rowData) {\n const table = makeElement(mount, 'table', ['layout'], `${className}-table`);\n const body = makeElement(table, 'tbody', ['layout'], `${className}-body`);\n const rows = makeElement(body, 'tr', rowData, `${className}-tr`);\n const cells = makeElement(rows, 'td',\n (d, i) => d.filter(e => e !== null).map(e =>\n ({ placeholder: e, rowIndex: i })), `${className}-td`, {\n update: (elem, cell) => {\n const { externalClassname } = cell.placeholder.config();\n externalClassname && externalClassname.map(d => elem.classed(`${className}-${d}`, true));\n }\n }, key => key.placeholder.id);\n\n return { table, body, rows, cells };\n }\n\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n const { isFacet, showHeaders } = this.params.component.config();\n matrixConfig.isFacet = isFacet;\n matrixConfig.showHeaders = showHeaders;\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const { isFacet, showHeaders } = this.params.component.config();\n matrixConfig.isFacet = isFacet;\n matrixConfig.showHeaders = showHeaders;\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { incorrectMessageIcon } from './message-icon';\nimport { MESSAGE_CONFIG } from '../defaults';\n\nconst formatFontSize = (width, height) => {\n const { baseFontLimit, upperFontLimit, baseSizeLimit, upperSizeLimit } = MESSAGE_CONFIG;\n const fractionFont = (upperSizeLimit - baseSizeLimit) / (upperFontLimit - baseFontLimit);\n let fontSize = upperFontLimit;\n const dim = width < height && width !== 0 ? width : height;\n\n if (dim === 0) {\n fontSize = 0;\n } else if (dim <= baseSizeLimit) {\n fontSize = baseFontLimit;\n } else if (dim > baseSizeLimit && dim < upperSizeLimit) {\n fontSize = baseFontLimit + (upperSizeLimit - dim) / fractionFont;\n }\n return fontSize;\n};\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const childHeight = height > MESSAGE_CONFIG.baseSizeLimit ? MESSAGE_CONFIG.fractionChild * height : 0;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const childNode = makeElement(node, 'div', [1], `${className}-child`);\n const imageNode = makeElement(childNode, 'div', [1], `${className}-child-img`);\n const messageNode = makeElement(childNode, 'div', [1], `${className}-child-message`);\n\n applyStyle(childNode, { width, height: `${childHeight}px` });\n applyStyle(imageNode, { width, height: `${childHeight * MESSAGE_CONFIG.fractionImage}px` });\n\n imageNode.html(incorrectMessageIcon);\n\n const textElement = makeElement(messageNode, 'text', [1]);\n applyStyle(messageNode, { 'font-size': `${formatFontSize(width, height)}px` });\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n const { target, className } = params.config;\n this.component = params.component;\n this.params = params;\n this.target(target);\n this.className(className);\n this.position(params.config.position);\n return this;\n }\n}\n","export const incorrectMessageIcon = `\n\n\nGroup 23\n Created with Sketch.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `;\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n ERROR_MESSAGE,\n HORIZONTAL_CENTER\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n// Mapping of header alignment values\nconst headerAlignmentMap = {\n [LEFT]: LEFT,\n [RIGHT]: RIGHT,\n [CENTER]: HORIZONTAL_CENTER\n};\n\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: headerAlignmentMap[headerConfig.align],\n className: configType.className\n });\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, renderDetails, renderGrid) => {\n const { components, measurement } = renderDetails;\n const headerValues = Object.values(components.headers);\n let sum = 0;\n let messageWrapper = null;\n\n for (const val of headerValues) {\n sum += val.logicalSpace().height;\n }\n\n if (!renderGrid) {\n const defaultDimensions = { height: measurement.canvasHeight - sum, width: measurement.canvasWidth };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: ERROR_MESSAGE,\n classPrefix: MESSAGE_CONFIG,\n position: TOP\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent.updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\n .matrices({\n top: [topLeft, columns[0], topRight],\n center: [rows[0], values, rows[1]],\n bottom: [bottomLeft, columns[1], bottomRight]\n })\n .triggerReflow();\n }\n};\n\n/**\n *\n *\n * @param {*} context\n * @param {*} mount\n *\n */\nexport const getRenderDetails = (context, mount) => {\n let layoutConfig = mergeRecursive({}, context.config());\n // Get height width of the mount point\n let { height, width } = mount.getBoundingClientRect();\n const heightAttr = context.height();\n const widthAttr = context.width();\n const visGroup = context.composition().visualGroup;\n const {\n isColumnSizeEqual,\n isRowSizeEqual,\n priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\n // Get title configuration\n const titleConfig = context.title()[1];\n // Get subtitle configuration\n const subtitleConfig = context.subtitle()[1];\n // Get legend position\n const legendPosition = legend.position;\n // Arrange components according to config\n const layoutArrangement = arrangeComponents(context);\n\n height = Math.floor(height);\n width = Math.floor(width);\n\n const availableHeightForCanvas = Math.max(heightAttr > 0 ? heightAttr : height, minHeight);\n const availableWidthForCanvas = Math.max(widthAttr > 0 ? widthAttr : width, minWidth);\n\n // Create headers and determine header height\n const { headers, headerHeight } = createHeaders(context, availableHeightForCanvas, availableWidthForCanvas);\n\n // Create legends and determine legend space\n const legends = createLegend(context, headerHeight, availableHeightForCanvas, availableWidthForCanvas);\n context._composition.legend = {};\n legends.forEach((e) => {\n context._composition.legend[e.scaleType] = e.legend;\n });\n\n const legendSpace = getLegendSpace(legends, legend, availableHeightForCanvas, availableWidthForCanvas);\n const legendWidth = (legendPosition === LEFT || legendPosition === RIGHT) ? legendSpace.width : 0;\n const legendHeight = (legendPosition === TOP || legendPosition === BOTTOM) ? legendSpace.height : 0;\n\n // Set components for layouting\n const components = {\n headers,\n legends,\n canvases: [context],\n rows,\n columns,\n values,\n cornerMatrices: visGroup.cornerMatrices()\n };\n\n const measurement = {\n mountSpace: {\n height,\n width\n },\n headerHeight,\n legendSpace,\n canvasWidth: availableWidthForCanvas,\n canvasHeight: availableHeightForCanvas,\n width: availableWidthForCanvas - legendWidth,\n height: availableHeightForCanvas - headerHeight - legendHeight,\n minUnitHeight: context.minUnitHeight(),\n minUnitWidth: context.minUnitWidth()\n };\n layoutConfig = mergeRecursive(layoutConfig, {\n classPrefix,\n showHeaders,\n border: mergeRecursive(visGroup.metaData().border, context.config().border),\n layoutArrangement,\n legend,\n buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import { isSimpleObject, ReservedFields, FieldType } from 'muze-utils';\nimport { getSideEffects, BEHAVIOURS } from '@chartshq/muze-firebolt';\nimport { PSEUDO_SELECT } from '@chartshq/visual-unit/src/enums/behaviours';\n\nexport const addFacetDataAndMeasureNames = (data, facetData, measureNames) => {\n if (data === null) {\n return data;\n }\n\n const facets = Object.keys(facetData);\n const facetVals = Object.values(facetData);\n\n if (isSimpleObject(data)) {\n return Object.assign({}, Object.keys(facetData).reduce((acc, v) => {\n acc[v] = [facetData[v]];\n return acc;\n }, {}), data, {\n [ReservedFields.MEASURE_NAMES]: measureNames\n });\n }\n const criteriaFields = data[0];\n const hasMeasureNameField = criteriaFields.find(field => field === ReservedFields.MEASURE_NAMES);\n const fieldsWithFacets = [...facets, ...criteriaFields,\n ...(hasMeasureNameField ? [] : [ReservedFields.MEASURE_NAMES])];\n\n const dataWithFacets = [\n fieldsWithFacets\n ];\n\n for (let i = 1, len = data.length; i < len; i++) {\n let measureNameArr = [];\n if (!hasMeasureNameField && measureNames) {\n measureNameArr = measureNames;\n }\n const row = [...facetVals, ...data[i], ...measureNameArr];\n dataWithFacets.push(row);\n }\n return dataWithFacets;\n};\n\nexport const propagateValues = (instance, action, config = {}) => {\n const { payload, identifiers, sourceUnitId, sourceCanvasId, propagationDataSource } = config;\n const dataModel = propagationDataSource;\n const sideEfffects = instance._sideEffectDefinitions;\n const behaviourEffectMap = instance._behaviourEffectMap;\n const propagationBehaviourMap = instance._propagationBehaviourMap;\n const propagationBehaviour = propagationBehaviourMap[action] || action;\n\n payload.sourceUnit = sourceUnitId;\n payload.action = action;\n payload.sourceCanvas = sourceCanvasId;\n\n const groupId = sourceCanvasId;\n\n const filterFn = (entry, propagationConf) => {\n const effects = behaviourEffectMap[entry.config.action];\n const mutates = entry.config.groupId ?\n (effects ? effects.some(d => sideEfffects[d.name || d].mutates()) : false) : true;\n return entry.config.groupId !== propagationConf.groupId && mutates;\n };\n\n const sourceBehaviour = instance._actions.behavioural[action];\n let isMutableAction = sourceBehaviour ? sourceBehaviour.constructor.mutates() : false;\n const propConfig = {\n payload,\n action,\n criteria: identifiers,\n isMutableAction,\n groupId,\n sourceId: config.sourceId,\n filterFn,\n enabled: (propConf, firebolt) => (action !== propagationBehaviour ?\n propConf.payload.sourceCanvas === firebolt.sourceCanvas() : true)\n };\n\n dataModel.propagate(identifiers, propConfig, true);\n\n if (action !== propagationBehaviour) {\n const behaviourInstance = instance._actions.behavioural[propagationBehaviour];\n isMutableAction = behaviourInstance ? behaviourInstance.constructor.mutates() : false;\n\n dataModel.propagate(identifiers, Object.assign({}, propConfig, {\n isMutableAction,\n applyOnSource: false,\n action: propagationBehaviour,\n sourceId: isMutableAction ? groupId : sourceUnitId,\n enabled: (propConf, firebolt) => propConf.payload.sourceCanvas !== firebolt.sourceCanvas()\n }), true, {\n filterImmutableAction: (actionInf, propInf) => actionInf.groupId !== propInf.groupId\n });\n }\n};\n\nconst isDimension = fields => fields.some(field => field.type() === FieldType.DIMENSION);\n\nexport const isCrosstab = (fields) => {\n const { rowFacets, colFacets, rowProjections, colProjections } = fields;\n if (rowFacets.length || colFacets.length) {\n return true;\n }\n const colProj = colProjections.flat();\n const rowProj = rowProjections.flat();\n\n if ((isDimension(colProj) || isDimension(rowProj)) && (colProj.length > 1 || rowProj.length > 1)) {\n return true;\n }\n return false;\n};\n\nexport const addSelectedMeasuresInPayload = (firebolt, unit, payload) => {\n const groupFields = firebolt.context.composition().visualGroup.resolver().getAllFields();\n if (isCrosstab(groupFields)) {\n const { x, y } = unit.fields();\n let measureFields;\n\n if (x.length && y.length) {\n if (x[0].type() === FieldType.MEASURE) {\n measureFields = [`${x[0]}`];\n } else if (y[0].type() === FieldType.MEASURE) {\n measureFields = [`${y[0]}`];\n }\n payload.selectedMeasures = measureFields;\n }\n }\n};\n\nexport const dispatchBehaviours = (firebolt, { payload, unit, behaviours }) => {\n behaviours.forEach((action) => {\n const actions = firebolt._actions.behavioural;\n payload.criteria = addFacetDataAndMeasureNames(payload.criteria, unit.facetFieldsMap(),\n unit.layers().map(layer => Object.keys(layer.data().getFieldspace().getMeasure())));\n\n addSelectedMeasuresInPayload(firebolt, unit, payload);\n payload.sourceCanvas = firebolt.sourceCanvas();\n firebolt.dispatchBehaviour(action, payload, {\n propagate: false,\n unit\n });\n\n const identifiers = actions[action].propagationIdentifiers();\n\n firebolt.propagate(action, payload, identifiers, {\n sideEffects: getSideEffects(action, firebolt._behaviourEffectMap),\n sourceUnitId: unit.id(),\n sourceId: firebolt.id(),\n propagationDataSource: firebolt.getPropagationSource()\n });\n });\n};\n\nexport const resetSelectAction = (firebolt, { unit, payload, behaviours }) => {\n if (behaviours[0] === BEHAVIOURS.BRUSH && payload.dragging && payload.dragDiff < 5) {\n dispatchBehaviours(firebolt, {\n behaviours: [BEHAVIOURS.SELECT],\n payload: {\n criteria: null\n },\n unit\n });\n }\n};\n\nexport const attachBehaviours = (group) => {\n const allFields = group.resolver().getAllFields();\n const valueMatrix = group.matrixInstance().value;\n const crosstab = isCrosstab(allFields);\n\n valueMatrix.each((cell) => {\n const unit = cell.valueOf();\n const firebolt = unit.firebolt();\n const behaviours = crosstab ? [PSEUDO_SELECT] : [];\n firebolt._connectedBehaviours[BEHAVIOURS.SELECT] = behaviours;\n });\n};\n","import {\n FieldType,\n mergeRecursive,\n CommonProps,\n ReservedFields\n} from 'muze-utils';\nimport { Firebolt, getSideEffects, SpawnableSideEffect } from '@chartshq/muze-firebolt';\nimport { createMapByDimensions } from '@chartshq/visual-unit/src/firebolt/helper';\nimport {\n payloadGenerator,\n isSideEffectEnabled,\n prepareSelectionSetMap\n} from '@chartshq/visual-unit';\nimport { TOOLTIP } from '@chartshq/muze-firebolt/src/enums/side-effects';\nimport { FRAGMENTED } from '@chartshq/muze-firebolt/src/enums/constants';\nimport { applyInteractionPolicy } from '../helper';\nimport {\n propagateValues,\n isCrosstab,\n resetSelectAction,\n dispatchBehaviours,\n attachBehaviours\n} from './helper';\nimport { COMMON_INTERACTION } from '../../constants';\n\nconst setSideEffectConfig = (firebolt) => {\n const tooltipSideEffect = firebolt.sideEffects().tooltip;\n const allFields = firebolt.context.composition().visualGroup.resolver().getAllFields();\n\n if (isCrosstab(allFields)) {\n tooltipSideEffect.config({\n selectionSummary: {\n order: 1,\n className: 'tooltip-content-container-selectionSummary-crosstab',\n showMultipleMeasures: true\n },\n highlightSummary: {\n order: 0,\n className: 'tooltip-content-container-highlightSummary-crosstab'\n }\n });\n } else {\n tooltipSideEffect.config({\n selectionSummary: {\n order: 0,\n className: 'tooltip-content-container-selectionSummary-default',\n showMultipleMeasures: false\n },\n highlightSummary: {\n order: 1,\n className: 'tooltip-content-container-highlightSummary-default'\n }\n });\n }\n};\n\nconst prepareSelectionSetData = (group, dataModel) => {\n const valueMatrix = group.matrixInstance().value;\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.values(fieldsConfig).filter(d => d.def.type === FieldType.DIMENSION);\n const hasMeasures = Object.keys(dataModel.getFieldspace().getMeasure()).length;\n const measureName = hasMeasures ? [ReservedFields.MEASURE_NAMES] : [];\n const keys = {};\n const dimensionsMap = {};\n const groupDataMap = {};\n\n dataModel.getData({ withUid: true }).data.forEach((row) => {\n const uid = row[row.length - 1];\n uid.values().reduce((acc, id) => {\n acc[id] = row;\n return acc;\n }, groupDataMap);\n });\n\n valueMatrix.each((cell) => {\n const unit = cell.source();\n const dm = unit.cachedData()[0];\n const layers = unit.layers();\n const linkedRows = [];\n const { uids: uidsArr } = dm.getData();\n const uids = [];\n\n uidsArr.forEach((uid) => {\n const values = uid.values();\n const id = values.find(idValue => groupDataMap[idValue]);\n const linkedRow = groupDataMap[id];\n\n if (linkedRow) {\n linkedRows.push(linkedRow);\n uids.push(linkedRow[linkedRow.length - 1]);\n }\n });\n\n prepareSelectionSetMap({\n data: linkedRows,\n uids,\n dimensions\n }, layers, {\n keys,\n dimensionsMap\n });\n });\n\n return {\n keys,\n dimensionsMap,\n dimensions,\n allFields: [...dimensions, ...measureName]\n };\n};\n\nconst defaultCrossInteractionPolicy = {\n behaviours: {\n '*': (propagationPayload, firebolt) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = firebolt.sourceCanvas();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n }\n },\n sideEffects: {\n '*': (propagationPayload, firebolt) => {\n const propagationCanvasAlias = propagationPayload.sourceCanvas;\n const canvasAlias = firebolt.sourceCanvas();\n return propagationCanvasAlias ? canvasAlias === propagationCanvasAlias : true;\n },\n selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this.payloadGenerators(payloadGenerator);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\n const throwback = this.context._throwback;\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n this.config(this.context.config().interaction);\n applyInteractionPolicy(this);\n const group = this.context.composition().visualGroup;\n if (group) {\n setSideEffectConfig(this);\n this.createSelectionSet(group.groupedData());\n group.getGroupByData().on('propagation', (data, config) => {\n this.handleDataModelPropagation(data, config);\n });\n // Dispatch pseudo select behaviour for highlighting measures with common dimensions in crosstab\n attachBehaviours(group);\n }\n });\n }\n\n static defaultInteractionPolicy () {\n return () => {};\n }\n\n static defaultCrossInteractionPolicy () {\n return defaultCrossInteractionPolicy;\n }\n\n interactionPolicy (...policy) {\n if (policy.length) {\n this._interactionPolicy = policy[0] || this.constructor.defaultInteractionPolicy();\n return this;\n }\n return this._interactionPolicy;\n }\n\n crossInteractionPolicy (...policy) {\n if (policy.length) {\n this._crossInteractionPolicy = mergeRecursive(mergeRecursive({},\n this.constructor.defaultCrossInteractionPolicy()), policy[0] || {});\n\n applyInteractionPolicy(this);\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n handleDataModelPropagation (data, config) {\n const group = this.context.composition().visualGroup;\n const valueMatrix = group.matrixInstance().value;\n const units = group.resolver().units();\n const propagationData = data;\n if (config.propagationSourceId === this.id()) {\n return this;\n }\n // @todo refactor this code\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n const { interaction: { behaviours: behaviourConfs = {} } } = this.context.config();\n const mode = behaviourConfs[action];\n if (mode !== COMMON_INTERACTION) {\n return this;\n }\n\n const payloadFn = this.getPayloadGeneratorFor(action);\n const payload = payloadFn(this, propagationData, config);\n\n const behaviourPolicies = this._behaviourPolicies;\n const filterFns = Object.values(behaviourPolicies[action] || behaviourPolicies['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, this, {\n sourceIdentifiers,\n propagationData\n }));\n\n if (enabledFn) {\n enabled = enabledFn(config, this) && enabled;\n }\n\n if (enabled) {\n const { instance: unit = units[0][0] } =\n valueMatrix.findPlaceHolderById(propPayload.sourceUnit) || {};\n const propagationInf = {\n propagate: false,\n data: propagationData,\n propPayload,\n sourceIdentifiers,\n sourceId: config.propagationSourceId,\n isMutableAction: config.isMutableAction,\n unit\n };\n\n this.dispatchBehaviour(action, payload, propagationInf);\n }\n\n return this;\n }\n\n registerSideEffects (sideEffects) {\n for (const key in sideEffects) {\n this._sideEffectDefinitions[sideEffects[key].formalName()] = sideEffects[key];\n }\n this.initializeSideEffects();\n\n return this;\n }\n\n target () {\n return 'visual-group';\n }\n\n mapActionsAndBehaviour () {\n const unitMatrix = this.context.composition().visualGroup.matrixInstance().value;\n\n unitMatrix.each((unit) => {\n const firebolt = unit.source().firebolt();\n firebolt.mapActionsAndBehaviour();\n });\n\n this.registerPhysicalActionHandlers();\n }\n\n registerPhysicalActionHandlers () {\n const unitMatrix = this.context.composition().visualGroup.matrixInstance().value;\n\n unitMatrix.each((cell) => {\n const unit = cell.source();\n const firebolt = unit.firebolt();\n\n firebolt.onPhysicalAction('*', (event, payload) => {\n this.handlePhysicalAction(event, payload, unit);\n }, this.context.constructor.formalName());\n });\n\n return this;\n }\n\n handlePhysicalAction (event, payload, unit) {\n const firebolt = unit.firebolt();\n const { behaviours } = firebolt._actionBehaviourMap[event];\n dispatchBehaviours(this, { behaviours, payload, unit });\n // Reset select action when dragging is done. Remove this when brush and select will be unioned\n resetSelectAction(this, { behaviours, payload, unit });\n }\n\n createSelectionSet (data) {\n const group = this.context.composition().visualGroup;\n const { keys, dimensions, dimensionsMap, allFields } = prepareSelectionSetData(group, data);\n this._metaData = {\n dimensionsMap,\n dimensions,\n allFields\n };\n super.createSelectionSet({ keys, fields: dimensions.map(d => d.def.name) });\n\n this._dimsMapGetter = createMapByDimensions(this, this.data());\n\n return this;\n }\n\n id () {\n return this.context.alias();\n }\n\n shouldApplySideEffects (propInf) {\n return propInf.applySideEffect !== false;\n }\n\n data (...params) {\n const group = this.context.composition().visualGroup;\n\n if (params.length) {\n const model = params[0];\n group.groupedData(model);\n this.createSelectionSet(group.groupedData());\n return this;\n }\n\n return group.getGroupByData();\n }\n\n resetData () {\n const group = this.context.composition().visualGroup;\n group.resetData();\n this.createSelectionSet(group.groupedData());\n return this;\n }\n\n getRangeFromIdentifiers ({ criteria, fields }) {\n return fields.reduce((acc, v) => {\n acc[v] = criteria[v];\n return acc;\n }, {});\n }\n\n propagate (behaviour, payload, identifiers, auxConfig = {}) {\n propagateValues(this, behaviour, Object.assign({\n payload,\n identifiers,\n propagationFields: this._propagationFields,\n sourceId: this.id(),\n sourceCanvasId: this.id(),\n propagationDataSource: this.data()\n }, auxConfig));\n }\n\n getPropagationSource () {\n const group = this.context.composition().visualGroup;\n\n return group._originalGroupedData;\n }\n\n sourceCanvas () {\n return this.context.alias();\n }\n\n getApplicableSideEffects (sideEffects, payload, propagationInf) {\n if (payload.sideEffects) {\n return [{\n effects: payload.sideEffects,\n behaviours: [payload.action]\n }];\n }\n const { mode } = this.context.config().interaction.tooltip;\n propagationInf.propPayload = propagationInf.propPayload || payload;\n sideEffects.forEach((d) => {\n let mappedEffects = d.effects;\n mappedEffects = mappedEffects.filter((se) => {\n if (se.name === TOOLTIP && mode === FRAGMENTED) {\n return false;\n }\n return isSideEffectEnabled(this, { se, propagationInf });\n });\n d.effects = mappedEffects;\n });\n return sideEffects;\n }\n\n dispatchBehaviour (action, payload, propagationInf = {}) {\n const group = this.context.composition().visualGroup;\n const units = group.resolver().units();\n const { unit = units[0][0] } = propagationInf;\n const behaviourEffectMap = this._behaviourEffectMap;\n const sideEffects = getSideEffects(action, behaviourEffectMap);\n const sideEffectInstances = this.sideEffects();\n\n sideEffects.forEach(({ effects }) => {\n effects.forEach((effect) => {\n const name = effect.name;\n const inst = sideEffectInstances[name];\n\n if (inst) {\n inst.sourceInfo(() => unit.getSourceInfo());\n inst.layers(() => unit.layers());\n inst.plotPointsFromIdentifiers((...params) =>\n unit.getPlotPointsFromIdentifiers(...params));\n inst instanceof SpawnableSideEffect &&\n inst.drawingContext(() => unit.getDrawingContext());\n inst.valueParser(unit.valueParser());\n }\n });\n });\n super.dispatchBehaviour(action, payload, propagationInf);\n }\n}\n","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport UnitBrushBehaviour from '@chartshq/visual-unit/src/firebolt/behaviours/brush';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\n */\nexport default class Canvas extends TransactionSupport {\n\n /**\n * Creates reactive property accessors.\n * - data\n * - height\n * - width\n * - config\n * This configs are retrieved from options.\n */\n constructor (globalDependencies) {\n super();\n\n this._allOptions = Object.assign({}, options, localOptions);\n this._registry = {};\n this._composition = {};\n this._cachedProps = {};\n this._alias = null;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n this._composition.layout = new GridLayout();\n this._store = new Store(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null,\n propagationInfo: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: Object.assign({}, behaviouralActions, {\n brush: UnitBrushBehaviour\n }),\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\n this.alias(`canvas-${getUniqueId()}`);\n this.title('', {});\n this.subtitle('', {});\n this.legend({});\n this.color({});\n this.shape({});\n this.size({});\n setupChangeListener(this);\n // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\n */\n composition (...params) {\n if (params.length) {\n return this;\n }\n return this._composition;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\n */\n alias (...params) {\n if (params.length) {\n const visualGroup = this.composition().visualGroup;\n this._alias = params[0];\n visualGroup && visualGroup.alias(this.alias());\n return this;\n }\n return this._alias;\n }\n\n /**\n * Creates an instance initiated with given settings.\n *\n * @param {Object} initialSettings Initial settings to be populated in the model\n * @param {Object} regEntry newly created instance with the initial settings\n * @param {Object} globalDependencies dependencies which will be created only once in the page\n *\n * @return {Object} newly created instance with the initial settings\n */\n static withSettings (initialSettings, regEntry, globalDependencies) {\n const instance = new Canvas(globalDependencies);\n\n for (const key in initialSettings) {\n instance[key](initialSettings[key]);\n }\n // set registry for instance\n instance.registry(regEntry);\n return instance;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with canvas.\n */\n firebolt (...firebolt) {\n if (firebolt.length) {\n this._firebolt = firebolt[0];\n return this;\n }\n return this._firebolt;\n }\n\n /**\n * Registry peoperty accessor\n *\n * @param {Object} reg plain old javascript object keyvalue pairs. Key containing module name and value contains\n * module definition class. The reg object has to be flat object of level 1.\n */\n registry (...params) {\n if (params.length) {\n const param = params[0];\n const components = Object.assign({}, param.components);\n const componentSubRegistry = Object.assign({}, param.componentSubRegistry);\n const interactionRegistry = Object.assign({}, param.interactions);\n\n this._registry = { components, componentSubRegistry, interactions: interactionRegistry };\n const initedComponents = initCanvas(this);\n // @todo is it okay to continue this tight behaviour? If not use a resolver to resolve diff component type.\n this._composition.visualGroup = initedComponents[0];\n createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\n return this;\n }\n return this._registry;\n }\n\n /*\n * Prepare dependencies for top level elements\n */\n dependencies (...param) {\n if (param.length) {\n this._dependencies = param[0];\n return this;\n }\n // @todo prepare dependencies here.\n return this._dependencies;\n }\n\n /**\n *\n *\n * @param {*} lifeCycles\n *\n * @memberof Canvas\n */\n lifeCycle (lifeCycles) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n if (lifeCycles) {\n lifeCycleManager.register(lifeCycles);\n return this;\n }\n return lifeCycleManager;\n }\n\n /**\n *\n *\n * @readonly\n * @memberof Canvas\n */\n legend (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().legend;\n }\n\n /**\n * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\n */\n once (eventName) {\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n return lifeCycleManager.retrieve(eventName);\n }\n\n /**\n * Internal function to trigger render, this method is cognizant of all the properties of the core modules and\n * establish a passive reactivity. Passive reactivity is not always a bad thing :)\n * @internal\n */\n render () {\n const mount = this.mount();\n // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n\n this.firebolt().mapActionsAndBehaviour();\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\n }\n}\n","import { cellRegistry, SimpleCell } from '@chartshq/visual-cell';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { layerRegistry } from '@chartshq/visual-layer';\nimport { SimpleGroup, VisualGroup } from '@chartshq/visual-group';\nimport { registry as interactionRegistry } from '@chartshq/muze-firebolt';\n\nexport const COMPONENTS = {\n [VisualGroup.formalName()]: VisualGroup,\n [VisualUnit.formalName()]: VisualUnit\n};\n\nexport const SUBREGISTRIES = {\n cells: cellRegistry,\n layers: layerRegistry\n};\nexport const INTERFACES = {\n SimpleGroup,\n SimpleCell\n};\n\nconst componentRegistry = (components = COMPONENTS) => {\n const reg = Object.assign({}, components);\n\n return {\n register: (cls) => {\n const key = cls.formalName();\n reg[key] = cls;\n return componentRegistry;\n },\n get: () => reg\n };\n};\n\nexport const registry = {\n components: componentRegistry(COMPONENTS),\n cells: cellRegistry(),\n layers: layerRegistry(),\n interactions: interactionRegistry\n};\n","import * as utils from 'muze-utils';\n\nimport { VisualUnit, helpers as unitHelpers, enums as unitEnums, UnitFireBolt } from '@chartshq/visual-unit';\nimport { VisualGroup, Encoders, encoderHelpers, groupUtils, enums as groupEnums } from '@chartshq/visual-group';\nimport {\n SurrogateSideEffect,\n SpawnableSideEffect,\n sideEffects,\n PersistentBehaviour,\n GenericBehaviour,\n VolatileBehaviour,\n behaviouralActions,\n GenericSideEffect,\n Firebolt\n} from '@chartshq/muze-firebolt';\nimport {\n layerFactory,\n BaseLayer,\n LineLayer,\n TextLayer,\n TickLayer,\n PointLayer,\n helpers,\n enums,\n SimpleLayer,\n AreaLayer,\n ArcLayer,\n layerMixins\n} from '@chartshq/visual-layer';\nimport pkg from '../package.json';\nimport * as operators from './operators';\nimport { actionModel as ActionModel } from './action-model';\nimport options from './options';\nimport { Canvas } from './canvas';\nimport { registry as globalRegistry, SUBREGISTRIES } from './default-registry';\nimport './muze.scss';\n\nconst {\n transactor,\n Smartlabel,\n enableChainedTransaction,\n LifeCycleManager,\n DataModel,\n Store\n} = utils;\n\n// Cache singleton instances which should be included only once in a page\nconst globalCache = {};\nconst defaultRegistry = globalRegistry.components;\n\nconst overrideRegistryDefinitions = (overrideRegistry, registry) => {\n overrideRegistry.forEach((def) => {\n registry.register(def);\n });\n};\n\n/**\n * Entry point to renderer. Initializes an environment with settings and registries for canvas. This is a simple wrapper\n * over {@link Canvas} which enables common configuration passing to multiple such canvases.\n *\n * Everytime `muze()` is called it creates an environment. These environment supports subset of APIs of Canvas. If\n * common configuration is used to render multiple canvases then it can be set directly in the env. Like if data is\n * common across all the visulization then its better to set the data in env. When a canvas is created it receives all\n * those configuration from env.\n *\n * ```\n * // Creates an environment\n * const env = muze()\n * // Set data property in environment, so that all the canvas created from the same environment gets this data\n * // automatically\n * env.data(dm);\n * // Creates canvas, by default env pushes data to canvas instance\n * const canvas = env.canvas();\n * ```\n *\n * If a property is set on both environment and canvas instance, property set on canvas instance gets more priority.\n *\n * @public\n * @module muze\n * @namespace Muze\n *\n * @return {Env} Instance of an environment\n */\nconst muze = () => {\n // Setters and getters will be mounted on this. Object will be mutated.\n const [env, globalStore] = transactor({}, options);\n const components = Object.assign({}, globalRegistry.components.get());\n const componentSubRegistryDef = Object.assign({}, SUBREGISTRIES);\n\n const componentSubRegistry = {};\n\n for (const prop in componentSubRegistryDef) {\n componentSubRegistry[prop] = componentSubRegistryDef[prop](globalRegistry[prop].get());\n }\n\n // Apart form the setter getter, an instance method is injected to create real renderer instances\n env.canvas = () => {\n // Create a canvas instance with this settings\n const settings = globalStore.serialize();\n const canvas = Canvas.withSettings(settings, { /* registry */\n components,\n componentSubRegistry,\n interactions: globalRegistry.interactions\n }, env.globalDependencies());\n\n // Whenever settings is changed canvas is updated\n enableChainedTransaction(globalStore, canvas, Object.keys(settings));\n\n return canvas;\n };\n\n // Global dependencies for for compositions. Only one copy of the same should be in the page\n env.globalDependencies = () => {\n if (!globalCache.smartlabel) {\n globalCache.smartlabel = new Smartlabel(1, 'body');\n }\n return {\n smartlabel: globalCache.smartlabel,\n lifeCycleManager: new LifeCycleManager()\n };\n };\n\n // Retrieves global settings. This getter is readonly so that user can't change this as change should happen\n // only from setter to avoid unwanted sync issues.\n env.settings = () => globalStore.serialize();\n\n env.registry = (...overrideRegistry) => {\n // Selectively copy the properties from COMPONENTS\n if (overrideRegistry.length) {\n overrideRegistry.forEach((def) => {\n const prop = def.formalName();\n if (prop in defaultRegistry) {\n components[prop] = def;\n }\n });\n return env;\n }\n return components;\n };\n\n env.cellRegistry = (...overrideRegistry) => {\n const cellRegistry = componentSubRegistry.cellRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry, cellRegistry);\n return env;\n }\n return cellRegistry.get();\n };\n\n env.layerRegistry = (...overrideRegistry) => {\n const layerRegistry = componentSubRegistry.layerRegistry;\n if (overrideRegistry.length) {\n overrideRegistryDefinitions(overrideRegistry, layerRegistry);\n return env;\n }\n return layerRegistry.get();\n };\n\n return env;\n};\n\nmuze.registry = globalRegistry;\n\nmuze.Components = {\n VisualLayer: {\n layers: {\n BaseLayer,\n LineLayer,\n TextLayer,\n TickLayer,\n PointLayer,\n SimpleLayer,\n AreaLayer,\n ArcLayer\n },\n helpers,\n enums,\n layerMixins\n },\n VisualUnit: {\n constructor: VisualUnit,\n helpers: unitHelpers,\n enums: unitEnums,\n UnitFireBolt\n },\n VisualGroup: {\n constructor: VisualGroup,\n Encoders,\n encoderHelpers,\n groupUtils,\n enums: groupEnums\n },\n Canvas: {\n constructor: Canvas\n },\n Firebolt: {\n constructor: Firebolt\n }\n};\n\nconst SideEffects = {\n sideEffects,\n standards: {\n SurrogateSideEffect,\n SpawnableSideEffect,\n GenericSideEffect\n }\n};\n\nconst Behaviours = {\n behaviouralActions,\n standards: {\n GenericBehaviour,\n PersistentBehaviour,\n VolatileBehaviour\n }\n};\n\nmuze.DataModel = DataModel;\nmuze.version = pkg.version;\nmuze.SideEffects = SideEffects;\nmuze.ActionModel = ActionModel;\nmuze.layerFactory = layerFactory;\nmuze.Operators = operators;\nmuze.Behaviours = Behaviours;\nmuze.utils = utils;\nmuze.Model = new Store().model.constructor;\n\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/release/package.json b/release/package.json index 8ba33580..81f92966 100644 --- a/release/package.json +++ b/release/package.json @@ -1,6 +1,6 @@ { "name": "muze", - "version": "1.3.0", + "version": "1.3.1", "description": "Composable visualisation library for web with a data-first approach", "homepage": "https://muzejs.org", "license": "MIT", diff --git a/scripts/run-autotest.js b/scripts/run-autotest.js index f81f2f88..c895d47f 100644 --- a/scripts/run-autotest.js +++ b/scripts/run-autotest.js @@ -220,8 +220,13 @@ const printAutotestSummery = async (tag) => { }); } out('\n'); + if (failedTestcases.length) { + out(` ${chalk.red('Test Cases Failed')}\n`); + throw new Error(); + } } catch (err) { - log(err.message); + out(err.message); + process.exit(1); } }; diff --git a/sherlock-test.json b/sherlock-test.json index 8b87e993..f43b8ea1 100644 --- a/sherlock-test.json +++ b/sherlock-test.json @@ -1,6 +1,6 @@ { "groups": { - "groupNames":["color"] , - "subGroups":["arc","area"] + "groupNames": ["canvas"], + "subGroups": ["sort-config"] } }